[系统安全27]Anti Rootkit
1、免杀技巧的遏制
1.1、PE文件
- 入口点不在第一个区段或在最后一个区段
- 入口点处代码附近只有一小段代码
- 入口点在正常范围之外
- 入口点为一个无效的值,实际入口点为TLS的入口点
- 区段名重复或者不属于正常范围
- 拥有可执行属性的区段数量过多
1.2、程序行为
- 加载系统DLL
- 枚举反病毒软件进程的窗口
- 将自己复制到系统目录
- 安装SPI(控制网络通信或者另类的方法远程注入DLL文件)
- 远程注入线程或改写其他进程的内存
- 操作MBR
2、Anti Rootkit
2.1、检查SSDT钩子与IDT钩子
一般情况下SSDT所指向的内核例程地址都在0x8000000000x8FFFFFFFF之间,攻击者后加载的驱动程序所在的内存地址往往较高。因此修改后的SSDT所指向的内核例程地址很难落在0x8000000000x8FFFFFFFF之间。此类方法也适用于检查IDT钩子。
2.2、检查IAT钩子
交叉对比程序可信副本
2.3、检查IRP钩子
每个驱动程序都在DRIVER_OBJECT中保存了一些I/O请求包的函数指针。检查函数指针是否指向其驱动本身的地址范围之内。
2.4、检查内联钩子
通过分析未被执行的内核文件,从而得出真实的函数代码,并用其与内存中的可执行映像对比找出不同点。
4、收获
通过这本书学习了反汇编、脱壳、内核编程的基础知识,了解几年前免杀技术的方式。
这本书是看的时间很长的一本书,因为工作外出的原因,只能抽出业余时间陆陆续续对本书进行学习。很多时候内心平静不下来就使用抄书的方式学习,每个章节通读后截取一个中心句抄写出来并对源码继续断点调试跟进。
-
免杀技术:由于现在安全产品不断涌现,书中的免杀方法已经不适用于绕过当前的安全防护方案,不过了解了解从前的免杀技术也是不错,毕竟是2013出版的书籍。
-
反汇编:原先对反汇编不熟悉的地方,对第9章的小例子全都编译和练习了一遍。if-else分支、循环、switch-case、指针与数组、结构体与对象、虚函数,剩下的几个章节稍显烧脑。所以没有细看。
-
PE文件:通过第7章的阅读,对DOS、区段表、导出表、导入表、资源表都动手查了一遍,有些错别名字让我这个初学者刚开始看的时候有点懵逼,好在作者给出了勘误表,及时修正一些我搞不懂的地方。下一步应该要把Windows PE权威指南在好好看看,书里PE部分讲得比较浅。
-
内核编程:这个章节的部分HOOK代码编译成功后,我在Windows7上仍然可用。但是还有几份钩子代码编译过,加载到系统中没效果。
-
脱壳:这里作者介绍了几个方法,利用内存断点、利用堆栈平衡、利用编译语言特点、利用跨区段跳转也都是脱壳的基础,还有最后一次异常法、SFX法书里面没有提到,当然也可能本书的主题就是介绍免杀和基础知识。
OK,下一步书单继续。踏踏实实地把技术基础打牢。
5、感谢
与大多数少年有区别的是,因为看书会参考互联网博客笔记,感谢每个用心写博客的博主。
这几位博主,看书有不解的时候参考了他们的博客内容。
-
曲终人散VIP
https://blog.csdn.net/u011672712 -
KD的疯狂实验室
https://blog.csdn.net/dalerkd -
Traxer的学习之路
https://blog.csdn.net/wuyangbotianshi -
lwglucky
http://lwglucky.blog.51cto.com/ -
a1pass
http://a1pass.lofter.com/