THMBasicStaticAnalysis
Introduction
在本模块的前几个房间中,我们学习了计算机架构和汇编语言的基础知识。虽然这些主题是学习恶意软件分析的基本构建块,但我们将从这个房间开始分析恶意软件。
先决条件
在开始这个房间之前,建议您完成以下房间。
学习目标
分析恶意软件的第一步通常是在不运行它的情况下查看其属性。这种分析称为静态分析,因为恶意软件是静态的并且没有运行。我们将在这个房间中介绍基本的静态分析。特别是,我们将介绍以下主题。
- 恶意软件分析实验室设置
- 在恶意软件中搜索字符串
- 通过哈希对恶意软件进行指纹识别
- 基于签名的检测机制
- 从 PE 标头中提取有用信息
事不宜迟,让我们继续下一个任务,了解如何设置恶意软件分析实验室。
Lab Setup
Basic precautions for malware analysis:
在分析恶意软件之前,必须了解恶意软件通常具有破坏性。这意味着在分析恶意软件时,很有可能破坏正在分析的环境。这种损害可能是永久性的,消除这种损害可能比分析恶意软件所付出的努力还要多。因此,创建一个能够承受恶意软件破坏性的实验室设置是必要的。
虚拟机:
用于恶意软件分析的实验室设置需要能够保存机器的状态(快照)并在需要时恢复到该状态。因此,机器已准备好安装所有必需的工具,并且其状态已保存。在分析该机器中的恶意软件后,将其恢复到安装所有工具的干净状态。此活动可确保在干净的环境中分析每个恶意软件,并且在分析后,机器可以恢复而不会造成任何持续损坏。
虚拟机为恶意软件分析提供了理想的媒介。用于创建和使用虚拟机的一些著名软件包括 Oracle VirtualBox 和 VMWare Workstation。这些应用程序可以创建快照并在需要时恢复到快照,使其非常适合我们的恶意软件分析工作。简而言之,以下步骤描述了虚拟机在恶意软件分析中的使用情况。
- 创建一个新的虚拟机并安装新的操作系统
- 通过在其中安装所有必需的分析工具来设置机器
- 拍摄机器快照
- 复制/下载虚拟机内的恶意软件样本并进行分析
- 分析完成后将机器恢复到快照
遵循这些步骤可确保您的虚拟机在分析新恶意软件时不会被以前的恶意软件样本的残留物污染。它还确保您不必为每次分析一次又一次地安装工具。选择要安装在恶意软件分析虚拟机中的工具也可能很麻烦。可以使用预装了工具的免费恶意软件分析虚拟机来简化此任务。让我们回顾一下安全研究人员最常用的一些恶意软件分析虚拟机。
FLARE VM:
FLARE VM 是一款基于 Windows 的 VM,非常适合恶意软件分析,由 Mandiant(前身为 FireEye)创建。它包含一些社区最喜欢的恶意软件分析工具。此外,它也是可自定义的,即您可以将任何自己的工具安装到 VM 中。FLARE VM 与 Windows 7 和 Windows 10 兼容。有关已安装在 VM 中的工具列表和安装步骤,您可以访问 VM 的 GitHub 页面 或 Mandiant 博客。由于它是基于 Windows 的 VM,因此它可以对基于 Windows 的恶意软件进行动态分析。
FLARE VM 的一个实例连接到此房间以执行实际任务。在继续执行下一个任务之前,请单击此任务右上角的“启动机器”按钮启动机器。附加的虚拟机在桌面上有一个名为 mal 的目录,其中包含我们将针对该房间进行分析的恶意软件样本。
REMnux:
REMnux 代表 Reverse Engineering Malware Linux。它是一款基于 Linux 的恶意软件分析发行版,由 Lenny Zeltser 于 2010 年创建。后来,更多人加入了团队,对发行版进行了改进。与 FLARE VM 一样,它预装了一些最流行的逆向工程和恶意软件分析工具。它可以帮助分析师节省时间,否则他们将花费时间识别、搜索和安装所需的工具。安装和文档等详细信息可以在 GitHub 或发行版的 网站 上找到。作为一款基于 Linux 的发行版,它不能用于对基于 Windows 的恶意软件进行动态分析。REMnux 之前曾在恶意软件分析入门室中使用,也将在即将开设的房间中使用。
String search
在 恶意软件分析简介 房间中,我们发现搜索字符串是恶意软件分析的第一步。字符串搜索通过识别可疑恶意软件样本中存在的重要字符串片段,为恶意软件分析师提供有用的信息。要了解有关字符串的更多信息,我们可以查看 此房间 专用于字符串。
字符串搜索的工作原理:
字符串搜索查看恶意软件样本中的二进制数据,无论其文件类型如何,并识别 ASCII 或 Unicode 字符序列后跟空字符。无论在哪里找到这样的序列,它都会将其报告为字符串。这可能会引发一个问题,即并非所有看起来像 ASCII 或 Unicode 字符的二进制数据序列都是实际的字符串,这是正确的。许多字节序列可以满足上述标准,但不是有用的字符串;相反,它们可能包括内存地址、汇编指令等。因此,字符串搜索会导致许多误报 (FP)。这些 FP 在我们的字符串搜索的输出中显示为垃圾,应将其忽略。分析师需要识别有用的字符串并忽略其余字符串。
寻找什么?
由于分析师必须识别实际感兴趣的字符串并将其与垃圾区分开来,因此在执行字符串搜索时知道要寻找什么是很好的。虽然可以在字符串搜索中挖掘出很多有用的信息,但以下工件可以用作妥协指标 (IOC) 并证明更有用。
- Windows 函数和 API,如 SetWindowsHook、CreateProcess、InternetOpen 等。它们提供有关恶意软件可能功能的信息
- IP 地址、URL 或域可以提供有关可能的 C2 通信的信息。使用字符串搜索找到了 Wannacry 恶意软件的 killswitch 域
- 各种字符串,例如比特币地址、用于消息框的文本等。此信息有助于为进一步的恶意软件分析设置上下文
基本字符串搜索:
在 恶意软件分析简介 房间中,我们了解了 strings
实用程序,它预装在 Linux 机器中,可用于基本字符串搜索。同样,FLARE VM 附带一个 Windows 实用程序 strings.exe
,可执行相同的任务。此 Windows 字符串实用程序是 Sysinternals 套件的一部分,Sysinternals 套件是 Microsoft 发布的一组工具,用于分析 Windows 机器的不同方面。有关字符串实用程序的详细信息,请参阅 Microsoft 文档。字符串实用程序预装在连接到此房间的 FLARE VM 中。命令行字符串实用程序的优点在于它可以将字符串转储到文件中以供进一步分析。在附加的 VM 中,执行以下命令将在二进制文件中执行基本字符串搜索。
C:\Users\Administrator\Desktop>strings <path to binary> |
FLARE VM 中包含的其他几个工具可用于字符串搜索。例如,CyberChef(桌面> FLARE> 实用程序> Cyberchef)也有一个用于基本字符串搜索的方法。PEstudio(桌面> FLARE> 实用程序> pestudio)也提供了一个字符串搜索实用程序。PEstudio 还提供了有关字符串的一些其他信息,例如,编码、字符串的大小、在二进制文件中发现字符串的偏移量,以及猜测字符串与什么相关的提示。它还有一个黑名单列,可将字符串与某些签名进行匹配。
上面的 PEstudio 截图显示了 PEstudio 在恶意软件样本中找到的字符串。这可以通过在 PEstudio 中加载 PE 文件后在左侧窗格中选择字符串来完成。此处的黑名单显示了一堆 Windows API 调用,PEstudio 将其标记为可能用于恶意进程。您可以使用 MalAPI 或 MSDN 等资源了解这些 API。
模糊字符串:
搜索字符串通常是恶意软件分析中最有效的第一步之一。正如 Wannacry 案例 中所见,有效使用字符串搜索通常可以破坏恶意软件的传播和感染。恶意软件作者知道这一点,并且不希望简单的字符串搜索阻止他们的恶意活动。因此,他们部署了混淆恶意软件中字符串的技术。恶意软件作者使用多种技术来混淆其代码的关键部分。这些技术通常会使字符串搜索无效,即我们在搜索字符串时找不到太多信息。
Mandiant(当时的 FireEye)推出了 FLOSS 来解决这个问题,它是 FireEye Labs Obfuscated String Solver 的缩写。FLOSS 使用多种技术来反混淆和提取使用字符串搜索无法找到的字符串。FLOSS 可以提取的字符串类型及其工作原理可在 Mandiant 的博客文章 中找到。
要执行 FLOSS,请打开命令提示符并导航到桌面目录。从那里,使用以下命令。
C:\Users\Administrator\Desktop>floss -h |
此命令将打开 FLOSS 的帮助页面。我们可以使用以下命令使用 FLOSS 在二进制文件中搜索混淆的字符串。
C:\Users\Administrator\Desktop>floss --no-static-strings <path to binary> |
请记住,该命令可能需要一些时间来执行,并且在生成结果之前您可能会看到一些错误消息。
Fingerprinting malware
在分析恶意软件时,通常需要识别独特的恶意软件并将它们彼此区分开来。文件名不能用于此目的,因为它们很容易被复制并且可能会造成混淆。此外,文件名也很容易更改。指纹机上使用指纹识别自身的漏洞图像因此,哈希函数用于唯一地识别恶意软件样本。哈希函数以任意长度的文件/数据作为输入,并根据文件内容创建固定长度的唯一输出。此过程是不可逆的,因为您无法使用哈希重新创建文件的内容。哈希函数具有非常低的概率(几乎为零),两个文件具有不同的内容但哈希值相同。只要文件的内容保持不变,哈希就保持不变。但是,即使内容略有变化也会导致不同的哈希值。可能需要注意的是,文件名不是内容的一部分;因此,更改文件名不会影响文件的哈希值。
除了识别文件外,哈希还用于存储密码以验证用户身份。在恶意软件分析中,哈希文件可用于识别唯一的恶意软件、在不同的恶意软件存储库和数据库中搜索此恶意软件,并作为入侵指标 (IOC)。
Commonly used methods of calculating File hashes:
为了识别文件,需要对整个文件进行哈希处理。有多种方法可以获取哈希值。最常用的方法是:
- Md5sum
- Sha1sum
- Sha256sum
前两种类型的哈希值现在被认为是不安全的或容易受到碰撞攻击(当两个或多个输入产生相同的哈希值时)。尽管这些哈希函数发生碰撞攻击的可能性不大,但仍然有可能。因此,sha256sum 目前被认为是计算文件哈希值最安全的方法。在附加的 VM 中,我们可以看到多个实用程序为我们计算文件哈希值。
使用哈希查找相似文件:
哈希函数帮助恶意软件分析师的另一种情况是使用哈希识别相似文件。我们已经确定,即使文件内容发生轻微变化也会导致不同的哈希值。但是,某些类型的哈希可以帮助识别不同文件之间的相似性。让我们了解其中的一些。
Imphash:
imphash 代表“导入哈希”。导入是可执行文件从其他文件或动态链接库 (DLL) 导入的函数。imphash 是恶意软件样本导入的函数调用/库的哈希值,以及这些库在样本中的出现顺序。这有助于识别来自同一威胁组织或执行类似活动的样本。有关 Imphash 的更多详细信息,请参阅 Mandiant 的博客。
我们可以使用 PEstudio 计算样本的 Imphash。
任何以相同顺序导入的恶意软件样本都会具有相同的 imphash。这有助于识别类似的样本。
在上面的 Malware Bazaar 截图中,所有这些样本都具有相同的 imphash。我们可以看到,所有这些样本都被归类为同一恶意软件家族。我们可以看到它们的 sha256 哈希值差异很大,并没有提供任何有关它们相似性的信息。然而,相同的 imphash 帮助我们识别它们可能属于同一个家族。
模糊哈希/SSDEEP:
另一种识别类似恶意软件的方法是通过模糊哈希。模糊哈希是上下文触发分段哈希 (CTPH)。此哈希是通过将文件分成几部分并计算不同部分的哈希值来计算的。此方法会创建具有相似字节序列的多个输入,即使整个文件可能不同。有关 SSDEEP 的更多信息,请访问此链接。
可以在附加的 VM 中使用多个实用程序来计算 ssdeep,例如 CyberChef。但是,ssdeep 实用程序已放置在桌面上以使其更容易。以下命令显示该实用程序的帮助菜单。
使用 ssdeep 查找类似文件
C:\Users\Administrator\Desktop>ssdeep-2.14.1\ssdeep.exe -h |
让我们计算附加虚拟机中 mal 目录中所有样本的哈希值。
Calculating ssdeep
C:\Users\Administrator\Desktop>ssdeep-2.14.1\ssdeep.exe mal\* |
我们可以根据需要尝试帮助文件中显示的其他选项。当我们有了 ssdeep 哈希时,我们可以将这些哈希匹配在一起以识别相似的文件。如果我们有大量数据,这有助于我们识别相似的文件。上面提供的文档链接有非常好的使用示例。以下终端窗口显示了与我们的用例相关的示例之一以匹配文件。为此,我们可以使用 -d 运算符。-r 运算符以递归方式运行 ssdeep 实用程序,-l 运算符输出文件的相对路径。
Finding matching files using ssdeep
C:\Users\Administrator\Desktop>ssdeep-2.14.1\ssdeep -l -r -d Incoming Outgoing Trash |
结果显示相互匹配的文件。末尾括号中的数字是文件匹配的百分比。
Signature-based detection
在上一个任务中,我们了解了哈希如何识别相同的文件。我们还发现,即使只是更改文件中的单个字节数据,哈希也会发生变化,以及 imphash 和 ssdeep 等特定哈希如何帮助我们识别文件相似性。虽然使用 imphash 或 ssdeep 可以识别某些文件是否相似,但有时我们只需要识别文件是否包含感兴趣的信息。哈希不是执行此任务的理想工具。
签名:
显示计算机显示屏的图像,其中显示随机数字和字母。放大镜用于在一个地方放大显示,拼出单词“恶意软件”
签名是一种识别特定文件是否具有特定类型内容的方法。我们可以将签名视为可能在文件中找到的模式。此模式通常是文件中的字节序列,带有或不带有有关其位置的任何上下文。安全研究人员经常使用签名来识别文件中的模式、识别文件是否为恶意文件以及识别可疑行为和恶意软件家族。
Yara 规则:
Yara 规则是一种基于签名的规则。它被誉为恶意软件研究人员的模式匹配瑞士军刀。Yara 可以根据二进制和文本模式识别信息,例如文件中包含的十六进制和字符串。如果您感兴趣,TryHackMe 有一个专门的 Yara 规则空间。
安全社区发布了一个开源 Yara 规则库,我们可以根据需要使用它。在分析恶意软件时,我们可以使用此库来挖掘社区的集体智慧。但是,在使用这些规则时,请记住,有些规则可能取决于上下文。其他一些规则可能仅用于识别也可能是非恶意的模式。因此,仅仅因为规则命中并不意味着该文件是恶意的。为了更好地理解,请阅读特定规则的文档,以确定以最佳方式应用该规则的用例。
专有签名 - 防病毒扫描:
除了开源签名之外,防病毒公司还花费大量资源来创建专有签名。这些专有签名的优势在于,由于它们必须进行商业销售,因此误报(FP,当签名命中非恶意文件时)的可能性较小。但是,这可能会导致一些误报(FN,当恶意文件未命中任何签名时)。
防病毒扫描有助于高度可靠地识别文件是否为恶意文件。防病毒软件通常会提及文件命中的签名,这可能暗示了文件的功能。但是,我们必须注意,尽管他们尽了最大努力,但市场上的每种 AV 产品都有一些 FP 和一些 FN。因此,在分析恶意软件时,明智的做法是从多种产品中得出结论。 Virustotal 网站使我们的这项任务变得更容易,除了一些非常有用的信息外,我们还可以在这里找到来自 60 多家 AV 供应商的文件评价。我们还在恶意软件分析简介室中谈到了这个主题。请记住,如果您正在分析敏感文件,最好在 Virustotal 或其他扫描网站上搜索其哈希值,而不是上传文件本身。这样做是为了避免在互联网上泄露敏感信息并让老练的攻击者知道您正在分析他们的恶意软件。
由于我们已经在 Yara 室详细介绍了 Yara 规则,并在恶意软件分析简介室介绍了 Virustotal 扫描,因此我们不会在这里再次介绍它们。但是,FLARE VM 还有另一个非常酷的工具可用于签名扫描。
Capa:
Capa 是 Mandiant 创建的另一个开源工具。此工具有助于识别 PE 文件中的功能。 Capa 读取文件并尝试根据文件中存在的签名(例如导入、字符串、互斥体和其他工件)识别文件的行为。有关 Capa 背景的更多详细信息,我们可以访问其 Github 页面 或 Mandiant 介绍 Capa 的 博客文章。
使用 Capa 很简单。在命令提示符下,我们只需将 capa 指向我们要对其运行的文件即可。
C:\Users\Administrator\Desktop>capa mal.exe
-h
运算符显示详细选项。
Capa
C:\Users\Administrator\Desktop>capa -h |
我们可以通过针对 Desktop\mal 目录中的二进制文件运行 capa 来测试它。请注意,capa 可能需要一些时间才能完成分析。示例输出如下。
Capa example
C:\Users\Administrator\Desktop>capa mal\1 |
我们可以看到,Capa 已根据 MITRE ATT&CK 框架和 恶意软件行为目录 (MBC) 映射了已识别的功能。在最后一张表中,我们可以看到匹配签名的功能以及针对这些功能找到匹配项的签名数量。如我们所见,它还告诉我们样本中是否存在混淆的堆栈字符串,这使我们能够确定对样本运行 FLOSS 是否有帮助。要了解有关样本的更多信息,我们可以使用 -v 或 -vv 运算符,它们将以详细或非常详细的模式向我们显示结果,识别我们可能找到所述功能的地址。
Leveraging the PE header
到目前为止,我们在本室中介绍了无论恶意软件的文件类型如何都能起作用的技术。但是,这些技术有点不靠谱,因为它们并不总是能为我们提供有关恶意软件的确定性信息。PE 标头提供了样本的更多确定性特征,这告诉我们有关样本的更多信息。
PE 标头:
我们运行的程序通常以可执行文件格式存储。这些文件是可移植的,因为它们可以带到具有相同操作系统和依赖项的任何系统,并且它们将在该系统上执行相同的任务。因此,这些文件称为可移植可执行文件(PE 文件)。PE 文件由存储在磁盘上的一系列位组成。此序列采用特定格式。初始位定义 PE 文件的特征并解释如何读取其余数据。PE 文件的初始部分称为 PE 标头。
FLARE VM 中的几个工具可以帮助我们分析 PE 标头。PEStudio 就是其中之一。我们已经在之前的任务中熟悉了 PEStudio,因此在本任务中我们也会使用它。
PE 标头包含丰富的信息,这些信息对恶意软件分析非常有用。我们将在 解剖 PE 标头 房间中详细了解这些数据。但是,我们可以从 PE 标头中获取以下信息作为概述。
链接库、导入和函数:
PE 文件不包含执行所有任务所需的所有代码。它通常会重用库中的代码,这些库通常由 Microsoft 作为 Windows 操作系统的一部分提供。通常,PE 文件会导入这些库中的某些函数。PE 标头包含有关 PE 文件使用的库以及它从这些库中导入的函数的信息。这些信息非常有用。恶意软件分析师可以查看 PE 文件导入的库和函数,并大致了解恶意软件样本的功能。例如,如果恶意软件样本导入了 CreateProcessA 函数,我们可以假设该样本将创建一个新进程。
同样,其他函数可以提供有关样本的更多信息。但是,必须注意的是,仅通过查看 PE 标头,我们无法知道调用这些函数的上下文。我们需要深入研究这一点,我们将在接下来的内容中介绍。
PEStudio 在右侧窗格中有一个库选项,选择后,它会向我们显示 PE 文件将使用的库。
下面的函数选项显示了从这些库导入的函数。
识别打包的可执行文件:
正如我们目前所见,静态分析会泄露大量可用于对付恶意软件的信息。恶意软件作者认为这是一个问题。因此,他们经常不遗余力地阻止分析。他们这样做的方法之一是将原始样本打包在 shell 类型的代码中,从而混淆实际恶意软件样本的属性。这种技术称为打包,生成的 PE 文件称为打包的 PE 文件。打包大大降低了我们目前所了解的一些恶意软件分析技术的有效性。例如,如果我们尝试在打包的可执行文件中搜索字符串,由于打包,我们可能找不到任何有用的东西。同样,使用 ssdeep 搜索类似样本可能会返回更多使用相同打包程序打包的样本,而不是行为上与目标样本相似的样本。由于恶意软件样本被打包,某些签名也可能被规避。
正如我们将在即将到来的 剖析 PE 标头 房间中看到的那样,我们可以通过分析恶意软件样本的 PE 标头来识别加壳的可执行文件。PE 标头包含重要信息,例如节数、不同节的权限、节的大小等。这些信息可以为我们提供线索,帮助我们识别恶意软件样本是否加壳,如果是,则识别哪种类型的加壳程序加壳了可执行文件。
Conclusion
这就是我们基本的静态分析室。到目前为止,我们已经了解了以下内容:
- 恶意软件分析的实验室设置
- 搜索字符串和混淆字符串
- 使用哈希对恶意软件进行指纹识别并使用 imphash 和 ssdeep 识别类似样本
- 使用基于签名的检测,如 Yara 和 Capa
- 从 PE 标头识别工件