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

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

vxk
 隐藏一直是病毒编写者的主要话题之一,在Syn,Mcafee公司相继推出各自的奇怪的反毒技术和
探测技术的今天。我们作为新时代下的vxer,对隐藏这个话题也逐渐进入一个误区————就是总认为
EPO+poly+mute的结构可以搞定大多数的杀软,其实非也——在如今虚拟机型为分析技术猖獗被应用于
anti-virus software,壳分析也进入当年dos时代一样的成熟的时代,病毒也应该从古老的mute中
走出来,化被动为主动的进行反击——这里不说干掉ANTI软件的,而是通过一些手段使他们在内存中无法
将你揪出来,杀掉~
 但是这里同样提醒各位,大规模的mute技术和epo也是唯一的防静态anti的方法——我们这里讲述的
方法统统都是在一个已经感染的系统中如何保持自己的存在。为了能清楚讲述我们的目标,我希望各位
在读者篇文章之前,要有一些windows和x86的底层知识。(我们这里仅仅谈论Kernel Mode Virus的隐藏)

  1。对抗SDT挂钩
  经过某些达人的分析,RAV使用了SDT HOOK的方法——具体分析可以阅读看雪论坛的分析,嘿嘿~
 因此我们可以计算内核中KiServiverTable的地址,结合直接从文件ntoskrnl.exe中读取真实的SDT
 来进行Reload,这样可以bypass掉RAV等使用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完整性检查造成了一定问题~

 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值