查看: 22590|回复: 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 | 显示全部楼层
动态启发的模拟的环境的确是存在非常大的局限,虽然理论上能够补充静态启发的很多不足,但是实际运行为了考量整个系统的性能和扫描的效率不免会进行很多优化,以至于实际表现并不能让人非常满意。
但是或许这就是博弈的过程,这个博弈的基础条件就是有限的时间和有限的性能。安全软件的开发者不得不在这个这个基础下进行权衡,黑客则充分利用为了这种权衡所做的牺牲来进行针对性伪装,而为了应对这种伪装,开发者又不得不在这个权衡的基础上进行特定的改变。
给人一种感觉,虽然杀毒的技术和解决方案已经今非昔比,但是就整体情况下来说,依旧是在不断“入库”的过程,只是之前入的是一段段的特征码,现在入的是一段段的特定分析结果(某种程度上和感觉和特征码一样)。所以,可以说永远没有完美的解决方案,至少现在还看不出来。
B100D1E55
 楼主| 发表于 2017-2-3 23:51:56 | 显示全部楼层
灭灭之痕 发表于 2017-2-3 23:40
动态启发的模拟的环境的确是存在非常大的局限,虽然理论上能够补充静态启发的很多不足,但是实际运行为了考 ...


虽然云鉴定、云拉黑一直被坛友诟病,我个人认为这反倒是现阶段更顺应形势的做法。既然扫描仿真有着技术上的“天花板”,比起继续消耗人力物力来换取极小的回报,直接解除这道限制或许才是根本的解决之道。毒区那个lambda locker虽然一开始穿了BD,但是3小时左右就被BD云鉴定入库了,侧面也体现了这点

当然反过来完全放弃本地引擎和特征的做法……也不可取
linzh
发表于 2017-2-4 00:03:23 | 显示全部楼层
灭灭之痕 发表于 2017-2-3 23:40
动态启发的模拟的环境的确是存在非常大的局限,虽然理论上能够补充静态启发的很多不足,但是实际运行为了考 ...

要说完美的解决方案不可能有吧,云方案是最完美的,却有受限于网络
如果论本地的话病毒在暗杀软在明,要过还是相对容易的
B100D1E55
 楼主| 发表于 2017-2-4 00:11:07 | 显示全部楼层
linzh 发表于 2017-2-4 00:03
要说完美的解决方案不可能有吧,云方案是最完美的,却有受限于网络
如果论本地的话病毒在暗杀软在明,要 ...

我一直怀疑有些能力差的厂商云端是不是就直接抄袭其他杀软鉴定结果了……一直很想有机会搞一堆样本回归统计一下VT上哪家和哪家检出的相关性极大。某种程度来说用云端用来掩盖厂商技术上的无能实在太方便了
linzh
发表于 2017-2-4 00:15:23 | 显示全部楼层
B100D1E55 发表于 2017-2-4 00:11
我一直怀疑有些能力差的厂商云端是不是就直接抄袭其他杀软鉴定结果了……一直很想有机会搞一堆样 ...

基本上都是盯着ESET和卡巴看的。。。
784696777
发表于 2017-2-4 00:40:47 | 显示全部楼层
赞一下“严格控制误报”,误报大的杀毒确实信不过。还没等对方劝自己就把杀软关了的大有人在。
灭灭之痕
发表于 2017-2-4 09:46:21 | 显示全部楼层
B100D1E55 发表于 2017-2-3 23:51
虽然云鉴定、云拉黑一直被坛友诟病,我个人认为这反倒是现阶段更顺应形势的做法。既然扫描仿真有着技术 ...

