根据Yoroi年度网络安全报告、网络威胁趋势以及其他资源来看,MS Office文件(Word文档和Excel电子表格)已经成为当前最常见的恶意软件加载器之一。通常情况下,攻击者会引诱受害者打开特制的Office文档,从而加载(有时甚至从外部资源中引入)恶意内容,并在登陆的主机上执行恶意代码。本文中,我们将为读者介绍如何利用各种逆向分析方法和恶意软件分析技术,来分析MS Office恶意软件(Dropper)。
工具链
· scDBg
· oleid.py
· oletools
· olevba
富文本格式(.RTF)
RTF格式是一种可以携带各种对象的文本格式。
RTF数据
实际上,Didier Stevens为我们提供了一款名为rtfdump.py的优秀工具,可以用来处理RTF文件。事实上,如果当我们利用这个工具处理RTF文件时,不仅看到文件的各个组成部分,同时,还能看到其运行后被包含和使用的各个对象,具体如下图所示。通常情况下,我会建议大家从“体型”较大的对象开始调查,换句话说,从字节数较多的对象开始入手。
考察RTF文件内容
实际上,rtfdump.py不仅提供了选择特定节的方法(-s),而且,您还可以决定是显示它,还是将其转储到一个文件中以进行其他分析。举例来说,如果您希望选择第2节并显示其内容,则可以使用如下所示的命令。
python rtfdump.py -s 2 -H mal1.doc
EquationEditor (CVE-2017-11882) ?
根据个人经验,EquationEditor通常是一个危险的标志。因为攻击者经常利用CVE-2017-11882来运行特定的shellCode。如果你通过HexView检查第2节中的内容,你可能会发现某些编码模式,即反复出现的字符和符号。这通常是XOR/ROL/SHIFT加密函数的典型行为。为此,Didier Stevens提供了另一个有趣的工具,名为xorsearch。
转储二进制内容
在使用xorsearch工具之前,我们需要将equationeditor所在节转储到一个外部文件中。完成这项任务后,请转到Windows系统(我们以后会需要它),并通过xorsearch.exe处理转储的二进制文件。
“[...]XORSearch是一个在XOR、ROL、ROT或SHIFT编码的二进制文件中搜索给定字符串的程序。对于使用XOR算法编码的二进制文件来说,通常会用一个常量值(密钥)对某些(或所有)字节执行XOR运算。对于使用ROL(或ROR)编码的文件来说,其字节被循环移位一定数量的位数(密钥)。而使用ROT编码的文件中的字母字符(A-Z和a-z),被循环移位了一定数量的步数。SHIFT编码文件的字节向左移动一定数量的位数(密钥):第一个字节的所有位向左移动,第二个字节的MSB变成第一个字节的LSB,第二个字节的所有位向左移动,......XOR和ROL/OR编码经常被恶意代码开发者用来混淆像URL这样的字符串。[...]”(上述内容摘自Didier Stevens的博客)
利用XORSSearch处理经过编码的二进制文件
一旦运行,xorsearch就会提供许多偏移量,使我们有更大的机会发现控制权的变化情况。换句话说,如果我们从这些偏移量处运行shellcode的话,可以避免执行未对齐的指令。这时,您还可以借助于另一款号称ShellCode调试专家的软件:scDbg。运行该软件后(下图显示了其GUI),你需要从xorsearch.exe给出的偏移量处运行模拟器,就本例来说,该偏移量为0x2c74c。在此,建议勾选“Unlimited steps”功能,这样的话,模拟器就能够在不停止shellcode的情况下进行跟踪;同时,我们还建议勾选“Reporting Mode”,这样你就可以在执行结束时看到一个摘要视图。
在偏移量0x2c74c处运行scDbg。
运行结果如下所示:
执行Shellcode
有时候,攻击者会使用不同的系统调用:ExpandEnvironmentStringsW,它并非scDbg所hooked的函数。在这种情况下,您可能需要打开“刚刚转储的文件”,并通过将字符串ExpandEnvironmentStringsW替换为字符串ExpandEnvironmentStringsA来修补二进制文件。完成该操作后,将shellcode的修补版本重新加载到scDbg中并重新运行它,这样能获得更好的结果。
IoC:
· b98b7be0d7a4004a7e3f22e4061b35a56f825fdc3cba29248cf0500beca2523d (mal1.doc)
· eac70cabccac5b0bd493111ec238f287e129923c27d68e5bb126d2442a4bf8da (转储的二进制文件)
· //yatesassociates[.co[.za/documentato/MLY.exe (下载地址)
Office文档中的加密内容
有时候,你可能会遇到加密的Office文档。如果运行oleid,这时会看到“Encrypted”对应的值为“True”。对于这些使用VBA加密的OLE文件,我们是无法访问其原始内容的,从而难以逆向/研究/了解这些内容的作用。在这种情况下,你需要找出加密密钥,并对内容进行解密。
OLEID表明内容已加密
幸运的是,MACRO代码进行了加密处理后,运行这些代码的客户端肯定知道如何解密,否则的话,它们也无法运行这些MACRO代码。
这种保护措施乍一看似乎比较可靠,但详细分析后发现,用于加密文档的密钥,并不是用户输入的密码(或其哈希值),而是存储在MS Excel程序代码中的一个固定密钥。这个密钥是由密码“VelvetSweatshop”生成的。这真是太搞笑了!大家可以尝试用该密码来保护一个MS Excel文档(或者用这个密码打开一个文档)。最令人惊讶的是,打开文档根本就不需要密码。
对于这个问题,我们可以借助于一个好帮手,即msoffcrypto-crack.py。
寻找“隐密”的微软加密密码
一旦找到了“加密密钥”,你可以直接解密文件内容了(使用同样的工具,即msoff-crypto-crack.py),以明文方式保存,然后,运行oledump.py处理该文件。这时,你应该可以看到正常的对象内容了。就本例来说,多用了一个Equation Editor。让我们转储它(oledump.py)。
没有VBA宏的Equation Editor
python3 oledump.py -s B2 -d cracked.xlsx > out_b2.bin
现在,让我们看看xorsearch.exe是否找到了常见的控制流模式!如果找到了的话,请使用scDBG.exe进一步分析。
使用XORSearch搜索二进制代码
IoC:
· 3f3c2a4cb476c76b8bf84d6d2b0ee1a0a589709ccc69e84ffe6b2afd2dadbb39 (XLS文件)
· 03u.ru (D&C2)
带有VBA宏的Office文档
分析恶意Office文档时,经常会文档中遇到VBA宏。这时,我们可以通过运行Oledump.py,检查各种VBA内容(宏所在的M标签),并将重点放在最“胖”的内容上。换句话说,强烈建议从内容较多的地方开始着手(因此,就下图来说,我们可以从A11处着手调查,因为它的字节数最多),因为这些地方最有可能找到我们感兴趣的IoC。
oledump显示的VB宏
在这种情况下,olevba能够给我们带来很大的帮助。该工具可以模拟VBA引擎,从而运行宏脚本,执行的结果如下图所示。
VBA仿真程序
这个仿真引擎会一直运行,直到一个已知函数到达终点为止。例如
IoC:
· 84a07333851ed300b34b34a026a58636844861e2d5265f2faabddddf05815f21 (direct.07.20.doc)
· detayworx[.com/_vsnpNgyXp84Os8Xh.php (Dropper)
Office Excel Macro 4.0
有时你会打开一个恶意的MS Excel电子表格,但是里面并没有包含MACRO代码。这种技术为攻击者提供了一种简单可靠的方法,使他们能够在目标网络上站稳脚跟,因为它只是滥用了Excel的合法功能,并不依赖于任何漏洞或exploit。它只是一个“古董级”的功能特性(几乎有30年历史),只是近几年才开始被攻击者所利用。关于这种类型的攻击的缓解措施,可以访问这篇文档。
没有MACRO代码的Excel文档!
通过运行OLEVBA,你就可以检查它是否发现了我们感兴趣的东西。就上图来说,它指出该文档应用了XLM Excel 4。当然,用于去混淆并进行分析的工具有许多,有的功能很简单,有的则非常复杂。根据我的经验,XLMDeobfuscator用起来非常顺手,所以,下文中我们将以它为例进行介绍。
为了对XLM中的宏代码进行去混淆,可使用下列技术:
OLEVBA.py发现MACRO 4.0
在未启用宏的情况下打开恶意文件,打开宏编辑器,复制以下脚本并保存,然后,在启用宏的情况下重新打开该文件。
Sub ShowAllSheets() Dim sh As Worksheet For Each sh In ActiveWorkbook.Sheets sh.Visible = True Next End Sub
如果由于宏被执行而无法打开恶意文件,并且也无法控制执行流程的话,则可以打开另一个工作表,打开VBA编辑器,并按以下方式直接用VBA“导入”恶意文档:
Public Sub Convert_XML_To_Excel_From_Local_Path() Dim xml_File_Path As String Dim wb As Workbook 'Load XML Data into a New Workbook - Code from Officetricks.com Application.DisplayAlerts = False xml_File_Path = "c:/FileToOpen.xlm" Set wb = Workbooks.OpenXML(Filename:=xml_File_Path) 'Copy Content from New workbook to current active Worksheet wb.Sheets(1).UsedRange.Copy ThisWorkbook.Sheets(Sheet2).Range(A1) 'Close New Workbook & Enable Alerts wb.Close False Application.DisplayAlerts = True End Sub
这样,您就可以看到隐藏的工作表或隐藏的单元格了。这里还有一个小技巧,为了快速找到有内容的单元格,可以搜索=,具体如下图所示。
现在,通过选中左上角的方框(即下图中BG35344),就可以看到哪里是起点。在这个文件中,Auto_Open是第一个被调用的函数,你可以在那里找到它的引用。然后,您可能会看到使用了两种主要格式:FORMULA和GOTO。
揭开隐藏的Excel 4.0 Macro的神秘面纱
这时,您能够以受控的方式执行MACRO 4,从而为XLM去混淆。为此,您可以删除最后一个GOTO,这样就不会把控制流交给去混淆的MACRO,而是停止它们(用HALT代替最后一个GOTO),这样,就可以看到用于该工作表的、经过去混淆处理的代码了。
IoC:
· d864b4da58253cba29a8106b0727e81852a181f3ac59ec7dfb9b9dee5931b7cc (W2_tax.xls)
· 5.182.210.133/get.php (Dropper)
由Excel解读的.CSV文件
有时你可能会发现许多.csv文件。这时,可以将其导入到Microsoft Excel中,使其变成“真正的”的Ole文件。事实上,通过OleDump处理攻击者精心制作的csv文件时,有可能会发现一些有趣的事情,比如CSV文件中包含VBA代码或Object。例如,对于sha-256为d5db2034631e56d58dffd797d25d286469f56690a1b00d4e6a0a80c31dbf119e的样本来说,你可能会发现下面的东西(如果用普通的编辑器打开该样本的话,它看上去就是一个正常的文本,并且以逗号为分隔符)。但是,如果通过OleDump打开它的话,则会找到一些可疑的东西。
OleDump处理结果
接下来,您既可以转储代码并进行手动分析,也可以通过代码仿真器进行分析。通过对CSV运行OleVBA,你会发现许多有趣的指标(请看下图)。例如,该工具指出,一旦用Microsoft excel打开该文档,它就会调用AutoExec。此外,还有许多可疑的调用会被执行,如exec、run;此外,一些hex-base64字符串还应用了混淆技术。在这次运行中,它甚至能够解码这些的字符串,并识别IoC,如URLs和文件名。
oleVBA分析结果
如果代码仿真器行不通的话,你还可以使用OleDump转储整个代码。一旦转储了代码,就可以通过调试器来分析代码;如果代码未经混淆处理的话,则可以直接读取。
提取的组件
IoC
· d5db2034631e56d58dffd797d25d286469f56690a1b00d4e6a0a80c31dbf119e (invoice.csv)
· omamontaggi.[it/bels.exe (Droping WB)
XLMDeobfuscator
XLMDeobfuscator是@DissectMalware开发的一款优秀工具。它可以用来解码经过混淆的XLM宏(也就是Excel 4.0宏)。它利用内部的XLM模拟器来解释宏,而不需要完全执行代码。它同时支持xls、xlsm和xlsb格式。
XLMDeobfuscator
此外,OleDump插件_biffis能够忽略每一个Excel单元格,并找到函数和公式。通过插件选项-x,它能够显示隐藏的宏XLM;而使用了插件选项-f,该插件将通过解释编码(如十六进制和base64)并打印相关字符串来找出外部链接。
oledump.py -p plugin_biff --pluginoptions "-x"
IoC
· 1e194edbb1f28b9ecc4dc6a9a1e289d1c404470724f5fb14dd01312ed75bc298 (File_457366.xls)
· p://45[.11[.183[.78/6f04e0be46qb4Zc[.php (Dropper)
本文翻译自:https://marcoramilli.com/2020/08/24/how-to-reverse-office-droppers-personal-notes/如若转载,请注明原文地址: