查看: 18729|回复: 91
收起左侧

[分享] 动态启发逃逸大法

  [复制链接]
B100D1E55
发表于 2017-2-3 10:00:57 | 显示全部楼层 |阅读模式
本帖最后由 B100D1E55 于 2017-2-3 23:19 编辑

判断一个程序是否有恶意行为,最常见的方法之一就是欺骗它——制造一个虚拟的环境,让它开始使坏并显出原形。之前介绍过ESET基于二进制翻译的仿真和启发,这里面主要的技术难题有两个1)如何在适中的系统占用前提下仿造出一个和真实系统并无二致的环境2)如何根据收集到的行为进行打分判识。其中1)是2)的前提,而很多逃逸方式集中在1)上
前两天无聊翻安软文章的时候发现了一些有趣的逃逸方法,这里归纳一下 (来自Emeric Nasi写的Bypass Antivirus Dynamic Analysis)

传统厂商的自动化分析环境

杀软扫描(仿真出来的)环境(图片来自16年USENIX WOOT的AVLeak资料)

由于种种限制,杀软的仿真环境很难和实机一样,通过侦测这些不同就可以逃过扫描(例如检测出是杀软的仿真环境就自动结束执行,反之进入恶意程序解密的分支)
排除掉注入等高级手段,对抗扫描的基础方法就已经多种多样。原作者还列出了经过这些方法免杀后VT扫描的结果
1.        拖时间
为了不拖累性能,很多杀软的仿真引擎会跳过钉子户,从而给恶意程序可乘之机
例如:分配并填充大块内存(例如划拨一块100MB的内存并填0) VT结果:0/55
出于性能考量,很多动态启发看到这里直接停止仿真了。而且由于malloc函数之类的和正常程序差不多,提取特征也很困难
例如:初始化一个计数器,计数一亿步…… VT结果:0/55
火绒白皮书里就提过这种方法,很多基于解析的仿真看到这种基本可以歇菜(貌似BD就用interpreter)

2.        有求必应
为了简化虚拟成本,有时候杀软会对待测程序的一些无理要求有求必应从而露出马脚
例如:打开系统进程(OpenProcess)  VT结果:11/55
有的AV引擎简化了这种情形的仿真(例如对系统函数直接返回0)。在检出的AV当中,仅有少数真正检出了隐藏的恶意程序,而其他一些只是通过静态启发看到了OpenProcess认为是后门(实质上算误报)
例如:访问一个不存在的网页  VT结果:2/55
大部分AV仿真环境中都不会让被扫描的程序联网,但为了仿真的完整性可能就返回了一个自己的静态页面。因此如果恶意程序发现自己的访问居然成功了,就很可能是在AV仿真环境中(只有一款杀软成功地模拟了这个行为,另一个是误报)

3.        定向攻击
例如:当你知道攻击对象具体用户名的时候,可以通过检测用户名来决定是否进行恶意行为(例如硬编码一个路径,然后尝试访问,失败则结束执行) VT结果:0/55

4.        臣妾做不到啊
由于windows太复杂,杀软的仿真很难涵盖到所有函数。当恶意程序调用那些冷门函数的时候仿真就失败了。
例如:调用FlsAlloc()……你不知道这是什么函数?没事,很多杀软仿真器也不知道
VT结果:8/55  其中扫出来的一些杀软已经能通过返回错误来仿真这个函数
例如:调用VirtualAllocExNuma……你还是不知道这是什么函数?没关系,很多杀软虚拟环境也还是不知道_(:з」∠)_ VT结果:0/55

5.        环境检测
检测虚拟环境的特征,抑或虚拟环境和真实环境的差别,从而达到逃逸目的
例如:检测当前进程workingset体积,异常大的则终止(杀软在扫描的时候会划拨更多内存,而正常运行时不会) VT结果:1/55 (唯一检出的还是个误报)
例如:检测时间偏移。针对拖时间的方法(例如有的程序会让自己先休眠100秒再开始运作),有的杀软有专门的反制措施(比如绕过这些休眠函数),但忘了在虚拟环境的时间上进行仿真   VT结果:8/55
例如:检测自己的进程名。仿真环境中对应进程名往往不会是恶意程序自己的名字(早年BD虚拟机中始终把待检测进程命名为TESTAPP……) VT结果:0/55

6.        其他
例如:检测父进程。当父进程不是自己的时候自己再呼叫子进程。这么做主要是因为不少杀软都不扫描子进程   VT结果:1/55
例如:检测互斥体。当互斥体不存在的时候,创建互斥体并释放子进程,子进程检测到互斥体后进入解密分支  VT结果: 0/55


去年年底谷歌的Darren Bilby曾经表示杀软的扫描和入侵检测已死。上文中就可以看到就这些非常基础的混淆手段足以让不少安全软件的扫描引擎歇菜。
当然你可以说以上问题中有很大一部分是因为性能限制导致的——要不是出于性能考量,很多仿真可以做的更好。特别是其中一些绕过手段, 在基于虚拟机的沙盘中有针对性的侦测,而这些行为一旦被侦测出来差不多就是不打自招。但这些侦测在客户端上跑的可行性太小,这也是为什么安软疯狂推广云安全鉴定的原因之一,将性能压力交给自己,将鉴定结果反馈给客户
但别忘了就算是虚拟机也有各种反侦测手段(事实上真正要防止恶意软件采集安全厂商的沙盘指纹需要做不少特殊处理,有空再写)。此外,虚拟机的分析极其耗时——导出大量函数和网络记录进行归纳、扫描和特征比对极耗费资源。这也是为什么很多在线沙盘分析很慢的原因。总的来说,就算是在原生层级上进行的分析,性能仍然可能是个瓶颈。在当代计算机性能越发进入瓶颈期的大前提下,未来的安全究竟如何保障?很明显至少它将不再是单纯启发扫描一下就能搞定的问题了。

