分类: 网络与安全
2012-01-07 21:48:46
用户模式Windows rootkit:
用户模式rootkit主要影响系统中的进程。这些rootkit修改目标进程地址空间的某些位置,为完成修改,这些rootkit必须访问进程的地址空间,修改成功与否取决与它们访问地址空间的能力。某些安全软件应用程序阻止其他应用程序访问进程的地址空间,因此会阻止这些rootkit。用户模式rootkit通过載目标进程中加载rootkit代码,并修改向rootkit代码移交控制权的执行路径,从而成功隐藏自己的踪迹。
用户模式rootkit需要执行的第一步,是通过访问远程的地址空间,将rootkit代码加载到这个进程中。访问远程进程地址空间的常用方法包括:DLL注入与远程代码注入。
DLL注入将DLL(动态链接库)文件加载到正在运行的地址空间中。我们采用以下方法将DLL加载到远程进程中。
1、建立远程线程
2、使用Windows钩子
3、使用AppInit_Dlls注册表
远程代码注入
远程代码注入是指代码远程注入到正在运行的进程中。远程进程中的代码的内存使用虚拟内存分配函数进行分配。然后,WriteProcessMemory API将代码复制到远程进程新分配的内存中。由于代码被动态注入到正在执行的进程中,我们无法事先预测被注入代码的基地址。因此,被注入的代码不能使用全局变量和静态字符串,因为它们一般載数据区分配。
修改执行路径
说明如何将代码插入到目标进程的地址空间后,现在介绍如何通过IAT钩子和内联函数补丁(detour)修改执行路径。
Windows可执行程序中并不包含允许它们在进程中独立执行的完整代码。相反,为了缩小可执行程序的规模,提高性能,系统使用DLL文件在不同的进程之间共享常用的代码。在汇编过程中,系统为从共享DLL文件中导入的所有API调用生成一段存根代码(stub code)。这些存根函数位于进程的代码叫做导入地址表(IAT)的部分。在加载时,Windows加载程序绑定在加载时从其他DLL导入的函数地址,并在IAT中解析该地址。
内联函数补丁(detour)
修改了IAT钩子,可以改变执行路径,从而执行rootkit 代码。但是,与钩取目标函数的调用路径相比,控制这个目标函数可能更加方便。修改目标函数后,不管这个函数如何被调用,rootkit代码都可以执行。这种技巧叫做内联函数补丁。这种方法中,目标函数的前几个指令被无条件转移覆盖,转向(新的)detour函数。