Rootkit技术
- 格式:doc
- 大小:24.00 KB
- 文档页数:4
从入门到精通:Rootkit的检测、清除、预防信息来源:邪恶八进制信息安全团队()Rootkit是一种能够以管理员身份访问计算机或计算机网络的程序。
典型情况下,黑客们会通过利用已知的漏洞或口令破解而获得用户级访问,从而将rootkit安装到计算机上。
Rootkit安装以后,它将准许攻击者掩饰其入侵行为,并获得对计算机的root级或特权级的访问,在可能的情况下还可以获得对网络上其它计算机的访问。
rootkit的威胁一般来说,Rootkit自身并不是恶意软件,它是恶意软件用来隐藏自己的一种手段。
但经黑客改造的rookkit可能包括间谍软件和其它的程序,如监视网络通信和用户击键的程序,也可以在系统中构建一个后门便于黑客使用,还可以修改日志文件,攻击网络上的其它计算机,或者改变现有的系统工具以用逃避检测。
黑客利用多种技术来操纵操作系统,其结果就是用户无法利用普通的杀毒软件来找到其踪迹,更别说清除了。
例如,用户无法在资源管理器中利用普通的文件查看程序来查找间谍文件,也不能通过任务管理器或其它的多数进程查看器来查看。
同样地,在系统的启动文件夹内或其它的启动位置中都无法找到其它。
即使用趋势科技的HijackThis这款工具也很困难。
黑客们日益热衷于用rooktit隐藏间谍软件或病毒等,这对于用户而言并不是一个好消息,因为用户们更容易遭受这种感染。
检测rootkit的存在并不是一件容易的事。
多数反间谍软件或反病毒扫描程序无法检测这种代码,虽然一些产品具备了这种功能,但用户需要更加专业的rootkit检测工具。
Rootkit的类型至少有五种类型的rootkit:固件(firmware)rootkit、虚拟化rootkit、内核级rootkit、库级rootkit、应用程序级rootkit等。
1.固件(firmware)rootkit固件(firmware)rootkit使用设备或平台固件来创建顽固的恶意软件镜像。
挂钩技术—、WindowsRootKit概述2005年10月,RootKitRevealer的作者MarkRussinovich发现Sony公司使用RootKit以保护其电子出版物不受盗版侵权DMark在他的Blog上指出Sony公司不仅在消费者毫不知情的情况下(既没有明确告知消费者,也没有在软件的服务条款中提及)向消费者的电脑中安装了—个RootKit,而且知情的攻击者还可以利用这个RootKit隐藏自己的工具。
随后,RootKit 引起了人们广泛关注。
Rootkit是黑客在入侵目标系统后,开辟后门和隐藏行为的技术或者是工具。
当攻击者通过某种方式进入被入侵的系统并安装上RootKit就可以欺骗目标计算机的操作系统,从而达到隐藏所有修改并拥有操作系统控制权。
WindowsRootKit的核心技术就是隐藏技术,隐藏的内容包括文件、目录、进程、注册表项、网络端口、设备驱动器、网卡模式等。
RootKit最早出现于Unix系统中,随着计算机技术的发展,现在多种操作系统平台中都出现了RootKit。
其中Windows系统上的RootKit技术,尤其受到广泛重视,RootKit也分为几种:(一)早期RootKit工作原理是把系统中的一些程序替换成恶意的版本,当这些替换的程序运行时,就会自动隐藏特定的对象。
如称为RootKit之父的Cabanas病毒…(二)用户模式RootKit这种RootKit是安装在系统当前用户的安全上下文环境,替换、挂钩(hook!或者修改某些操作系统调用和DLL中的函数。
(三)内核模式RootKit现在的WindowsRootKit所使用的技术也从用户模式向内核模式发展,内核模式RootKit不仅能拦截底层的API调用,而且还会操作内核数据结构。
二、WindowsRootKit的检测技术WindowsRootKit检测技术总是伴随着Rootkit技术的发展而发展的,检测技术的发展也迫使WindowsRootKit技术不断更新。
Rootkit的类型、功能及主要技术Rootkit 的类型小结1.固化Rootkits和BIOS Rootkits固化程序是存于ROM中,通常很小,使用系统硬件和BIOS 创建顽固的软件镜像。
将制定的代码植入到BIOS 中,刷新BIOS,在BIOS 初始化的末尾获得运行机会。
重启无用、格式化无用,在硬盘上无法探测,现有的安全软件将大部分的扫描时间用在了对硬盘的扫描上。
本文整理:(第三方信息安全网)/2 内核级Rootkits内核级Rootkits(Kernelland Rootkits)是通过修改内核、增加额外的代码、直接修改系统调用表、系统调用跳转(Syscall Jump),并能够替换一个操作系统的部分功能,包括内核和相关的设备驱动程序。
现在的操作系统大多没有强化内核和驱动程序的不同特性。
许多内核模式的Rootkit 是作为设备驱动程序而开发,或者作为可加载模块,如Linux 中的可加载模块或Windows 中的设备驱动程序,这类Rootkit 极其危险,它可获得不受限制的安全访问权。
如果代码中有任何一点错误,那么内核级别的任何代码操作都将对整个系统的稳定性产生深远的影响。
特点:无进程;无端口。
与用户级Rootkit 相比,与操作系统处于同一级别,可以修改或破坏由其它软件所发出的任何请求。
3 用户态Rootkits用户态Rootkits(Userland Rootkits)是运行在Ring3 级的Rootkit,由于Ring3 级就是用户应用级的程序,而且信任级别低,每一个程序运行,操作系统给这一层的最小权限。
用户态Rootkit使用各种方法隐藏进程、文件,注入模块、修改注册表等。
4 应用级Rootkits应用级Rootkits 通过具有特洛伊木马特征的伪装代码来替换普通的应用程序的二进制代码,也可以使用Hook、补丁、注入代码或其它方式来修改现有应用程序的行为。
5 代码库Rootkits代码库Rootkits 用隐藏攻击者信息的方法进行补丁、Hook、替换系统调用。
Rootkit 是什么
Rootkit 是一种特殊的恶意软件,它的功能是在安装目标上隐藏自身及指定的文件、进程和网络链接等信息,比较多见到的是Rootkit 一般都和木马、后门等其他恶意程序结合使用。
在悬念迭起的中外谍战片里,对战双方中的一派势力通常会派遣特工人员潜伏到对手阵营中。
这名卧底人员良好的伪装使得对手对此长时间毫无察觉;为了能够长期潜伏他不贸然采取高风险行为以免过早暴露自己;他赢得敌人的信任并因此身居要职,这使得他能够源源不断地获取重要情报并利用其独特渠道传送回去。
从某种意义上说这位不速之客就是Rootkit——持久并毫无察觉地驻留在目标计算机中,对系统进行操纵、并通过隐秘渠道收集数据的程序。
Rootkit 的三要素就是:隐藏、操纵、收集数据。
“Rootkit”中root 术语来自于unix 领域。
由于unix 主机系统管理员账号为root 账号,该账号拥有最小的安全限制,完全控制主机并拥有了管理员权限被称为“root”了这台电脑。
然而能够“root”一台主机并不意味着能持续地控制它,因为管理员完全可能发现了主机遭受入侵并采取清理措施。
因此Rootkit 的初始含义就在于“能维持root 权限的一套工具”。
Windows下Rootkit启动技术的研究与应用的开题报告一、研究背景与意义Rootkit是一种可以深度隐藏在操作系统中的恶意软件,其使用非常广泛,比如可以用于窃取用户的敏感信息,破坏系统功能等等。
同时,Rootkit也是一种非常难以检测和清除的恶意软件,因为其可以深度隐藏在操作系统中,并且可以不断更新自己的技术来逃避杀毒软件的检查。
因此,研究Rootkit的启动技术对于保障计算机网络安全具有重要的意义。
二、研究内容本研究将重点研究Windows下Rootkit的启动技术,从以下几个方面展开:1. Rootkit的原理及分类首先,对Rootkit的原理及其分类进行研究,掌握基本概念及其工作原理。
2. Windows操作系统的引导过程对Windows操作系统的引导过程进行深入研究,掌握Windows启动时的各项配置、驱动程序和系统服务等。
3. Rootkit启动技术的研究分别从BIOS阶段、Boot Loader阶段、内核阶段等方面研究Rootkit 的启动技术,深入理解Rootkit的各个阶段及其相应的技术。
4. Rootkit启动技术的应用在深入研究Rootkit的启动技术的基础上,探究如何应用研究成果,对系统进行检测和防御措施等。
三、技术路线1. 阅读相关文献,深入了解Rootkit的原理及其工作方式。
2. 深入研究Windows操作系统的引导过程,并使用相关工具对Windows启动流程进行跟踪调试。
3. 对Rootkit的启动技术进行深入研究,包括BIOS阶段、Boot Loader阶段、内核阶段等方面。
4. 进行实验验证,确定Rootkit的启动技术的可行性。
5. 将研究成果转化为系统防御措施,加强系统安全防护能力。
四、研究成果与实用价值本研究的主要成果有如下几点:1. 对Rootkit的启动技术进行深入研究,掌握Rootkit的启动机制及其技术特点。
2. 构建Rootkit启动技术的实验系统,并进行实验验证。
Rootkit的基础知识和防御方法-电脑资料Rootkit的基础知识和防御方法好多人有一个误解,他们认为rootkit是用作获得系统root访问权限的工具,。
实际上,rootkit是攻击者用来隐藏自己的踪迹和保留root访问权限的工具。
通常,攻击者通过远程攻击获得root访问权限,或者首先密码猜测或者密码强制破译的方式获得系统的访问权限。
进入系统后,如果他还没有获得root权限,再通过某些安全漏洞获得系统的root权限。
接着,攻击者会在侵入的主机中安装rootkit,然后他将经常通过rootkit的后门检查系统是否有其他的用户登录,如果只有自己,攻击者就开始着手清理日志中的有关信息。
通过rootkit的嗅探器获得其它系统的用户和密码之后,攻击者就会利用这些信息侵入其它的系统。
一全面认识rootkit:Rootkit出现于二十世纪90年代初,在1994年2月的一篇安全咨询报告中首先使用了rootkit这个名词。
这篇安全咨询就是CERT-CC的CA-1994-01,题目是Ongoing Network Monitoring Attacks,最新的修订时间是1997年9月19日。
从出现至今,rootkit的技术发展非常迅速,应用越来越广泛,检测难度也越来越大。
rootkit介绍Rootkit是一种奇特的程序,它具有隐身功能:无论静止时(作为文件存在),还是活动时,(作为进程存在),都不会被察觉。
换句话说,这种程序可能一直存在于我们的计算机中,但我们却浑然不知,这一功能正是许多人梦寐以求的——不论是计算机,还是计算机取证人员。
可以在入侵后置入Rootkit,秘密地窥探敏感信息,或等待时机,伺机而动;取证人员也可以利用Rootkit实时监控嫌疑人员的不法行为,它不仅能搜集证据,还有利于及时采取行动。
二了解Rootkit的攻击原理:要了解Rootkit的攻击原理,就必须从系统原理说起,我们知道,操作系统是由内核(Kernel)和外壳(Shell)两部分组成的,内核负责一切实际的工作,包括CPU任务调度、内存分配管理、设备管理、文件操作等,外壳是基于内核提供的交互功能而存在的界面,它负责指令传递和解释。
Rootkit技术rootkit的主要分类早期的rootkit主要为应用级rootkit,应用级rootkit主要通过替换login、ps、ls、netstat 等系统工具,或修改.rhosts等系统配置文件等实现隐藏及后门;硬件级rootkit主要指bios rootkit,可以在系统加载前获得控制权,通过向磁盘中写入文件,再由引导程序加载该文件重新获得控制权,也可以采用虚拟机技术,使整个操作系统运行在rootkit掌握之中;目前最常见的rootkit是内核级rootkit。
内核级rootkit又可分为lkm rootkit、非lkm rootkit。
lkm rootkit主要基于lkm技术,通过系统提供的接口加载到内核空间,成为内核的一部分,进而通过hook系统调用等技术实现隐藏、后门功能。
非lkm rootkit主要是指在系统不支持lkm机制时修改内核的一种方法,主要通过/dev/mem、/dev/kmem设备直接操作内存,从而对内核进行修改。
非lkm rootkit要实现对内核的修改,首先需要获得内核空间的内存,因此需要调用kmalloc分配内存,而kmalloc是内核空间的调用,无法在用户空间直接调用该函数,因此想到了通过int 0x80调用该函数的方法。
先选择一个不常见的系统调用号,在sys_call_table 中找到该项,通过写/dev/mem直接将其修改为kmalloc函数的地址,这样当我们在用户空间调用该系统调用时,就能通过int 0x80进入内核空间,执行kmalloc函数分配内存,并将分配好的内存地址由eax寄存器返回,从而我们得到了一块属于内核地址空间的内存,接着将要hack的函数写入该内存,并再次修改系统调用表,就能实现hook系统调用的功能。
rootkit的常见功能隐藏文件:通过strace ls可以发现ls命令其实是通过sys_getdents64获得文件目录的,因此可以通过修改sys_getdents64系统调用或者更底层的readdir实现隐藏文件及目录,还有对ext2文件系统直接进行修改的方法,不过实现起来不够方便,也有一些具体的限制。
隐藏进程:隐藏进程的方法和隐藏文件类似,ps命令是通过读取/proc文件系统下的进程目录获得进程信息的,只要能够隐藏/proc文件系统下的进程目录就可以达到隐藏进程的效果,即hook sys_getdents64和readdir等。
隐藏连接:netstat命令是通过读取/proc文件系统下的net/tcp和net/udp文件获得当前连接信息,因此可以通过hook sys_read调用实现隐藏连接,也可以修改tcp4_seq_show和udp4_seq_show等函数实现。
隐藏模块:lsmod命令主要是通过sys_query_module系统调用获得模块信息,可以通过hook sys_query_module系统调用隐藏模块,也可以通过将模块从内核模块链表中摘除从而达到隐藏效果。
嗅探工具:嗅探工具可以通过libpcap库直接访问链路层,截获数据包,也可以通过linux 的netfilter框架在IP层的hook点上截获数据包。
嗅探器要获得网络上的其他数据包需要将网卡设置为混杂模式,这是通过ioctl系统调用的SIOCSIFFLAGS命令实现的,查看网卡的当前模式是通过SIOCGIFFLAGS命令,因此可以通过hook sys_ioctl隐藏网卡的混杂模式密码记录:密码记录可以通过hook sys_read系统调用实现,比如通过判断当前运行的进程名或者当前终端是否关闭回显,可以获取用户的输入密码。
hook sys_read还可以实现login后门等其它功能。
日志擦除:传统的unix日志主要在/var/log/messages,/var/log/lastlog,/var/run/utmp,/var /log/wtmp下,可以通过编写相应的工具对日志文件进行修改,还可以将HISTFILE等环境变设为/dev/null隐藏用户的一些操作信息。
内核后门:可以是本地的提权后门和网络的监听后门,本地的提权可以通过对内核模块发送定制命令实现,网络内核后门可以在IP层对进入主机的数据包进行监听,发现匹配的指定数据包后立刻启动回连进程。
rootkit的主要技术:lkm注射、模块摘除、拦截中断(0x80、0x01)、劫持系统调用、运行时补丁、inline hook、端口反弹……lkm注射:也是一种隐藏内核模块的方法,通过感染系统的lkm,在不影响原有功能的情况下将rootkit模块链接到系统lkm中,在模块运行时获得控制权,初始化后调用系统lkm 的初始化函数,lkm注射涉及到elf文件格式与模块加载机制。
模块摘除:主要是指将模块从模块链表中摘除从而隐藏模块的方法,最新加载的模块总是在模块链表的表头,因此可以在加载完rootkit模块后再加载一个清除模块将rootkit模块信息从链表中删除,再退出清除模块,新版本内核中也可以通过判断模块信息后直接list_del。
拦截中断:主要通过sidt指令获得中断调用表的地址,进而获取中断处理程序的入口地址,修改对应的中断处理程序,如int 0x80,int 0x1等。
其中拦截int 0x1是较新的技术,主要利用系统的调试机制,通过设置DR寄存器在要拦截的内存地址上下断点,从而在执行到指定指令时转入0x1中断的处理程序,通过修改0x1中断的处理程序即可实现想要的功能劫持系统调用:和拦截中断类似,但主要是对系统调用表进行修改,可以直接替换原系统调用表,也可以修改系统调用表的入口地址。
在2.4内核之前,内核的系统调用表地址是导出的,因此可以直接对其进行修改。
但在2.6内核之后,系统调用表的地址已经不再导出,需要对0x80中断处理程序进行分析从而获取系统调用表的地址。
运行时补丁:字符设备驱动程序和块设备驱动程序在加载时都会向系统注册一个Struct file_operations结构实现指定的read、write等操作,文件系统也是如此,通过修改文件系统的file_operations结构,可以实现新的read、write操作等。
inline hook:主要是指对内存中的内核函数直接修改,而不影响原先的功能,可以采用跳转的办法,也可以修改对下层函数的call offset实现。
端口反弹:主要是为了更好的突破防火墙的限制,可以在客户端上监听80端口,而在服务器端通过对客户端的80端口进行回连,伪装成一个访问web服务的正常进程从而突破防火墙的限制。
RootKit 实现步骤1)插入无效的数据。
无效的数据可以被插入到任何的网络流中,同样可以插入一些错误数据到固定的存储系统中,可能是敏锐的时间信息等,这样可能会破坏系统的备份。
这样将会侵犯系统的可靠性和完整性。
2)修改进入的ICMP 数据报。
使用ICMP 作为隐藏的渠道,补丁可以读取进入到核心的ICMP 数据报内部的命令。
3)修改进入的以太网数据报。
在不使用任何驱动组件的情况下担当嗅探器的角色。
如果它已经修改了以太网,那么同样可以发送/接收与外网的数据报。
它还可以嗅探秘密的关键字。
4)修改已经存在的动态链接库,比如wininet.dll,追踪进入的数据。
5)修改入侵检测系统。
它可以修改如Tripwire 或RealSecure 等程序来破坏它们的完整性。
6)修改审核系统,如系统事件日志来忽略一些事件日志消息。
获得Ring 0 特权在Windows NT 下,普通用户没有直接写物理内存的权限"因此不能直接修改GDT 或IDT。
要获取Ring 0 权限,首先要求用户有写物理内存的权限,然后修改GDT,构造一个调用门,最后访问该调用门,执行Ring 0 代码[4]。
实现思路如下:1)使用户可读写\Device\PhysicalMemory 对象GDT 位于内核区域,普通Ring 3 级应用程序无权直接访问该内存区域,Win-dows NT 提供了一个名为PhysicalMemory 的Section 对象,通过该对象可以读写物理内存。
通过分析,正常情况下只有SYSTEM 用户才有对该对象的读写权限,administrator 用户只有读权限。
要使特定普通用户有写该对象的权限,需要以administrator 用户身份增加另一个访问控制列表(ACL)到\Device\PhysicalMemory 对象:首先打开一个\Device\PhysicalMemory 对象的句柄并获得其安全描述符(GetSecurityInfo),接着在当前ACL 中增加读写权限(SetEntriesInAcl),最后更新安全描述符(Set-SecurityInfo)。
2)构造调用门:根据ntddk.h 中的定义,当selector=8 时,该调用门指向的处理代码以Ring 0 权限运行。
函数地址低16 位和函数地址高16 位分别为Ring 0 代码的地址的高低16 位。
Dpl 位为调用该门的代码的最低权限,应设为3,present 应设为1,表明该调用门可用。
3)将调用门写入GDT 中:从GDT 尾部开始循环查找GDT 中每一项,当找到一个不存在的描述符(paresent=0)时停止,并将该描述符的各项修改为前面构造的调用门结构。
4)访问调用门,运行Ring 0 代码:常规访问该调用门的方法不可行"因为当前应用程序运行在用户态,即Ring 3 级必须通过远调用far call 来访问该调用门。
3.3 核心代码实现首先对函数SeAccessCheck()进行逆向分析,通过使用IDA 对函数进行了反汇编,部分代码如下所示。
8019A20C push [ebp+arg_24]8019A20F push [ebp+arg_14]8019A212 push edi8019A213 push [ebp+arg_1C]8019A216 push [ebp+arg_10]8019A219 push [ebp+arg_18]8019A21C push ebx8019A21D push dword ptr [esi]8019A21F push dword ptr [esi+8]8019A222 push [ebp+arg_0]8019A225 call sub_801998368019A22A cmp [ebp+arg_8], 08019A22E mov bl, al8019A230 jnz short loc_8019A2388019A232 push esi8019A233 call SeUnlockSubjectContext8019A238 mov al, bl8019A23A pop edi8019A23B pop esi8019A23C pop ebx8019A23D pop ebp8019A23E retn 28h8019A23E SeAccessCheck endp子程序被SeAccessCheck 所调用。