浅析"新时代"下的病毒隐藏技术
2006-05-11 08:59
323 查看
浅析"新时代"下的病毒隐藏技术
vxk
隐藏一直是病毒编写者的主要话题之一,在Syn,Mcafee公司相继推出各自的奇怪的反毒技术和
探测技术的今天。我们作为新时代下的vxer,对隐藏这个话题也逐渐进入一个误区————就是总认为
EPO+poly+mute的结构可以搞定大多数的杀软,其实非也——在如今虚拟机型为分析技术猖獗被应用于
anti-virus software,壳分析也进入当年dos时代一样的成熟的时代,病毒也应该从古老的mute中
走出来,化被动为主动的进行反击——这里不说干掉ANTI软件的,而是通过一些手段使他们在内存中无法
将你揪出来,杀掉~
但是这里同样提醒各位,大规模的mute技术和epo也是唯一的防静态anti的方法——我们这里讲述的
方法统统都是在一个已经感染的系统中如何保持自己的存在。为了能清楚讲述我们的目标,我希望各位
在读者篇文章之前,要有一些windows和x86的底层知识。(我们这里仅仅谈论Kernel Mode Virus的隐藏)
1。对抗SDT挂钩
经过某些达人的分析,R***使用了SDT HOOK的方法——具体分析可以阅读看雪论坛的分析,嘿嘿~
因此我们可以计算内核中KiServiverTable的地址,结合直接从文件ntoskrnl.exe中读取真实的SDT
来进行Reload,这样可以bypass掉R***等使用SDT HOOK的Anti。
详细有关分析可以通过访问rootkit.com获得~
对抗代码在sdtreload.cpp中~(嘿嘿,这个代码是29a-8里的代码拿来~我把fileio代码贡献了)
2。对抗IDT HOOK和SYSENTRY HOOK
有部分Anti通过IDT和SYSENTRY的挂钩了截获某些操作,而我们可以通过重新将SYSENTRY和IDT
归位来实现反击这种Anti~
我们对于IDT采用从ntoskrnl的mem image中获得KiTrapXX的原始地址重新归位,具体方法可以
参看syscallrel.cpp~
对于SYSENTRY我们通过得到KiSystemService(int 0x2e)的地址,比对SYSENTRY寄存器内的地址
来实现check,详情可以参看——syscallrel.cpp(90210的sw_remove中也应用了这样的方法)
3。对抗ntoskrnl.exe的IAT Hook或者EAT Hook
有一些Anti通过Modify IAT ot EAT来实现HOOK,这样的HOOK,我们可以通过直接从ntosknrl.exe
读取正确的IAT/EAT来实现 reload~(这种方法同样适用于其他moudle的HOOK)
详情可以参考used目录下sdtrestore.cpp中自己再次建立ntdll的IAT映射的方法,还有userland
reload iat等rootkit上的讨论。
4。对抗内存扫描
Shadow Walker就是这样一个用来对抗MEMORY SCAN的东西,虽然用于rootkit,但是我们只要稍加
改造就可以应用于病毒,详细的代码可以参考phrack#63的shadow walker raise。。。一章
也可可以看看我的一个应用这个保护的例子knl7.asm
5。对抗HASH Check
这里我们使用DRX的读取断点来实现,不过仍要注意Anti对执行栈使用单步技术跟踪。
详细代码可以参考drx.cpp(问题是我们只能保护4个地址,而且对方可以通过重新映射的
方法来检查...)
6。对抗类EPO方式的HOOK
方法和相同,仍然是直接从文件读取真实代码然后通过HASH或者逐位比对,最后采用覆盖的方法
或者采用90210在rootkit上提出的使用rebuild kernel的方法来~
7。对抗IFS Filter
对于位于NTFS/FAT上的标准filter,我们可以通过察看DriverName是不是我们认识的来进行检查
(嘿嘿~ntfs,fatfast,cdfs,udfs,Ftdisk...),如果不是我们就需要通过检查Attached设备栈来实现
reload,但是这种方法不能对抗下层过滤~(这样我们可以通过FSD I/O来实现可爱的File读写了)。
具体参考fileio.cpp
8。对抗IRP Filter
对于修改了IRPRoutine地址的不讲理的hook,我们可以通过分析IRPRoutine地址是否在Image范围内,
如果不是就可以从这个IRPRoutine的地址开时查找IoCallDriver或者IopCallDriver,以及call [REG+XXXX],
如果[REG+xxxx]的数据yyyy指向地址在Image内,就是这个IRP的正确Routine~,IoCallDriver和IopCallDriver
找到的地址也作相同的检查~
当然为了方便和思考简单,我们可以采用hook掉iOPCALLDRIVER和iocalldriver的方法来检查~。
总结
如上的方法针对目前的大多数Anti都是非常有效的,但是儒商的方法都是在ring0运行,因此需要
使用一些非常手段来进入Ring0~比如MGF1.3的modify ExAcquireFastMutex的方法来进入ring0,不过相
同的这种方法由于HASH完整性检查造成了一定问题~
vxk
隐藏一直是病毒编写者的主要话题之一,在Syn,Mcafee公司相继推出各自的奇怪的反毒技术和
探测技术的今天。我们作为新时代下的vxer,对隐藏这个话题也逐渐进入一个误区————就是总认为
EPO+poly+mute的结构可以搞定大多数的杀软,其实非也——在如今虚拟机型为分析技术猖獗被应用于
anti-virus software,壳分析也进入当年dos时代一样的成熟的时代,病毒也应该从古老的mute中
走出来,化被动为主动的进行反击——这里不说干掉ANTI软件的,而是通过一些手段使他们在内存中无法
将你揪出来,杀掉~
但是这里同样提醒各位,大规模的mute技术和epo也是唯一的防静态anti的方法——我们这里讲述的
方法统统都是在一个已经感染的系统中如何保持自己的存在。为了能清楚讲述我们的目标,我希望各位
在读者篇文章之前,要有一些windows和x86的底层知识。(我们这里仅仅谈论Kernel Mode Virus的隐藏)
1。对抗SDT挂钩
经过某些达人的分析,R***使用了SDT HOOK的方法——具体分析可以阅读看雪论坛的分析,嘿嘿~
因此我们可以计算内核中KiServiverTable的地址,结合直接从文件ntoskrnl.exe中读取真实的SDT
来进行Reload,这样可以bypass掉R***等使用SDT HOOK的Anti。
详细有关分析可以通过访问rootkit.com获得~
对抗代码在sdtreload.cpp中~(嘿嘿,这个代码是29a-8里的代码拿来~我把fileio代码贡献了)
2。对抗IDT HOOK和SYSENTRY HOOK
有部分Anti通过IDT和SYSENTRY的挂钩了截获某些操作,而我们可以通过重新将SYSENTRY和IDT
归位来实现反击这种Anti~
我们对于IDT采用从ntoskrnl的mem image中获得KiTrapXX的原始地址重新归位,具体方法可以
参看syscallrel.cpp~
对于SYSENTRY我们通过得到KiSystemService(int 0x2e)的地址,比对SYSENTRY寄存器内的地址
来实现check,详情可以参看——syscallrel.cpp(90210的sw_remove中也应用了这样的方法)
3。对抗ntoskrnl.exe的IAT Hook或者EAT Hook
有一些Anti通过Modify IAT ot EAT来实现HOOK,这样的HOOK,我们可以通过直接从ntosknrl.exe
读取正确的IAT/EAT来实现 reload~(这种方法同样适用于其他moudle的HOOK)
详情可以参考used目录下sdtrestore.cpp中自己再次建立ntdll的IAT映射的方法,还有userland
reload iat等rootkit上的讨论。
4。对抗内存扫描
Shadow Walker就是这样一个用来对抗MEMORY SCAN的东西,虽然用于rootkit,但是我们只要稍加
改造就可以应用于病毒,详细的代码可以参考phrack#63的shadow walker raise。。。一章
也可可以看看我的一个应用这个保护的例子knl7.asm
5。对抗HASH Check
这里我们使用DRX的读取断点来实现,不过仍要注意Anti对执行栈使用单步技术跟踪。
详细代码可以参考drx.cpp(问题是我们只能保护4个地址,而且对方可以通过重新映射的
方法来检查...)
6。对抗类EPO方式的HOOK
方法和相同,仍然是直接从文件读取真实代码然后通过HASH或者逐位比对,最后采用覆盖的方法
或者采用90210在rootkit上提出的使用rebuild kernel的方法来~
7。对抗IFS Filter
对于位于NTFS/FAT上的标准filter,我们可以通过察看DriverName是不是我们认识的来进行检查
(嘿嘿~ntfs,fatfast,cdfs,udfs,Ftdisk...),如果不是我们就需要通过检查Attached设备栈来实现
reload,但是这种方法不能对抗下层过滤~(这样我们可以通过FSD I/O来实现可爱的File读写了)。
具体参考fileio.cpp
8。对抗IRP Filter
对于修改了IRPRoutine地址的不讲理的hook,我们可以通过分析IRPRoutine地址是否在Image范围内,
如果不是就可以从这个IRPRoutine的地址开时查找IoCallDriver或者IopCallDriver,以及call [REG+XXXX],
如果[REG+xxxx]的数据yyyy指向地址在Image内,就是这个IRP的正确Routine~,IoCallDriver和IopCallDriver
找到的地址也作相同的检查~
当然为了方便和思考简单,我们可以采用hook掉iOPCALLDRIVER和iocalldriver的方法来检查~。
总结
如上的方法针对目前的大多数Anti都是非常有效的,但是儒商的方法都是在ring0运行,因此需要
使用一些非常手段来进入Ring0~比如MGF1.3的modify ExAcquireFastMutex的方法来进入ring0,不过相
同的这种方法由于HASH完整性检查造成了一定问题~
相关文章推荐
- 戏说"QQ密码天使V1.1"进程的隐藏技术
- "爱说说"技术原理:与TXT交互及MDataTable对Json的功能扩展(二)
- 如何根据"需求及功能需要"去选择相关的"材料、型号、技术"的思考
- android "numberPassword" 不隐藏
- "莫国防"病毒(win32.mgf)源代码
- RMS论坛最新动态:"umboy专栏"新增若干umboy讲技术视频
- BGP交换前缀列表的出口路由过滤"ORF"技术
- "陷阱"技术探秘----动态汉化Windows技术的分析
- 搜索引擎的"自动转向"技术
- 那些隐藏的"钩子"
- 淘宝应对"双11"的技术架构分析
- 关于Euclideon的"无限细节"引擎的技术分析
- 谷歌技术"三宝"之MapReduce
- 谷歌技术"三宝"之MapReduce
- 如何实现修改键盘上"换行"为"完成"并点击后隐藏键盘
- 谷歌技术"三宝"之MapReduce
- 谷歌技术"三宝"之MapReduce
- [我的Linux技术支持生涯] 日志里每1小时报一次错"logrotate: ALERT exited abnormally with [1]"
- "开源"与"Web服务"领跑07上半年软件技术发展
- 谈:"沉重的翅膀——软件开发,业务?技术? "