介绍 :
我们最近遇到一个有趣的内嵌有宏的word文档,它会在打开时检测你是否则在虚拟机环境中,如果没有检测到虚拟环境,这个宏会尝试下载payload到主机上执行,让我们看看我们是如何通过VMRay的函数日志功能辅助分析这个有严重混淆的word文档的。
文档打开后,可以看到它用了社会工程学技巧,欺骗用户开启”Enable Content”功能,如果用户开启了,宏会自动触发Document_Open()函数。这将导致大量的混淆过的Visual Basic 代码运行。
分析:
我们把这个文档上传到VMRay Analyzer,几分钟后结果呈现,VTI的(VMRay Threat Identifier)得分是100/100,这主要原因是因为这个WORD文档尝试下载文件,属于高风险行为.
进一步分析这个结果,发现了有趣的东西,这个word宏使用WMI来检测VM,为了了解这个行为,我们不得不反混淆代码,通常这个工作在整个分析过程中是痛苦的,但是借助VMRay分析器的函数日志记录功能使这个工作变得容易了,函数日志会在分析运行时就被新建,他会记录函数调用和每个函数分配的参数,例如,我们看下面的图片,
能够看到完整的下载链接。
通常攻击者在混淆宏的时候,也会混淆函数调用。他们这里使用了一个小技巧,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))。
这样的混淆,使得重构这个宏很难。
然而,通过函数日志功能的辅助,我们重构这个宏看起来就不那么难了,我们仅仅需要在函数日志中查看敏感的字符串和函数就可以了,例如:
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
发表评论
您还未登录,请先登录。
登录