A 挂钩系统服务描述表隐藏进程与文件 用户可在用户模式下自定义挂钩函数,放在缓冲区中传入内核态。进入内核态后,程序分配一段非分页区存放该例程。利用这种方式,即使检测软件发现了SSDT HOOK的存在,也无法得知该HOOK 例程属于哪一驱动模块(因为分配的这段非分页区不在任何模块的地址空间范围中),达到了其隐藏目的。因而是本次练习的一个亮点所在。
B DKOM方式隐藏进程、驱动模块 对于DKOM,没有很好的创新思路,唯一的原则便是分析检测工具的原理,然后制定相应的执行体对象修改方案。在隐藏驱动以及注册表部分可以绕过ICESword检测。然而,IceSword检测进程使用了四种不同的方式,其中直接搜索内存的方式无法通过DKOM方式绕过。
C 驱动派遣例程挂钩方式隐藏网络连接信息 在《Subverting the Windows Kernel》中给出了隐藏TCP连接的示例代码,本次练习中我在此基础上对其进行了完善,使其能够绕过一些Anti-rootkit如IceSword 的检测(原版并不能绕过),并增加了过滤功能(例如用户可自定义需要隐藏的ip信息与端口,操作非常友好)。另外,逆向了tcpip中查询连接信息的代码,分析出UDP的相关查询结构,实现了UDP通信的隐藏。
D 文件过滤驱动实现隐藏文件或文件夹 修改自Winodws DDK的Sample Code: Sfilter。 删去了很多功能:例如,动态绑定卷等。 这种方式与驱动派遣例程挂钩原理类似,并没有实际意义,仅仅为了Zion的完整性而加入。