镜湖YES
银牌会员
     
积分 1225
发帖 1199
注册 2009-3-15
|
#1 友情提醒微点的工程师 -- MmLoadSystemImage【转帖】
我不知道网友有没有转过这个帖子,我就转下好了:
http://www.hx99.net/Article/Tech/201001/32583.html
老技术,所以随便提醒下.
关于HOOK MmLoadSystemImage.可以监测到由SCM、ZwLoadDriver、ZwSetSystemInformation等加载的驱动信息,以便进行及时的记录,patch, 当然瑞星的卡卡助手06年用的老技术 -- 从DriverEntry回溯一层找到IopLoadDriver中call DriverEntry,再进行patch拦截,也是个不错的选择. 其他诸如SSDT层面的就不说了. by sudami 2008-12-06
微点之所以在拦截驱动加载方面过滤不严格,不是他们没有注意这块,而是在处理hook MmLoadSystemImage上code的写法有问题,如下:
1. MP110003.SYS 调用ZwSetSystemInformation来加载到C盘根目录的测试驱动"??c:hook.sys".时未attach到CSRSS.EXE进程空间, 而是在SYSTEM空间中去调,显然EPROCESS中的ProcessInSession标志位是0, 自然没有足够的section来存放新的Driver,于是很强大的返回0xC0000017(STATUS_NO_MEMORY)错误.根本进不到微点瞬间下的钩子里面去.
2. 微点很猥琐的通过栈回溯找到了Call MmLoadSystemImage地址,既而找到原始的MmLoadSystemImage地址.不过微点的驱动开发人员却还要进一步特征匹配,在地址-0x100h内搜索出 0x266Ah 才肯HOOK. 这样匹配还不如找Call MmLoadSystemImage下方的call RtlImageNtHeader校验. 我测试了N中环境,都没有出现过0x266Ah字符串,所以微点自然放弃了对ZwSetSystemInformation内部调用MmLoadSystemImage处的CALL HOOK.
不过微点挂了NtMapViewOfSection,还有个ImageNotify,监控起来也差不多了.据MJ同学说ImageNotify比MmLoadSystemImage更底层,所有的回调都是很底层的,不过我觉得Notify太容易被摘了(当然HOOK也很好恢复,没有万能的对策).
WWW.
找MmLoadSystemImage的地址,方法很多,若要暴搜,绝对不要全部硬编码特征匹配,很搓很不稳定, 所以啊MJ同学说搜一个TAG即可,全系统唯一.哈哈,我的想法是在NtLoadDriver里面找每个call,分析call的函数地址开头0x20字节,就可以快速找到了. 不过我是这样做的,通过栈回溯找到MmLoadSystemImage,然后把它里面的那个TAG搞成别的, 嘿嘿,这样我的程序**完系统后,其他恶意程序暴搜的话就够呛了...
简单用栈回溯做了个监控的,如下: (图我就不转了,到原帖里去看吧)
至于在fake_MmLoadSystemImage里面做处理,就可随自己做了. 比如黑白名单判断,patch 驱动的XX,单纯的记录... 也可在创建Object或Section时候拦截,效果也不错. []
其实没必要这样复杂嘛.挂钩下ZwLoadDriver足矣,再把几个进R0的关键API挂上, 一个小型监控驱动加载的HIPS就成型了. 啊啊啊啊啊啊啊啊~~~
我呢,非常搓,看见微点更挫,所以我便用更加搓的方式来搞了.各位同学切勿效仿切勿效仿~
|
※ ※ ※ 本文纯属【镜湖YES】个人意见,与【 微点交流论坛 】立场无关※ ※ ※
|
 |
|