三、基于社会工程学的技巧
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 = trueisolation.tools.setptrlocation.disable = trueisolation.tools.setversion.disable = trueisolation.tools.getversion.disable = truemonitor_control.disable_directexec = truemonitor_control.disable_chksimd = truemonitor_control.disable_ntreloc = truemonitor_control.disable_selfmod = truemonitor_control.disable_reloc = truemonitor_control.disable_btinout = truemonitor_control.disable_btmemspace = truemonitor_control.disable_btpriv = truemonitor_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.虚拟机检测技术剖析
反相微分运算电路
高通的专利授权业务近几年备受争议,专利授权业务最成功却遭受质疑
芯旺微电子车规产品表现亮眼 车规级MCU全系布局
亚马逊推出了新的数字健康助手
晶圆级CSP应该如何进行维修?返修工艺详细说明
反虚拟机技术合集4
不同手机的马达差距有多大
Android 10不为老旧APP提供在导航栏内呼出菜单选项功能
光电鼠标的工作原理是什么?
什么是电桥平衡 怎么判断电桥平衡
OPPO Reno3系列线下线下同步首销,全民5G时代即将来临
ADPCM编译码系统电路
振动传感器该如何选型
脉冲金属探测器电路图大全(五款脉冲金属探测器电路原理图详解)
机构称华为鸿蒙将取代苹果iOS 从2024年起鸿蒙将成中国市场第二名
开关电源基本组成部分
以西门子Opcenter MES为核心的机加车间数控一体化方案
碲镉汞光子计数型线性雪崩探测器
各转换器的传递函数-升压转换器的导出示例
电脑打开网页速度慢原因及解决办法