Win32Rootkit的进程隐藏检测技术
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
A c a d e m i c R e s e a r c h
学术研究
62
收稿日期:2008-09-17
作者简介:林卫亮,1982年生,硕士研究生,研究方向:网络攻击与防御;王轶骏,1980年生,讲师,研究方向:网络主动防御技术与操作系统安全机制;薛质,1971年生,教授,研究方向:计算机通信网、信息安全、网络安全攻防与评测。
林卫亮,王轶骏,薛质
(上海交通大学信息安全工程学院,上海 200240)
【摘 要】Rootkit是现今一种越来越流行的系统底层隐蔽机制及其相应的实现程序,能够让攻击者长期保持对系统的最高控制权限,其中,实现进程的隐藏是Rootkit的最常见功能之一。论文针对Win32 Rootkit的进程隐藏检测的若干技术方法进行了深入研究和实现,分析比较了各自的优缺点,并最终提出了这项技术在未来的展望。【关键词】Rootkit Win32;进程隐藏;检测
【中图分类号】TP309 【文献标识码】A 【文章编号】1009-8054(2009) 03-0062-02
Technology of Hidden Process Rootkit on Win32
LIN Wei-liang, WANG Yi-jun, XUE Zhi
(Information Security Engeneering School of Shanghai Jiaotong University, Shanghai 200240, China)
【Abstract 】Rootkit is a system layer hidden mechanism and implementation program and is becoming more and more popular. It is designed to take fundamental control of a computer system, without authorization by the system owners and legitimate managers. Concealing running processes is one of the Win32 Rootkit 's standard functions. In this paper, the techniques for detecting this kind of Win32 Rootkit, are studiues and implemented their advantages and disadvantages analyzed and compaired, Finally, some prospects for this technique are proposed.【Keywords 】Rootkit Win32; Concealing running processes; detection
Win32 Rootkit 的
进程隐藏检测技术
0 引言
现今,Rootkit是入侵者在侵入目标系统后用以长期隐蔽的重要技术,并能够使其保持目标系统上的最高权限,即传统意义上的“root”用户。Rootkit分为用户层Rootkit和内核层Rootkit,其中,基于内核层Rootkit技术的恶意代码凭借深入的底层隐蔽技术,能够躲避绝大多数防火墙的拦截以及杀毒软件的查杀,对计算机安全构成极大的威胁[1]。
本文针对目前流行的Win32 Rootkit的进程隐藏检测技术进行了深入研究和实现,并比较了各自的优缺点。
1 隐藏进程的检测技术
进程隐藏是Win32平台下Rootkit的标准功能,只要能检测出隐藏的进程,就很有可能会发现Win32 Rootkit。下面我们深入分析隐藏进程检测的几种方法。1.1 Klister技术
Klister技术基本的原理是通过线程分配器找到所有的线程结构ETHREAD,然后依次找到ETHREAD所对应的进程结构EPROCESS,最后合并结果,就可以得到系统中所有真实运行的进程的列表。经过实验,在Windows 2000系统中,我们可以检测到FU隐藏的进程,yyt_hac`sntRootkit1.2.2隐藏的进程RtKit.exe和hackerdefender1.0.0隐藏的进程hxdef100.exe。缺点是Klister
只能在Windows 2000系统中使用。如果自己实现了内核的线程调度,就可以躲过Klister的检测。PHIDE2 engine实现了这个调度方法躲过了Klister4.0的检测。1.2 挂钩SwapContext技术
由于Klister技术的局限性,Kkaslin提出了一种新的
信息安全与通信保密・2009.3
学术研究
A c a d e m i c R e s e a r c h
63
技术——挂钩SwapContext技术[2]。SwapContext函数位于Ntosknl.exe中,在每次线程切换的时候执行,只要挂钩这个函数,就可以得到每次线程调度时换进换出的线程的信息。通过在内存中搜索20个字节长的特征值来获取SwapContext函数的地址,在获得地址后,再利用Detour技术挂钩SwapContext函数。
经过实验,在Windows系统中能发现被Win32Rootkit隐藏的大部分进程。但缺点同Klister一样,如果Rootkit实现了内核的线程调度,也可以躲过swap_hook.sys的检测。1.3 遍历句柄表技术
Windows系统为了方便枚举进程,所有进程的句柄表之间通过LIST_ENTRY链接起来。通过寻找任意进程的句柄表,然后遍历句柄表的链表就可以标识出系统上的所有进程。另外一个可以获得几乎全部进程句柄的方式就是遍历CSRSS.EXE进程的句柄表[1],它拥有除Idle、System、SMSS.EXE、CSRSS.EXE 4个进程之外的所有进程的句柄。通过遍历CSRSS.EXE中的句柄并标志出它们所指代的进程,可以得到一个数据集合。这种方式的缺点是如果Rootkit把要隐藏的进程的句柄从HANDLE_TABLE中删除,将检测不到隐藏的进程。1.4 pspCidTable扫描技术
pspCidTable是内核未导出的HANDLE_TALBE结构,它也保存着所有进程和线程对象的句柄,只要能遍历pspCidTable句柄表,就可以遍历到系统的所有进程[3]。获得pspCidTable有2种方法,分别为:在PsLookupProcessByProcessId函数中搜索特征串定位pspCidTalbe;利用KDDEBUGGER_DATA32结构得到pspCidTable。在得到pspCidTable后,就可以通过ExEnumHandleTable或PsLookupProcessByProcessId来枚举进程。为了防止这些函数被hook,可以自己实现这些操作。
经过实验,在Windows XP和Server 2003系统下能够发现系统中所有的进程。著名的Rootkit检测软件Blacklight就是采用这种方法。这种技术方法的缺点与遍历句柄表一样,一旦Rootkit抹掉了pspCidTable,这种技术也就无效了。1.5 内存暴力搜索
在32位x86系统中,总的虚拟地址空间最大值为4GB,在默认情况下,Windows将从x80000000到xFFFFFFFF用作受保护的操作系统内存。内存的暴力搜索就是从系统内存x80000000开始搜索每个进程的EPROCESS结构,Windows创建一个进程,内核中就有一个EPROCESS对
象与之对应,每个Windows内核对象都由2部分组成:对象头和对象体。在对象头中存储着这个对象的类型信息,通过比较这个信息就可以判断当前的对象是否为进程类型[4]:
#define OBJECT_HEADER_SIZE 0x018#define OBJECT_TYPE_OFFSET 0x008
ObjectTypeAddress=pEProcess-OBJECT_HEADER_SIZE+OBJECT_TYPE_OFFSET
通过ObjectTypeAddress判断当前对象是否为进程对象,如果是,则输出该进程信息,包括EPROCESS地址、进程ID和进程名。经过实验,内存暴力搜索具有强大的功能。通过比较其输出和任务管理器查询到的进程,可以发现所有Win32 Rootkit隐藏的进程。目前还没有发现可以躲过内存暴力搜索的Win32 Rootkit。也就是说,内存暴力搜索可以检测出其他检测方法所不能检测出的Rootkit。
2 结语
通过对检测方法的研究和实现,我们发现目前在内核中利用Rootkit来隐藏进程越来越难。而且现行的很多Rootkit检测软件也在不断升级并采用多种检测方法,这样就会得出比较正确稳定的结果。
Rootkit和Anti Rootkit的发展是不断促进的过程。有人提出抹掉进程全部句柄和修改进程内核对象来躲避检测,这种方法实现起来有比较大的技术难度。针对这种方法,我们觉得基于资源申请的检测是一种比较好的检测方法,因为任何进程在系统中运行,总要申请资源,这些资源不仅包括CPU,还有内存申请、硬盘读写、网络端口等等,通过监控这些资源就会得到隐藏进程的信息。
参考文献
[1] Greg Hoglund,James Butler. Rootkit:Subverting
The Windows Kernel[M]. Addison WesleyProfessional,2006.
[2] Kimmo. Detecting Hidden Process by Hooking the
SwapContext Function[DB/OL]. https://www.Rootkit.com/newsread.php?newsid=170,AUG.2004.
[3] Jimhokin.Detection of Hidden Process[DB/OL].
https://www.Rootkit.com/newsread.php?newsid=434,JAN 2006.
[4] Russinovich E Mark,Solomon A D. 深入解析
Windows操作系统[M]. 4版.北京:电子工业出版社,2007.