今天在微博上看到有大神发表了关于沙箱逃逸技术的文章针对沙箱检测的逃逸技术小讨论,让我想起来我也还有几个有意思的小技巧,所以也来凑个热闹。需要声明的一点是,本文将要讨论的问题是我很久之前所做的总结,当前是否有效我没有去验证,所以,如果你实际测试的时候发现方法失效了,也请保持冷静!
0×01. 进程检测技巧
许多文章都会提到通过检测进程名字的方式来判断当前环境是否是虚拟机,那么自然要去比较进程名字了,而获取当前进程列表也无外乎几个固定的套路。我发现在检测特定进程名字的时候,是会触发火眼的监控逻辑的。比如,一个盗号木马可能会去检测有没有QQ.exe,那么火眼会在报告中指出样本程序尝试去检测QQ.exe;而如果以同样的逻辑去检测虚拟机,效果就和预期的不太一致了,比如报告中会提示你的程序尝试去检测vmtoolsd.exe,呵呵!
绕过的方法也很简单,样本程序中不保存进程名字的明文,而是保存经过特定的运算之后的值(加密后的密文)。我们在获取到进程的名字之后,也要先进行一次这样的运算再判断。这种方法是我大学做病毒分析实习的时候在样本中学到的,大家可以在Google中搜一下explorer.exe的MD5值cde09bcdf5fde1e2eac52c0f93362b79。
0×02. 沙箱检测还可以这么玩
2.1 基于Windows ProductId检测
这也算是比较老的一种方法了,Windows ProductId位于注册表的HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion下的ProductID键。比如Anubis沙箱常见的值为76487-640-1457236-23837,去Google一下这个字符串就知道使用的普遍程度了。
这个方法针对Cuckoo Sandbox是没用的,Cuckoo Sandbox在执行sample之前会生成一个随机的ProductId来填充注册表。Malwr是基于Cuckoo构建的产品。这种检测行为会触发监控逻辑哟~
2.2 基于ComputerName检测
估计公司电脑的ComputerName大多是有规则的,或者是基于同一个镜像制作的虚拟机。比如我之前测试翰海源的文件B超的时候,发现其ComputerName都是xiaochen打头的。后来的后来,好像又出现了CHENHONG打头的,估计就是同一个人了。后面我会给出其他几家厂商的特征。
2.3 基于内存大小检测
有的厂商估计不太愿意浪费硬件,给沙箱只分配了少量内存,比如Anubis只给了128M,Comodo只给了256M,国内的翰海源和金山火眼则是512M。如果你的PC机只有这么小的内存,那只能说你是在是太节俭了。当然,考虑到有的服务器可能就是这个样子,所以怎么检测就看实际情况了。
同样的,基于硬盘大小去检测我想也是可以的。
2.4 基于样本路径检测
样本上传到沙箱之后,样本自身的路径也可以当做一个特征来检测。比如Comodo的沙箱(是的,不是HIPS,是在线沙箱)的样本路径固定位C:\TEST\sample.exe,这个就太明显了。
2.5 沙箱指纹测试小结
很早之前的数据了,测试了翰海源文件B超、金山火眼、Anubis、Comodo、Malwr,因为有些沙箱服务不太稳定,所以只测试了这几个。结果如图所示:
0×03. 不联网也可以泄露数据
在上一小节中,我们提到通过在样本报告中泄露文字信息。对于没有联网的沙箱,我们该如何泄露机器中的文件数据呢?也是可以考虑将文件内容读取出来之后,写入到注册表中来触发监控行为,随后在报告中就可以看到了。不过这样可能会使得报告相当的长,就得看报告对长度有没有限制了。
在乌云上看到一个比较猥琐的技巧(火眼恶意代码分析系统自保机制绕过导致二进制泄露):将二进制数据写入图片的像素值,因为沙箱系统会对程序的界面截图并展示在报告中,所以可以通过对图片进行解码来提取二进制数据。
漏洞作者提供的测试样本报告:http://fireeye.ijinshan.com/analyse.html?md5=0a33548fd14458e10b773b1b2237e2fc#full
0×04. 沙箱检测小结
检测的方法其实可多了,当然不需要去一一列举,因为枚列举一条,可能过不了多久就不能用了,不仅如此,你的行为可能还会触发报警系统。不过核心思路就是:就特征而言,沙箱有的而别的机器却没有的,都可以当做指纹特征!就方法而言,你有的而别人没有的逃逸方法都是好方法!
欢迎大家在评论中进行讨论哦~另外给自己的微博做个广告 @HiWinson 欢迎关注~
本文地址: 程序人生 >> 也来谈谈沙箱逃逸技术
作者:代码疯子(Wins0n) 本站内容如无声明均属原创,转载请保留作者信息与原文链接,谢谢!