个人感觉云方案主要是克服了两个瓶颈:一个是有限的性能(云服务器能够提供更加详尽和彻底的分析),一个是有限的样本(相当于有一个超级大的病毒库),这两个突破正好弥补了本地动态启发的不足。因此整体来说是一个较为令人满意的方案(相当于每个人都能够使用一台超级计算机来应付病毒)。
但是局限也是明显的,其实也就是网络依赖和分析延时。没了网络,云的基础就没有了。分析延时相对于以前来说变短了很多,但是严格来说并不能阻止病毒在一定程度上的传播,特别是变种(您举得BD的例子有3个小时,我觉得已经挺久的了)。
很早以前在红伞中国服务者使用论坛混的时候和别人构思过几个想法,就是所谓的“实时升级”(常年驻留一个进程用于获得基本实时的病毒升级数据),还有一个是用以补充实时升级的“怀疑库”,主要是为了分析延时的问题,就是首先将样本拉到一个“存疑特征库库”中,如果经过彻底分析是恶意程序则完成入库过程;否则就在测试后释出。在这个存疑特征库中时不进行病毒处理(可以限制一些权限),但是会提示运行风险(当时是受到毛豆的报警以及微点的启发)并向用户给出推荐选择,试着让用户理解执行风险,尽可能让用户阻止其前期的运行(当然用户如果觉得没有问题也可以选择运行)。两个想法很接近现在的云和现有的主防,但是现在看来还是不够完美。只能说矛盾之间永远在互相竞争中进步,即使量子计算机出现了也未必能解决问题,创造的问题永远比解决的问题要多……
灭灭之痕
发表于 2017-2-4 09:57:25 | 显示全部楼层
784696777 发表于 2017-2-4 00:40
赞一下“严格控制误报”,误报大的杀毒确实信不过。还没等对方劝自己就把杀软关了的大有人在。

感觉其实这也得看误报对于个人的影响,就像有些杀毒软件经常干掉腾讯一些游戏的进程,对于我这种不打游戏的就无所谓,可是对于那些LOLer,估计恨不得把安软公司拆了……
但是太谨慎带来的漏杀也不是没有,一切看权衡,只是对于普通用户来说,误报一般造成的威胁更大,因为那些写得很好的病毒一般不是给普通用户用的,这点漏杀基本没有影响,但是误报却有可能无处不在,而且更容易让人对安软的资质产生怀疑。
只能说安软的开发者也很难办。
houtiancheng
发表于 2017-2-4 10:27:34 | 显示全部楼层
灭灭之痕 发表于 2017-2-4 09:46
个人感觉云方案主要是克服了两个瓶颈:一个是有限的性能(云服务器能够提供更加详尽和彻底的分析),一个 ...

现在毛豆其实就是走这条路了,云信誉拉黑加白+灰文件行为限制/虚拟化
houtiancheng
发表于 2017-2-4 10:28:59 | 显示全部楼层
B100D1E55 发表于 2017-2-3 22:44
似乎能理解为什么某些厂商死啃扫描……主防不仅有潜在性能问题,还要看内核开发人员水平如何。不过脚本小 ...

主防毕竟不是简单加些花指令就能过的东西,所以还是好一些~
当然云也是目前最有效的防御方案之一,所以我一直期望BD和红伞合并
B100D1E55
 楼主| 发表于 2017-2-4 11:19:43 | 显示全部楼层
灭灭之痕 发表于 2017-2-4 09:46
个人感觉云方案主要是克服了两个瓶颈:一个是有限的性能(云服务器能够提供更加详尽和彻底的分析),一个 ...

感觉你说的几个点子现在都已经有商业化的实现了,实时升级早年有诺顿的脉动更新,现在有webroot这样的纯云杀软。至于之所以不做怀疑库是因为未知文件太多吧,为了提高实用性只能通过数字签名和文件广度简单定义一下灰文件了,SONAR,deepscreen也把这个当作指标之一
其实3小时不算太慢,那个Lambda Locker传播广度相当小。当然金山那种纯靠云端鉴定的速度更快,但抗变形能力就……
性能问题其实是个悖论,恶意文件分析的性能瓶颈是相对于实机性能而言,就算计算机性能继续提高,分析性能和实机性能也很难靠拢,这个很大程度上是程序内部特性决定的
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

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

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 沪ICP备2020031077号-2 ) GMT+8, 2026-2-5 19:11 , Processed in 0.099484 second(s), 7 queries , Redis On.

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

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