微点交流论坛
» 游客:  注册 | 登录 | 帮助

 

作者:
标题: 请教个问题。。。。
070623
新手上路





积分 20
发帖 20
注册 2007-10-31
#1  请教个问题。。。。

正在使用微点 个人感觉微点对使用Rookit技术的木马的查杀效果很不错。。。
在网上看了篇文章《绕过现代Anti-Rookit工具的内核模块扫描》摘自http://hi.baidu.com/mj0011 不知道微点用的是什么扫描模式。。。文章中列举的绕过扫描的方法可以绕过微点么?
一下是转贴的原文。。。
绕过现代Anti-Rookit工具的内核模块扫描
(Bypass modern anti-rootkit tools's kernel mode scan)

MJ0011
th_decoder@126.com
2007-10-24


本文描述了一些方法,可以绕过目前主流的现代Anti-rootkit工具,包括但不限于:
Icesword 最新版
Gmer最新版
Rootkit unhooker 最新版
DarkSpy 最新版
AVG Anti-rootkit最新版
等等


目前的anti-rootkit工具中,对于内核模块主要采用如下几种扫描方式:

1.恢复ZwQuerySystemInformation的hook,然后利用功能号SystemModuleInformation进行枚举
例如Icesword

2.遍历PsLoadModuleList,Driver/Device/Section Object链,或者TypeList链等(总之是找驱动相关对象)进行枚举
例如Rootkit Unhooker,Gmer等

3.内核镜象暴力搜索,搜索MZ,PE等等标志结合进行判断内存里是否有PE镜象,如rootkit unhooker,rutkowska的modgreper等,通常只能显示为unknow image

4.函数引用,各种routine\hook等,先HOOK一些常用函数,然后当驱动去调用这些函数时,记下其地址,检测时使用,或者是根据各种routine(dispatch routine,IDT,Image Notfiy等)或各种hook(inline hook,iat/eat hook等等),通常只能显示为unknow image或unknow xxx handler等

5.使用系统ImageLoad Notfiy,使用一个BOOT驱动,记录所有模块load的消息,检测时进行分析 如AVG Anti-rootkit等


先说绕过1,2,3,5的办法
很简单,使用诸如ZwSetSystemInformation的函数加载驱动,然后在DriverEntry中分配NonPagedPool的内存,然后将功能代码/函数copy到该内存中,然后进行必要的HOOK,最后返回STATUS_UNSUCCESSFULL.

这样驱动在PsLoadModuleList、各种对象链里就消失了,自然也就不存在于ZwQuerySystemInformation枚举的列表里
需要注意的是,copy到内存中的代码要尽量简单,基本不会生成需要重定位的代码了,但调用系统函数还是要另想办法

我的某个RK里是这样做的,例如A Function用来hook 系统函数B,其中需要调用系统函数C,

那么分配一块内存,大小= len(A) + sizeof(ULONG) * 2

在内存的前两个DWORD放OrgB,以及C的地址,后面开始放函数代码

函数中使用call +5 对自身的位置进行定位,找到内存开始的位置,然后得到OrgB和C

当然也可以在COPY入内存前自己用绝对地址定位函数~不过不如这个方法灵活

相关代码:
**
//下面找到本函数开始地址,并获得保存在内存中的OrgCmEnumerateValueKey的地址

**
//上面这个NopFunc用于NewCmEumerateValueKey函数长度定位


这样,基于ZwQuerySystemInformation,PsLoadModuleList,对象目录,Type链,ImageLoad,暴力PE搜索(因为我们压根就没有PE镜象,just one piece of code~)...

接下来看如何绕过4.中的检测方式

1.Hook常用函数:这个很简单了,恢复自己要用的函数~或者压根就不用那些函数,HOOK代码大部分都是数据过滤/处理部分,所以完全可以一个系统函数也不调...

2.各种routine检测,这个可以用多次跳转方式搞定,例如Dispatch hook,因为获取各种DRIVER的DISPATCH 原始地址没有比较通用的方法,所以检测dispatch是否被HOOK的方式通常都是检测其地址是否在其模块的Code Section中(类似的还有object hook,pxxxx hook等),使用此方法的例如rootkit   unhooker, gmer等

只要我们先使用这样的方法,就可以绕过检测,让Anti-rootkit工具不知道是我们的模块HOOK了这里:

先将dispatch地址跳转到code section中不用的部分,5个字节就足够了,然后在这5个字节里使用jmp指令再跳到我们的模块里,这样Anti-rootkit工具检测时,就会发现dispatch routine仍然在该模块的code section中

通过这种方法也可以绕过对dispatch hook\object hook的检测

inline hook/iat/eat hook也可以用类似的方法来躲过模块检测,不过无法避免HOOK被检测到 ^-^

即使Anti-rootkit工具使用更复杂的算法,对各个routine进行深度代码级扫描,我们也可以通过复杂逻辑/代码,将我们的最后跳转地址藏起来

一个简单的双段跳绕过object hook检测的代码:
object hook方法因为未被公开过,故细节略去,方便起见,没有写找code section的代码,直接将跳转代码写到了ntoskrnl的DOS Header中
同样来自于我的某RK:
**

[ Last edited by Legend on 2007-10-31 at 11:15 ]

※ ※ ※ 本文纯属【070623】个人意见,与【 微点交流论坛 】立场无关※ ※ ※
2007-10-31 10:47
查看资料  发短消息   编辑帖子
backhamchen
注册用户




积分 176
发帖 178
注册 2007-9-26
#2  

好高深哦  正在理解当中

※ ※ ※ 本文纯属【backhamchen】个人意见,与【 微点交流论坛 】立场无关※ ※ ※
2007-10-31 10:49
查看资料  发送邮件  发短消息   编辑帖子
Legend
超级版主

超级版主



积分 77171
发帖 70170
注册 2005-10-29
#3  

谢谢楼主的反馈,微点主动防御软件已经对您所反馈的情况作了很好的防范,欢迎您做深入的测试使用。如果您在使用过程中遇到什么问题可以及时联系我们。非专业人士请勿自己测试病毒样本,如果您遇到此种情况的样本可以压缩加密发到virus@micropoint.com.cn我们会具体测试分析,并反馈给您具体的测试结果。

※文章所有权归【Legend】与【东方微点论坛】共同所有,转载请注明出处!※

微点官方认证新浪微博:欢迎进入 微点新浪微博
微点技术支持邮箱: support@micropoint.com.cn
给Legend发短消息
2007-10-31 11:13
查看资料  发短消息   编辑帖子



论坛跳转:

可打印版本 | 推荐 | 订阅 | 收藏


[ 联系我们 - 东方微点 ]


北京东方微点信息技术有限责任公司 福建东方微点信息安全有限责任公司

闽ICP备05030815号