您的位置:首页 > 其它

浅析"新时代"下的病毒隐藏技术

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完整性检查造成了一定问题~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: