Chinaunix首页 | 论坛 | 博客
  • 博客访问: 718366
  • 博文数量: 67
  • 博客积分: 994
  • 博客等级: 准尉
  • 技术积分: 1749
  • 用 户 组: 普通用户
  • 注册时间: 2011-08-03 14:10
文章分类
文章存档

2014年(11)

2013年(14)

2012年(14)

2011年(28)

分类: 网络与安全

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函数。

阅读(1466) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~