Bonus:
出于好奇写了一个小程序测试了一下。主要行为是访问我自己的一个ddns网址,如果访问成功就弹窗(时间所限没有整合加密的shellcode,所以是个无害程序),如果访问不成功自动退出。因为听说VT上有几家厂商能模拟这种网络访问行为,于是上传VT看了一下,结果没有任何访问服务器的行为

其实有访问服务器的行为才恐怖,不经过tor的话用户的IP位置对黑客暴露无遗,这点杀软厂商也不想负责吧……有点好奇扫描引擎怎么应对这种猥琐的检测
顺带一提,就算是这样一个10行不到的小程序,还是有神奇的杀软报毒了:

误报王江民不算的话,QVM呵呵。后来想想报downloader还算是准了,但这么简单的访问行为都报downloader,很多程序是不是都别活了(当然,如果是因为我的程序发起的是agentless的访问因而报毒,还勉强算情有可原)。这再次体现出恶意程序鉴定的核心——恶意程序和正常程序究竟区别在哪里?某些水货厂商这点处理不好的话就可能出现在程序正常部位提取特征的现象,不误杀才怪

console版更神奇。CrowdStrike,Symentec的ML,还有QVM——VT上三大明确以机器学习为卖点的引擎都对这种无聊小程序报了毒。而这些引擎在以往新样本检测中均很亮眼(QVM更是被hybrid-analysis当成是可信赖扫描引擎,只要扫描报毒就认为是有害),但真要说误报的话就呵呵了。对统计引擎或者某些机器学习算法来说,或许我这个程序的确在众程序中算outlier,但仅凭这种特性来报毒的话是否合理呢?有时候我还是喜欢ESET这种严格控制误报的策略。一旦用户失去了对杀软的信任,社工攻击就更容易钻空子(还记得早年那些恶意程序怂恿你关掉杀软避免误报的字样吗?如果用户在日常中发现自己用的杀软误报很高,就更容易被说服关掉杀软去冒险)

杀软扫描鸡肋吗?以植物大战僵尸来比喻这种攻防的话,扫描引擎估计就是豌豆射手……虽然不能干掉所有僵尸,但能提前干掉一些总比一大堆僵尸直接攻击大后方的堡垒好一些,这也是纵深防御的意义所在

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?快速注册

x

评分

参与人数 18分享 +2 人气 +17 收起 理由
dingqiankun + 1 版区有你更精彩: )
星风烈日 + 1 版区有你更精彩: )
1094947421 + 1 版区有你更精彩: )
nick20010117 + 1 版区有你更精彩: )
Johnkay.Young + 1 版区有你更精彩: )

查看全部评分

RUAOT
发表于 2017-2-3 10:52:47 | 显示全部楼层
对于科普贴,我们是大力支持的。虽然自己不能加分,但是我在心底默默的给你加了1分。
sunnyjianna
发表于 2017-2-3 11:18:24 | 显示全部楼层
看起来一串串的好深奥
linzh
发表于 2017-2-3 12:13:36 | 显示全部楼层
感谢楼主科普哈
扫描终究还是有极限的
猪头无双
头像被屏蔽
发表于 2017-2-3 17:12:35 | 显示全部楼层
扫描目前来看只是辅助了,现在主流都是实时动态防御了
houtiancheng
发表于 2017-2-3 22:14:20 | 显示全部楼层
科普文大赞~
看来还是靠实际运行吧(主防)
B100D1E55
 楼主| 发表于 2017-2-3 22:44:37 | 显示全部楼层
houtiancheng 发表于 2017-2-3 22:14
科普文大赞~
看来还是靠实际运行吧(主防)

似乎能理解为什么某些厂商死啃扫描……主防不仅有潜在性能问题,还要看内核开发人员水平如何。不过脚本小子比较多的前提下主防的确比较难过一点

评分

参与人数 1人气 +1 收起 理由
白露为霜 + 1

查看全部评分

我就是XXX
发表于 2017-2-3 23:00:31 | 显示全部楼层
看来扫描只能作为辅助了~~
哥在东北玩泥巴
发表于 2017-2-3 23:34:14 | 显示全部楼层
太高深了真的看不懂,但楼主真的很用心。赞一个。
灭灭之痕
发表于 2017-2-3 23:40:21 | 显示全部楼层
动态启发的模拟的环境的确是存在非常大的局限,虽然理论上能够补充静态启发的很多不足,但是实际运行为了考量整个系统的性能和扫描的效率不免会进行很多优化,以至于实际表现并不能让人非常满意。
但是或许这就是博弈的过程,这个博弈的基础条件就是有限的时间和有限的性能。安全软件的开发者不得不在这个这个基础下进行权衡,黑客则充分利用为了这种权衡所做的牺牲来进行针对性伪装,而为了应对这种伪装,开发者又不得不在这个权衡的基础上进行特定的改变。
给人一种感觉,虽然杀毒的技术和解决方案已经今非昔比,但是就整体情况下来说,依旧是在不断“入库”的过程,只是之前入的是一段段的特征码,现在入的是一段段的特定分析结果(某种程度上和感觉和特征码一样)。所以,可以说永远没有完美的解决方案,至少现在还看不出来。
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

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

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 沪ICP备2020031077号-2 ) GMT+8, 2024-11-22 17:34 , Processed in 0.136299 second(s), 18 queries .

卡饭网所发布的一切软件、样本、工具、文章等仅限用于学习和研究,不得将上述内容用于商业或者其他非法用途,否则产生的一切后果自负,本站信息来自网络,版权争议问题与本站无关,您必须在下载后的24小时之内从您的电脑中彻底删除上述信息,如有问题请通过邮件与我们联系。

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