反虚拟机技术合集4

电子说

1.2w人已加入

描述

三、基于社会工程学的技巧

1.检测电脑中常用软件的使用情况

名为 Intelligent Software Solutions Inc.doc 的恶意软件样本文件使用了下面的反虚拟机技巧,SHA256值为048fc07fb94a74990d2d2b8e92c099f3f986af185c32d74c857b07f7fcce7f8e。

恶意代码

RecentFiles对象表示系统最近打开过的历史文档。

通常,安装了word程序的用户可能会打开超过2个或更多数量的文档。然而,当该恶意软件植入到新创建的虚拟机和word环境中后,总是状况不断,不能正常运行。每次测试时手动打开一两次,总是出现程序异常。即使是保存了虚拟机镜像状态,重启调试分析后,恶意程序仍然不能正常执行。

从DKTxHE函数功能可以看出,恶意软件以RecentFiles数量来判断是否身处VM环境中,如果在VM环境中,它将不会执行任何恶意行为。之后,随意创建了3个不同名称的word文档,逐一打开并关闭,让历史文档数量为3,最终成功运行并检测到了恶意软件。

2. 探测杀毒软件公司相关的IP地址

同样是上面的恶意软件,它在另一个子程序中使用了下面的反虚拟机技巧。

首先,它通过向远程地址 https://www.maxmind.com/geoip/v2.1/city/me 发出某种认证请求,之后设置请求信息中的HTTP Refer属性和User-Agent值,访问链接 https://www.maxmind.com/en/locate-my-ip-address 以此获取宿主系统的地址信息。

获取信息封装于JSON格式文件中,包含国家、城市、或者与IP相关的组织机构等信息。IP信息的organization字段显示为美国Comcast宽带网络供应商。

恶意软件发出访问请求后,获取到宿主系统的相关信息将存储于某个数组中。如果获取到的组织机构名称与JSON文件中的任何机构字符串匹配,恶意软件将发生异常并停止运行。当然,列表中的机构名称在代码中是经过混淆的。

恶意代码

四、虚拟机逃逸

VMware等软件中或多或少都存在一些安全漏洞,可以利用这些漏洞使宿主操作系统崩溃或者是在宿主操作系统中运行代码。当主机系统被感染后,一些公开可用的工具可以用来对VMware等软件进行攻击。

五、总结

当遇到的恶意代码似乎不能运行时,在使用调试或反汇编恶意代码搜索其反虚拟机探测代码之前,应该考虑使用一个卸载了VMware Tools的虚拟机。VMware中有一些未文档化的功能可以帮助减轻反虚拟机技术的探测。将下面的代码放到VMware的.vmx文件中,以减轻虚拟机被探测的可能。

isolation.tools.getPtrLocation.disable = "TRUE"
isolation.tools.setPtrLocation.disable = "TRUE"
isolation.tools.setVersion.disable = "TRUE"
isolation.tools.getVersion.disable = "TRUE"
monitor_control.disable_directexec = "TRUE"
monitor_control.disable_chksimd = "TRUE"
monitor_control.disable_ntreloc = "TRUE"
monitor_control.disable_selfmod = "TRUE"
monitor_control.disable_reloc = "TRUE"
monitor_control.disable_btinout = "TRUE"
monitor_control.disable_btmemspace = "TRUE"
monitor_control.disable_btpriv = "TRUE"
monitor_control.disable_btseg = "TRUE"

参数directexec可以使用户模式下的代码被模拟执行而不是直接在硬件上运行,因此它可以挫败一些反虚拟机技术。

前四条设置被VMware后门命令使用,它们的作用是使得运行在Guest系统中的VMware Tools不能获取宿主系统的信息。这些设置会禁用VMware Tools的一些有用功能,并可能对虚拟机性能有严重负面影响。所以,仅当其他技术无效时再添加这些选项。当然,也可以将恶意代码在其他虚拟环境或者物理主机上运行。

同反调试技术一样,要想发现恶意代码中的反虚拟机技术需要在长期调试过程中积累更多经验。例如,看到一个代码在一个条件跳转处过早终止,这可能就是反虚拟机技术造成的结果。一如既往地警惕这种类型的问题,然后查看其之前的代码,来确定它到底执行了什么操作。

和反调试技术一样,通过修改条件跳转指令或者使用NOP指令覆盖来绕过相关探测。

最后让我们总结一下提到的内容:

腾讯2016游戏安全技术竞赛有一道题,大概意思就是给一个exe,要求编写一个Tencent2016C.dll,并导出多个接口函数 CheckVirtualPCX、CheckVMWareX、CheckVirtualBoxX。X为1-100之间的数字。函数功能是检测自己是否处于相应的虚拟机中,是返回TRUE,否则返回FALSE。函数的原型都是 typedef BOOL (WINAPI* Type_CheckXXXXXX)();。

编译好dll之后,放在Tencent2016C.exe的同目录,运行Tencent2016C.exe,点击检测按钮,在物理机中运行时函数接口输出为0,在VMware虚拟机、VirtualBox虚拟机和VirtualPC虚拟机中运行时,相关的接口输出1。我们把提到的知识综合一下完成这道题目。

解题的参考代码和题目相关信息:https://github.com/houjingyi233/test-virtual-machine/

参考资料

1.《恶意代码分析实战》第17章反虚拟机技术(本文的主体框架)

2.这个恶意软件“奇葩”的反虚拟机技巧

3.天枢战队官方博客(本文大部分代码的来源)

4.虚拟机检测技术剖析

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分