Word宏使用WMI检测虚拟(VM)环境

阅读量171356

|

发布时间 : 2016-07-19 19:11:13

x
译文声明

本文是翻译文章,文章来源:360安全播报

原文地址:https://www.vmray.com/word-macro-detects-vm-environments/

译文仅供参考,具体内容表达以及含义原文为准。

介绍 :

我们最近遇到一个有趣的内嵌有宏的word文档,它会在打开时检测你是否则在虚拟机环境中,如果没有检测到虚拟环境,这个宏会尝试下载payload到主机上执行,让我们看看我们是如何通过VMRay的函数日志功能辅助分析这个有严重混淆的word文档的。

https://p2.ssl.qhimg.com/t0148332851bb9cc0d6.png

文档打开后,可以看到它用了社会工程学技巧,欺骗用户开启”Enable Content”功能,如果用户开启了,宏会自动触发Document_Open()函数。这将导致大量的混淆过的Visual Basic 代码运行。

https://p2.ssl.qhimg.com/t01d8ebed7e73217f4a.png

分析:

我们把这个文档上传到VMRay Analyzer,几分钟后结果呈现,VTI的(VMRay Threat Identifier)得分是100/100,这主要原因是因为这个WORD文档尝试下载文件,属于高风险行为.

https://p1.ssl.qhimg.com/t016ab0b0c905cc629c.png

进一步分析这个结果,发现了有趣的东西,这个word宏使用WMI来检测VM,为了了解这个行为,我们不得不反混淆代码,通常这个工作在整个分析过程中是痛苦的,但是借助VMRay分析器的函数日志记录功能使这个工作变得容易了,函数日志会在分析运行时就被新建,他会记录函数调用和每个函数分配的参数,例如,我们看下面的图片,

https://p1.ssl.qhimg.com/t016ab0b0c905cc629c.png

能够看到完整的下载链接。

通常攻击者在混淆宏的时候,也会混淆函数调用。他们这里使用了一个小技巧,Visual Basic允许通过CreateObject()新建类对象,这个函数需要一个字符串输入,例如CreateObject(“WScript.Shell”) 将新建一个shell-object,攻击者加密了这个字符串。首先攻击者加密字符串 “Wscript.Shell” 为 “lhtrWxaHLlSpcG.xS9e.iSkycrB” ,然后将它写到以“QJnANGYgOwW”为索引的“doTNALtI”列表中,现在 “doTNALtI.QJnANGYgOwW”将指向到“lhtrWxaHLlSpcG.xS9e.iSkycrB”(Wscript.Shell),接下来,攻击者建立一个命名为 “WkKQhrg04”(CreateObject())的过程,然后通过解密函数 “kFfxtZGj54a” 来解密输入的字符串,最终,一个简单的CreateObject(“WScript.Shell”) 调用,将被混淆成WkKQhrg04(kFfxtZGj54a(360, doTNALtI.QJnANGYgOwW))。

这样的混淆,使得重构这个宏很难。

https://p1.ssl.qhimg.com/t016ab0b0c905cc629c.png

然而,通过函数日志功能的辅助,我们重构这个宏看起来就不那么难了,我们仅仅需要在函数日志中查看敏感的字符串和函数就可以了,例如:

CLSIDFromProgIDEx (in: lpszProgID="WScript.Shell", lpclsid=0x2130e0 | out: lpclsid=…)) returned 0x0

我们可以看到,kFfxtZGj54a(360, doTNALtI.QJnANGYgOwW) 被 “Wscript.Shell” 调用了。

虚拟机检测:

这个样本的Visual Basic 宏是通过VMDetectionFails来检测虚拟环境,如果这个方法返回true,才开始后续的操作,否则宏将停止运行。

Public Sub MAIN()
  if VMDetectionFails then
    runInfection
  else
    error
  end if

VMDetectionFails包含三个检测方法

Private Function VMDetectionFails() As Boolean
  if Detection01 Or Detection02 then
    VMDetectionFails = Detection03
  else
    VMDetectionFails = True
  end if

如果Detection01 或者Detection0检测到在虚拟环境中,Detection03决定宏是否运行,反之,VMDetectionFails 返回true

Detection01 使用 WIMI

第一个检测方法分2步,首先检测“USERNAME”和“USER”环境变量,“USERDOMAIN"和“HOST”环境变量是否相等,如果返回true,检测将触发,否则进入下一步。

第二步将调用(“Win32_ComputerSystem“)的实例GetObject(“winmgmts:“),这个实例包含所有的系统信息。检测的系统信息的“硬件制造商”,“模型“是否包含“KVM”, “QEMU”, “RED HAT”, “VIRTUAL”, “VMWARE”, “XEN”. 字符。如果包含,则检测方法触发,并返回true。

Detection02 使用 WMI

第二个检测方法还是使用WMI

GetObject("winmgmts:").ExecQuery ("Select * from Win32_Process")

通过返回的信息看是否包含“FIDDLER”, “PROCEXP”, “PROCMON”, “SNORT”, “SURICATA”, “WIRESHARK”字符,如果有,则返回true

Detection03

这个检测方法会判断“1461591186_usa”字符串是否在文档路径中,如果是,返回true

InStr(1, callByName(ThisDocument, "Path", 2), "1461591186_usa") <> 0

我们怀疑作者只是使用这个字符串来做测试的

结论:

通过VMRay Analyzer 分析环境,我们可以获取到WORD文档当检测到没有在VM环境中时,会尝试下载

“/wp-content/plugins/hello123/word.exe”

当我们想继续分析CC服务器的时候,服务器已经关机了,word.exe也没有下载回来。

样本的哈希:

MD5: 25e1c155992cacfd04c4983305dfc6cb

SHA1: 4cccbab7a900e879ceb31f1f85b95a4f1e814bd5

SHA256: ab550133a5c3d49c7f48a903fbcd928afb01ec225841aba6387956d70daf7e10

本文翻译自360安全播报 原文链接。如若转载请注明出处。
分享到:微信
+10赞
收藏
adlab_mickey
分享到:微信

发表评论

Copyright © 北京奇虎科技有限公司 三六零数字安全科技集团有限公司 安全KER All Rights Reserved 京ICP备08010314号-66