瑞星2008主动防御技术分析
原始出处:退之的怀远阁
看到瑞星2008发布了所谓“超越传统HIPS”、“监控功能比传统HIPS的更全面”的功能,当时为之震惊,难道国产杀毒软件终于开发出了强大的HIPS功能了?立刻下了测试版安装,打算进行测试。起初考虑,发布文章中说得如此强大的主动防御技术,是不是需要逆向分析才能清楚呢?可惜,事实告诉我们,灰盒就够了。使用Rootkit Unhooker或者Gmer工具对安装瑞星2008的机器进行扫描即可得出瑞星的保护究竟在哪了。
(1) SSDT HOOK: 使用了最原始也是最易恢复的SSDT挂钩方式
挂钩了入下函数:
ZwCreateThread、ZwWriteProcessMemory:用于防止远线程注入
ZwLoadDriver:拦截正规通过SCM的驱动加载
ZwSetValueKey、ZwCreateKey、ZwDeleteKey、ZwDeleteKey、ZwDeleteValueKey、ZwRenameKey:
用于拦截注册表操作
ZwTerminateProcess:保护进程不被结束
(2) ShadowTable挂钩:
挂钩了两个GDI函数: NtGdiSendInput、NtSetWindowsHookEx
分别用于拦截键盘鼠标模拟输入 和全局钩子
(3) Hook了TcpipNtfsFastFatCdfs等驱动的Dispatch Routine:
用于拦截网络操作、文件操作
(4) Hook了Fsd的iat上的上几个函数,和主动防御基本无关
稍懂内核技术者从上面就可以看出,这个所谓的主动防御体系不但不能说超越所谓HIPS(使用的都是过时的技术)、另外监控非常的不足,可轻易突破,根本不具有主动防御的使用价值,可以说,根本不能称之为一个完整的、可靠的主动防御体系,不能称为IPS。
这里就来随便说几点这个体系的一些弱点:
弱点1 - 鸡肋的自我进程保护:
瑞星在发布文章中说到“开启了瑞星2008的自我保护后,使用Icesword也无法结束其进程”,这句话大家去江民论坛上看看,几天前江民的2008测试版出来的时候,也是说了这么同样一句话,但是,江民是货真价实不能被结束,瑞星呢?
不用多说,拿ICESWORD测试一下可知,瑞星的所有进程都可以被轻易结束为什么呢?因为瑞星只挂钩了SSDT上的NtTerminateProcess,这对于使用更底层的方式结束进程的Icesword是完全没有作用的,同时,只要这个钩子被恢复(在瑞星的全面保护下恢复此钩子也是非常容易的,见后面的弱点分析),使用任务管理器即可结束其所有进程(大家可以使用一 些具有SSDT恢复功能的工具例如超级巡警、gmer等试试)。
弱点2 - 注册表监控的多个漏洞
(1) 注册表监控使用全路径判断注册表写入键名的方式,这种方式使用一个小技巧就可以饶过:
先打开想要写入的键的上一层键,例如HKEY_LOCAL_MACHINE | SOFTWARE | Microsoft | Windows | CurrentVersion,得到句柄后再使用这个句柄+Run来操作这个注册表,即可完全饶过瑞星的所谓“注册表监控”,写入注册表。
(2) 没有拦截ZwSaveKeyZwRestroeKey等方式写入注册表。该方法可以彻底饶过瑞星的注册表监控,SSM等专业的HIPS都已加入对这个写入注册表的保护,瑞星根本没有拦截这个关键的地方。
(3) 没有拦截直接操作HIVE注册表方式。该方法和方法2一样,SSM等也都有拦截。
虽然瑞星拦截了ZwLoadDriver来阻止驱动加载,但是木马完全可以写入一个BOOT0的驱动注册表项,等待重启后自然启动,那就可以为所欲为了。
弱点3 - 这个最为致命:没有拦截ZwSetSystemInformation和其他一些穿透主动防御的常用技术
入侵者可以通过ZwSetSystemInformation函数的LoadAndCallImage方法加载一个驱动,非常简单的就可以做想做的操作,比如恢复瑞星那些非常容易被恢复的SSDT钩子,这些网络上都有现成的代码,也有多个木马使用了该技术进行主动防御穿透。