admin管理员组

文章数量:1532188

2023年12月29日发(作者:)

挂钩技术

—、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技术不断更新。近几年来,WindowsRootKit的作者为避免其编写的RootKit被检测出来,也在不断寻找新的破坏操作系统及其内核的方法,如挂钩技术、DKOM技术等。

(一)挂钩技术(hook)的检测

挂钩技术就是替换正常的程序为RootKit自身的程序,在其中过滤由系统返回的信息,分为用户空间挂钩和内核挂钩。用户级APIHook常见的方式有:修改程序导入地址表

(ImportAddressTable,IAT);修改函数输出表(ExportAddressTable,EAT);内核级APIhook常见的方式有:修改系统服务描述SSDT(SystemServiceDispatchTable);修改中断IDT(InterruptDescriptorTable);驱动IRP句柄劫持;修改函数跳转。

早期的RootKit会篡改某一内核代码区或覆盖某一已知的数据区来安装挂钩,这些已知的数据区包括服务描述表SSDT,程序导入地址表IAT,中断描述符表IDT。当前的检测工具如VICE,SystemVirginityVerifier和IceSword能进行所有代码区和已知数据区的完整性检测,能较好地检测这些早期的挂钩技术。

为躲避检测,近几年挂钩技术目标转向未知数据区的操作,尤其是在内核数据结构中改写函数指针。HookFinder,K-Tracer,PoKeR系统采用事后分析的方法,来研究钩子放在数据区的哪个区域。有大量的内核对象和函数指针存在于内存中,事后分析方法有一定的缺陷,SBCFI,Gibraltar,HookSafe和SFPD系统采用主动分析方法,强调检测操作系统并研究这些函数指针在什么地方,如何被钩子使用的,从而制定新的hook检测策略。

(二)直接内核操作技术(DKOM)的检测

DKOM(DirectKernelObjectManager)是不使用WindowsAPI直接操作内核数据结构的进程。Rootkit经常会修改内核数据结构来达到隐藏的目的。DKOM技术最早用于FURootKit,其后FUTo进一步扩展了FU的DKOM功能。例如,FURootkit把某个进程的EPROCESS从windows内核维护_个当前运行进程的双向链表ActiveProcessLinks中摘除,该进程则被隐藏。

当前一些著名的检测工具如GMER,RootKitUnhooker能有效的检测这些已知的基于DKOM的WindowsRootKit,如FURootKit,FUTo。但是这些工具不能对未知的基于DKOM的RootKit检测。

Rootkit的写作者们正热衷于未知的基于DKOM的RootKit探索,当前一些Rootkit的研究者也从检测手段、检测模型、原型系统设计等方面进行了探讨。如在检测手段上利用各个内核链表结构中的一些进程EPROCESS结构差异对多种方法获得的进程EPROCESS交叉对比;如对目录、设别、驱动及PsLoadedModuleList的入口地址数据结构的分析进而提出的原型系统设计方案等。

