不懂逆向的开发人员不可能写出来对抗能力很强的软件,不会开发的逆向就像是没有手脚的大脑,没办法做出产品或者能推广成形的东西。逆向的学习最大提高点是去逆向自己编写的源代码程序。
逆向和开发相辅相成,安全开发和逆向分析自动化的需求也很大。
废话少说,本篇就介绍一个由本人开发的很沙雕的驱动Rootkit攻击模拟工具:QMRootkit
驱动功能板块
应用层使用MFC窗口界面开发,分为进线程操作、文件操作、网络操作和实际测试界面。
测试的界面如下所示。实现了9种驱动层对抗功能。主要演示进程是calc.exe,通过DeviceIoControl向驱动发送数据,之后实现驱动动作。驱动实现技术多数来自《windows黑客编程技术详解》,少部分从看雪论坛中获取。(processhacker.sys有空也可以研究一下)
下图是驱动代码程序,驱动的编译环境在vs2017+win10之前提到的搭建好的虚拟机中,支持win7 x86位,win7-win10可以全部支持,但是内核结构体和函数特征码不一样,所以需要比较大的精力去补充。由于驱动没有签名,所以暂时不支持自动释放加载,需要手动加载测试。
部分CTL控制码如下所示:
#define X86_CTL_HIDEPROCESS \
CTL_CODE(FILE_DEVICE_UNKNOWN,0x830,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define WIN7X86_CTL_HIDEPROCESS \
CTL_CODE(FILE_DEVICE_UNKNOWN,0x831,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define X86_CTL_HIDEDRIVER \
CTL_CODE(FILE_DEVICE_UNKNOWN,0x832,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define X86_CTL_HOOKSSDT \
CTL_CODE(FILE_DEVICE_UNKNOWN,0x833,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define WIN7X86_CTL_HOOKIOPCREATEFILE \
CTL_CODE(FILE_DEVICE_UNKNOWN,0x834,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define X86_CTL_IRPPROTECTFILE \
CTL_CODE(FILE_DEVICE_UNKNOWN,0x835,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define X86_CTL_CMREGISTERCALLBACK \
CTL_CODE(FILE_DEVICE_UNKNOWN,0x836,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define X86_CTL_LOADIMAGECALLBACK \
CTL_CODE(FILE_DEVICE_UNKNOWN,0x837,METHOD_BUFFERED,FILE_ANY_ACCESS)
#define X86_CTL_OBREGISTERCALLBACK \
CTL_CODE(FILE_DEVICE_UNKNOWN,0x838,METHOD_BUFFERED,FILE_ANY_ACCESS)
除此之外本人对驱动层对抗技术也有所研究,大部分都来自于以往底层Rootkit病毒的技术,特制作了个表格。
进线程功能模块
look at this picture。进程枚举是通过CreateToolhelp32Snapshot,线程枚举是通过NtQueryInformationThread实现。这里进程其实是想现时启动时间的,因为这个时间我有特殊作用。
线程和进程基本都能干掉,干不掉就传给驱动让驱动干它。
文件遍历清理模块
这里主要是写了一个根据磁盘进行遍历的逻辑,后续想搞成勒索解密或者感染文件清理的模块。
最重要的是文件的最后一次修改时间。Infected?表明是否被感染病毒感染。
有时间再继续写吧