查看: 7699|回复: 59
收起左侧

[分享] 绕过动态启发之Microsoft篇

  [复制链接]
B100D1E55
发表于 2017-2-9 09:38:41 | 显示全部楼层 |阅读模式
本帖最后由 B100D1E55 于 2017-2-9 09:48 编辑

之前分享了动态启发绕过的一些简单手段,有人在底下吐槽说这些没意义,现在的安软厂商肯定都考虑到这些手法了。
真的是这样吗?这些手段的确都是两年前的过时货色,但“现在的扫描引擎对这些方法肯定都已经有了万全的对策”并不是想当然就能得出的结论。这里就以传说中的“基准线”——Microsoft的引擎作为例子来试试看到底是不是这么回事。

Microsoft(MSE或者WD)是有动态启发的,这从它高超的卡exe技能就可以猜出一二。这里测试的主要难题是要构造一个只能通过动态启发才能查出的“恶意程序”,因此我写了个基于EICAR测试的一个无聊程序EICAR Dropper(对,就是早年很多人喜欢发“测测你的杀软灵敏度”,而现在都已经被大家免疫的那个字符串)。EICAR的确被应用于测试杀软的一些指标,例如VB100测试杀软解包层数/解包能力仍然通过内嵌EICAR测试文件进行考察。

这里我的程序行为很简单,在程序中嵌入一个EICAR的字符数组,先过一遍VT:
string.jpg
大部分都没报,除了ClamAV(因为ClamAV引擎基本就是扫描静态特征,而我因为懒并没有给EICAR字符串加密)。CrowdStrike的报毒在这篇文章里请无视它,这货在我以前的测试中就没怎么靠谱地报过东西

然后我改一下程序,让它在本地目录释放一个EICAR测试文件,再过一遍VT:
microsoft_detected.jpg
这时候Microsoft报了EICAR,说明其动态启发检测到了这个释放行为

为了验证的确是因为动态启发,我删去关闭输出流的指令,这样只有在程序异常退出时才会强制将EICAR内容flush到本地硬盘:
microsoft_miss.jpg
这时候Microsoft又不报EICAR了,基本可以确定是里面的虚拟引擎检测到了EICAR的“恶意行为”

这样就可以开始测试Microsoft扫描虚拟机的能力了,以下所有程序都在实机上跑过以验证其性能影响和行为正确性
测试一
我们先来弄一个计数器计数一亿次:
cntr_miss.jpg
Microsoft没扫出来……呵呵……

为了照顾一下Microsoft引擎,我把计数减少到五千万次
cntr_detected1.jpg
哈,Microsoft扫出来了………………
基本可以得出的结论是:Microsoft动态启发的引擎不够快,一亿次计数已经到了它的极限(实际上这样一段混淆代码在当代低性能电脑上也能在1秒以内跑完)

测试二
我们再来测一测分配内存
我malloc了一块十万个整数大小的内存:
malloc_detected.jpg
Microsoft报了,而我尝试分配一千万也报,猜测大概Microsoft的虚拟机对此是消极对待(即如果你只Malloc但不真的用这块内存,它不会真的就因此影响性能停止仿真)

于是我顺带给这一整块都填零:
malloc_miss.jpg
Microsoft不报了……看来启发引擎是超时了(这样一个流程在实机上1秒以内可以完成,我还是用我的破win10平板跑的)

测试三
最后来测一测睡眠
很多恶意程序为了逃避杀软检测(或者类似avast那种检测时长仅为15秒的deepscreen)都会让程序睡一段时间再起来干坏事,我们来试试看:

在EICAR写入数据流关闭之前,我使用sleep()函数让其睡眠5秒
sleep_detected1.jpg
Microsoft报了,其实不报真的太对不起群众了,毕竟这种三流手段十年前都应该对付掉

再测一下时间偏移检测:
sleep_detected2.jpg
Microsoft仍旧报了,估计其虚拟引擎在遇到sleep的时候会自动拨快内部时钟绕过睡眠。这样,通过获取系统时钟来探知时钟偏移的方法肯定也没效果

难道就没办法通过睡眠绕过了么……吼吼
这里我用了Anuj Seth在2000年写的一个第三方的sleep函数,xsleep()。这个函数主要区别在于在睡眠过程中仍能处理message pump。使用xsleep()函数让程序在关闭数据流前睡眠5秒钟,上传VT
sleep_bypassed.jpg
tom (2).jpg
Microsoft不报了……


测到这里已经没兴趣继续测下去了,我想可能有些杀毒引擎比用户想象中要脆弱的多。
当然,免杀也没那么简单。当一个程序复杂度变高之后,免杀者需要猜测是哪些蛛丝马迹导致杀软报毒。这种黑盒逆向有时并不轻松,远比我这个无聊的EICAR Dropper免杀来得麻烦。

评分

参与人数 13分享 +3 魅力 +1 人气 +12 收起 理由
翼风Fly + 1 版区有你更精彩: )
ymcyyf + 1 抱歉,这个帖子按规定属于广告
wjy19800315 + 1 版区有你更精彩: )
sunnyjianna + 1 精品文章
诸葛亮 + 1 很给力!

查看全部评分

欧阳宣
发表于 2017-2-9 10:02:10 | 显示全部楼层
那目前看起来主防还真不能没有
GreenCodes
发表于 2017-2-9 10:31:04 | 显示全部楼层
动态启发早已沦为辅助手段甚至鸡肋
pal家族
发表于 2017-2-9 10:47:04 | 显示全部楼层
求出卡巴篇
流水寒丶
发表于 2017-2-9 10:49:33 | 显示全部楼层
求出PANDA篇
清道夫900
发表于 2017-2-9 10:52:57 | 显示全部楼层
又来了一个大牛。高就哪个安全公司啊?
驭龙
发表于 2017-2-9 11:19:42 | 显示全部楼层
其实我想说的是你应该用别的威胁特征测试绕过微软启发,因为这个测试代码是在MA 引擎中的,并不是启发报法
popu111
发表于 2017-2-9 11:23:52 | 显示全部楼层
向高超的卡exe技术低头
linzh
发表于 2017-2-9 11:26:36 | 显示全部楼层
话说全程除了这叁其他全部哑火?
B100D1E55
 楼主| 发表于 2017-2-9 11:30:17 | 显示全部楼层
驭龙 发表于 2017-2-9 11:19
其实我想说的是你应该用别的威胁特征测试绕过微软启发,因为这个测试代码是在MA 引擎中的,并不是启发报法

自然是考虑过这种可能性……不过如果纯静态的话,计数器大法肯定也要跪,我这里特征是明文嵌入的。可见M$家引擎有对释放文件进一步进行静态特征匹配,我这里程序展现的行为显然没触及启发行为打分的红线,但触发了静态特征,所以报特征,刚好可以测试引擎仿真速度。
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|杀毒软件|软件论坛|优惠券| 卡饭论坛

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.3( 苏ICP备07004770号 ) GMT+8, 2017-6-27 13:06 , Processed in 0.120178 second(s), 10 queries , MemCache On.

快速回复 返回顶部 返回列表