(三>其它WindowsRootKit技术的检测

除了以上主流WindowsRootKit技术外,还有:基于内存补丁的RootKit技术、虚拟机RootKit技术、内存映射技术、DLL插入技术等.目前一些检测工具能有效地进行检测。

三、WindowsRootKit检测方法

由于WindowsRootKit的检测较为复杂,目前对检测WindowsRootKit还没有形成标准化的方法,检测手段也多样化,现有产品中用到的检测方法主要有如下几种:

(—)特征检测法

该检测方法通过在内核内存中搜索含有特征码的内存块来检测WindowsRootKit,但它通常只能检测出已知特征码的WindowsRootKito这种方法目前被杀毒软件广泛使用。

(二)行为检测法

也称启发式检测,这是一种通过发现非常规系统行为寻找WindowsRootKit痕迹的检测方法。这种方法的主要缺陷在于通常会使挂钩系统频繁调用的处理函数,对操作系统性能有较大影响。比较有名的检测工具如:PatchFinder,VICE等。

(三>差异分析检测法

通过比较可信任的原始数据与由API调用返回受污染的内容,然后比较两者之间的结果差异。如Russinovich使用RootKitRevealer工具发现SonyDRMRootkit。

PoliceTechnology2012年第5期37

(四)完整性校验的检测

RootKit未安装之前,建立一个原始的基线指纹,以这个可信任的指纹列为准,通过重新计算和比较后继安装文件的消息摘要来达到识别RootKit。该检测方法对于简单的Rootkit有效,对于复杂的rootkit无能为力。比较著名的检测工具如:Tripwire,SystemVirginityVerifer,IceSword等。

(五)交叉视图(Cross-View )检测

通过比较不同途径所枚举到的系统信息,根据其中的差异发现WindowsRootKit的痕迹。比较有名的检测工具如:MSStriderGhostBuster,Klister,Blacklight等。

四、WindowsRootKit取证分析

WindowsRootKit不仅能修改操作系统,而且能隐藏一些病毒、木马、黑客工具等,对系统和网络构成了严重威胁。在计算机犯罪或安全事件调查中,被调查的系统若存在某个RootKit,如果计算机取证人员缺乏相应的RootKit检测技巧和计算机取证意识,就会被误导从而做出错误的估计,相当大量的资源就会被投入到错误的方向。同时在不能确定问题根源的情况下,系统可能被擦除后重新安装,而出现后来在使用时系统重新被感染的情况。

在国内,当前计算机取证领域及电子证据司法实践中,如何制定WindowsRootKit的取证原则、如何设计取证方法、如何进行有效的WindowsRootKit分析等方面还缺乏一定的研究和实践。在WindowsRootKit取证分析方面,建议如下:

(一)开机检测和后期检测的并用

有文献也称开机检测和后期检测为动态取证与静态取证,任何RootKit除了需要隐藏外,另外一个基本原理就是要运行,而开机检测指对一个运行的系统进行检测,分析其中是否存在

RootKit,后期检测是针对系统的镜像进行分析。RootKit的开机检测与后期检测侧重点不同,通过综合分析的方式有助于对RootKit的取证与分析。

(二>行为检测和差异分析方法的结合

基本思路是使用不同的方法对同一信息进行查询,然后比较査询结果之间的差异,从而检测出RootKit的存在或者RootKit所隐藏的东西。例如执行一个高级查询和一个底层查询(尽可能的底层),然后比较两者查询结果的差异。

(三>多种检测工具的运用

目前有大量免费和商业的采用行为检测或差异分析的RootKit检测工具,但这些工具多不提供工作原理细节,其检测内容、输出格式、易揉作性等方面也不同。如Helios使用行为分析方式,但系统中需安装.Net2.0应用框架;RootKitRevealer可检测RootKit隐藏的文件和注册表;GMER能检测隐藏的进程、服务、SSDT、IDT及IRP调用的驱动程序。每种检测工具都有一定的误差率,多种检测工具的运用可以增加对RootKit存在的正确判断。

(四)镜像文件加载成虚拟文件系统的分析

如MountImagePro(MIP)工具使用只读方式加载镜像文件,所以操作过程中不会对其中文件造成改动。加载之后,运行各种反病毒工具对镜像中的文件和目录进行扫描。由于被分析的系统、镜像中进程和服务、RootKit都不会运行,因此可以对获取镜像的RootKit进行分析。

(五)基于注册表Services键"最后修改时间”的快速分析

检查注册表每个ControlSet键的Services键,按照最后修改(LastWrite)时间对列表中的键进行排序,列表中大多数项目会与系统安装时间吻合。而内核模式rootKit安装时,很可能是零散的一两个子键,大多数情况下很容易发现。由于Microsoft公司并没有公开发布用户模式下修改注册表最后修改时间的API,因此可以确定该时间就是RootKit及其驱动安装的时间,从而达到对RootKit的检测和分析。

(六)分析系统物理内存

开机时获取系统物理内存镜像,在获取内存镜像后,捜索所有的EPROCESS块,将镜像中的活动进程信息与开机系统的进程列表进行比对,可以找到RootKit隐藏的进程,能有效的检测RootKit的存在并进行分析。

本文参考资料:北京华鑫侦探社:

本文标签: 检测系统技术内核分析