Rootkit的检测与取证分析_第1页
Rootkit的检测与取证分析_第2页
Rootkit的检测与取证分析_第3页
Rootkit的检测与取证分析_第4页
Rootkit的检测与取证分析_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Rootkit的检测与取证分析

靳慧云1,王钢2(1.浙江警察学院,浙江杭州310053;2.铁道警官高等专科学校,河南郑州450053)摘要:Rootkit是目前难以检测、清除、防范和破坏性强的恶意程序。通过分析Rootkit的内核机制,给出检测Rootkit的基本方法,以应用于Rootkit防范和取证分析。关键词:Rootkit;Rootkit检测;Rootkit取证分析TP393.08:A1Rootkit的概念Rootkit是一种能够以管理员身份访问计算机或计算机网络的程序。攻击者通过利用已知的漏洞或口令破解而获得用户级访问,或利用其他手段,将Rootkit安装到被攻击的计算机上。Rootkit安装以后,它将准许攻击者掩饰其入侵行为,并获得对计算机的Root级或特权级的访问,在可能的情况下还可以获得对网络上其它计算机的访问。2典型Rootkit的特点典型的Rootkit实现隐藏(如隐藏文件、进程、线程、端口、注册表、其他进程等)、后门等远程控制的功能,它利用多种技术来操纵操作系统,其结果就是用户无法利用普通的杀毒软件来检测和清除。典型的Rootkit具有以下特点:1)隐藏文件或目录;2)隐藏运行的进程;3)隐藏TCP或UDP连接;4)程序执行重定向;5)增加非授权用户权限;6[来自Www.lw5U.com])改变一个运行进程的UID/GID;7)非授权地、特权程序远程执行守护进程。联合使用程序执行重新定向和文件隐藏,入侵者能提供各种后门程序执行。由于执行重定向是在内核级别进行的,文件检测工具不会发现程序文件被修改,因此配置检测工具的路径环境中也不会发现任何异常。3Rootkit潜在的威胁和攻击策略一般来说,Rootkit自身并不是恶意软件,它是恶意软件用来隐藏自己的一种手段。Rootkit是攻击者用来潜藏自己的踪迹和保留Root访问权限的工具,但经设计的Rootkit可能包括间谍软件和其它的程序,如监视网络通信和用户击键的程序,也可以在系统中构建一个后门便于攻击者使用,还可以修改日志文件,攻击网络上的其它计算机,或者改变现有的系统工具以用逃避检测。Rootkit已被大多数的防毒软件归类为具危害性的恶意代码。通常,攻击者通过远程攻击获得Root访问权限,或者首先采用密码猜测或者破译密码的方式获得系统的访问权限,进入系统后,再通过某些安全漏洞获得系统的Root权限。攻击者会在侵入的主机中安装Rootkit.并经常通过R。otkit的后门来检查系统能不能有其他的用户登录,如果只有攻击者登录,攻击者就开始着手清理日志中的有关信息。攻击者通过Rootkit的嗅探器获得其他系统的用户和密码之后,就会利用这些信息进行攻击。同时,用户无法在资源管理器中利用普通的文件查看程序来查找间谍文件,也不能通过任务管理器或其它的多数进程查看器来查看。同样地,在系统的启动文件夹内或其它的启动位置中都无法找到其它。攻击者日益热衷于用Rootkit隐藏间谍软件或病毒等,目的是避免被查杀,使用户们更容易遭受攻击,而一般的反间谍软件或反病毒扫描程序无法检测这种代码。专业Rootkit检测工具,也只能针对性地检测出少部分Rootkit程序。4Rootkit的类型4.1固化Rootkits和BIOSRootkits固化程序是储存于只读内存ROM中的程序,固化Roolkit(FirmwareRootkits)通常很小,使用系统硬件和BIOS创建顽固的恶意软件镜像。这种Rootkit可以成为固化软件很隐蔽地隐藏起来,因为人们通常并不检查固化代码的完整性。如硬件的BIOS、处理器、打印机、图像卡等设备,运行固化代码来执行特定的功能。固化Rootkit不是像通常修改用户级或核心层的软件。因此,在这一层完整性检查是非常少有的。BIOSRootkits将制定的代码植入到BIOS中,能够刷新BIOS,在BIOS初始化的末尾获得运行的机会。重启对BIOSRootkits没有任何作用、在硬盘上无法探测到BIOSRootkits,即使重新格式化硬盘或重新安装操作系统也不会对它有任何影响。现有的安全软件将大部分的扫描时间用在了对硬盘的扫描上。4.2内核级Rootkits内核级Rootkits(KernellandRootkits)是通过修改内核、增加额外的代码、直接修改系统调用表、系统调用跳转(SyscallJump),并能够替换一个操作系统的部分功能,包括内核和相关的设备驱动程序。现在的操作系统大多没有强化内核和驱动程序的不同特性。这样,许多内核模式的Rootkit是作为设备驱动程序而开发的,或者作为可加载模块,如Linux中的可加载模块或Windows中的设备驱动程序,这类Rootkit极其危险,因为它可获得不受限制的安全访问权。如果代码中有任何一点错误,那么内核级别的任何代码操作都将对整个系统的稳定性产生深远的影响。内核级Rootkits-般特点:无进程;无端口、难发现、难查杀、生存能力强。与用户级Rootkit相比,内核级Rootkit的破坏性更大,而且它能够逃避任何应用层的检测,使得预防和检测的难度更大。内核级的Rootkits极其危险,其原因在于它与操作系统处于同一级别,如此一来,它就可以修改或破坏由其它软件所发出的任何请求。这种情况下,受感染内核级的Rootkist的系统自身信任度降低,在对其进行检测时,要使用另外一个可信任的系统及其安装的检测软件,并将受感染的系统加载为一个数据源进行检测。4.3用户态Rootkits用户态Rootkits(UserlandRootkits)是运行在Ring3级的Rootkit,由于Ring3级就是用户应用级的程序,而且信任级别低,每一个程序运行,操作系统给这一层的最小权限。用户态Rootkit使用各种方法隐藏进程、文件,注入模块、修改注册表等。由于Rootkit技术变得越来越先进,其检测变得同样困难。4.4应用级Rootkits应用级Rootkits可以通过具有特洛伊木马特征的伪装代码来替换普通的应用程序的二进制代码,也可以使用Hook、补丁、注入代码或其它方式来修改现有应用程序的行为。4.5代码库Rootkits代码库Rootkits可以用隐藏攻击者信息的方法进行补丁、Hook、替换系统调用。从理论上讲,这种Rootkit可以通过检查代码库(在Windows平台中就是DLL)的改变而发现其踪迹。实际上,很难检测一些应用程序和补丁包一起发行的多种程序库中的Rootkit。4.6虚拟化Rootkits与HypervisorRootkits虚拟化Rootkit(VirtualRootkits)是利用虚拟机技术的虚拟机Rootkit(是模仿软件虚拟机形式的Rootkit)。这种Rootkit通过修改计算机的启动顺序而发生作用,其目的是加载自己而不是原始的操作系统。一旦加载到内存,虚拟化Rootkits就会将原始的操作系统加载为一个虚拟机,这就使得Rootkit能够截获客户操作系统所发出的所有硬件请求。HypervisorRootkits是一种基于硬件或固化的Rootkit。它具有管理员权限的管理程序,可以在支持硬件协助虚拟化和未安装虚拟化软件的系统上安装基于Hypervisor的Rootkit。然后,这个基于Hypervisor的Rootkit将可以在比操作系统本身更高的权限级别上运行。基于Hypervisor的Rootkit对攻击者的特点是:合法内核模式代码降低了检测出攻击者Hypervisor模式代码的能力。它是在硬件上运行的虚拟的环境,由于攻击者强行在真正的内核插入虚拟机,在硬件上运行,因此,这常被误认为是内核Rootkits。在攻击者执行内核模式代码之前,HypervisorRoofkits不会运行。当一个系统被HypervisorRootkits感染时,在该系统的Kernellan[来自WwW.lw5u.cOm]d没有任何迹象,这是与HypervisorRootkits而不是真正的硬件交互。因此,几乎是不可能从Kernelland、Userland和应用层检测到。在Rootkit和Anti-Rootkit的对抗中,取决于对该Hypervisor层的检测和预防,以及在哪一层安装了Rootkit。谁先去接近硬件就是赢者。这意味着如果用户运行基于Userland或Kernelland的Anti-Rootkit工具,无法检测到HypervisorRootkits,因为前者不是运行在真实的硬件上,但高于真正的硬件虚拟机。5Rootkits检测许多取证工具不能发现Rootkit隐藏的信息,Rootkit的设计者绞尽脑汁利用很多办法隐藏进程、隐藏文件、端口或句柄、注册表的项、键值等信息。1)系统调用表和内存保护、实现内核级钩子的方法,是Rootkit实现拦截、控制、监视其他程序并过滤有关数据、并且达到隐藏Rootkit本身及其它程序的目的技术方法。通过多种方法组合成了Rootkit,如进程注入、分层驱动过滤等。如果Rootkit在内核中修改了进程表,通过ZwQuerySystemlnformation函数、CSRSS.EXE进程列举进程表,可以检测出Rootkit的存在。检测Rootkit可以绕过API提供的数据,直接从内核领域里读取进程列表,因为所有进程在这里都不可能把自己隐藏起来。也就是说,内核始终拥有最真实的进程列表和超级权限,只要能读取这个原始的进程列表,再和进程API枚举的进程列表对比,便能发现Rootkit进程,由于这类工具也“越权”了,因而对Rootkit进行查杀也就不再是难事,而Rootkit进程一旦被清除,它隐藏自身的措施也就不复存在,内核就能把它显示出来了。进而查找Rootkit秘密植入的恶意软件。由于进程要生存在内存中,总是可以在内存中检测Rootkit。针对物理内存或特定进程的当前状态创建完整内存映像,通过访问物理内存以进行分析,比如枚举所有进程及其句柄表。通过物理内存进行进程捕获进程,可以绕过进程中用来保护自己而使用的反调试例程;在未附加进程的情况下读取进程的虚拟内存,受保护的进程对于被“捕获”将无可奈何;绕过调试寄存器(DR)Rootkit;捕获加密前后进程中的通讯字符串;克服大部分的加壳程序,因为捕获的进程都是处于未脱壳状态;在未接触磁盘的情况下获取被注入的DLL文件。2)另一种基于内存的检测方法是在操作系统或进程中查找钩子。钩子存在于导人地址表(IAT)、系统服务调度表(SSDT)、中断描述表(IDT)、驱动程序的I/O请求报文处理程序(IRP)、内联函数。需要分别设计程序查找钩子。Rootkit设计者常用的隐藏技术有:删除进程双项链上的进程对象(由于NativeAPI枚举进程是通过进程活动链表实现的)、修改系统调用表(SST)、端口隐藏、隐藏文件。通过分析内容可以提取嫌疑信息,只要对系统产生影响,就有进程或线程,它们总是有启动的入口,Rootkit也不例外。3)可以通过读取Windowsdispatcherscheduler所用的另一个链表来列出进程。也就是说可以直接通过读取KiWaitInListHead和KiWaitOutListHead来列举进程,这样就突破了修改双向链表隐藏进程的方法。不过这种检测方法不久就被突破了,这就是替换内核的进程链表。可以使用HOOKSwapContext方法来检测隐藏进程,只要被处理器调度的线程就能被检测到。在Windows2K/NT/XP系统中,处理器的调度对象是线程,在非SMP的Os中,某时间段内当前CPU处理的进程只可能有一个。每个进程分配特定的CPU时间片来达到执行目的,而系统的CPU时钟中断确定了每个进程分配的时间片。也就是当系统CPU时钟中断触发时,产生的进程调度请求。处理器时钟中断发生的时候会调用KiDispatchlnterrupt()比较当前进程分配的时间片,如用完后会调用KiQuantumEnd()根据各线程优先级等信息用特定的调度算法选择新的线程(ETHREAD),然后将其返回值——ETHREAD结构作为参数,来调用SwapContext()设置ETHREAD和EPROCESS中的各项参数,并替换KPCR中的相应结构完成线程切换,调度到另一个进程(EPROCESS)的线程(ETHREAD)继续执行。SwapContex函数,将当前运行线程的上下文与重新执行线程的上下文的线程进行交换,EDI寄存器中的值是下一个要交换进入的线程的指针,ESI寄存器中的值是要交换出去的当前线程指针。将SwapContex函数的前导替换为指向Detour函数的5字节无条件跳转指令。Detour函数应该验证要交换进入的线程(由EDI寄存器指示)的KTHREAD指向一个正确链接到EPROCESS块。通过这种方法可以检测到利用直接内核对象操作的技术隐藏的进程,利用SwapContex函数也可以检测到通过Hook的方法隐藏的进程。可以说CPU的线程切换离不开SwapCo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论