了解如何使用 CAPA 识别恶意功能。
任务1:介绍
分析潜在恶意软件时的挑战之一是,除非我们有沙箱或完全隔离的环境来测试我们想要的一切,否则我们在运行时可能会冒着机器或环境受到损害的风险。
一般来说,有两种类型的分析:动态分析和静态分析。
该房间将重点介绍使用名为 CAPA 的工具进行静态分析。
CAPA(文物通用分析平台)是由 FireEye Mandiant 团队开发的工具。
它旨在识别可执行文件(如可移植可执行文件 (PE)、ELF 二进制文件、.NET 模块、shellcode 甚至沙箱报告)中存在的功能。
它通过分析文件并应用一组描述常见行为的规则来实现这一点,从而允许它确定程序能够做什么,例如网络通信、文件操作、进程注入等等。
CAPA 的美妙之处在于它将多年的逆向工程知识封装到一个自动化工具中,即使是那些可能不是逆向工程专家的人也可以使用它。这对分析师和安全专业人员来说非常有用,使他们能够快速了解潜在恶意软件的功能,而无需手动对代码进行逆向工程。
该工具在恶意软件分析和威胁搜寻中特别有用,其中了解二进制文件的功能对于事件响应和防御措施至关重要。
学习目标
- 探索 CAPA 是什么
- 了解如何有效地使用 CAPA
- 了解使用该工具呈现的常见字段和结果
- 利用该工具识别计划的潜在活动
会议室先决条件
建议熟悉 MITRE ATT&ACK 框架,但在开始课程之前不是强制性的。您可以查看与之关联的房间。
虚拟机
按下面的 启动机器 按钮。
我们将使用与此任务相关的机器内的工具。本机将以分屏视图启动。如果您选择通过远程桌面 (RDP) 访问计算机,您还可以使用以下凭据。
请注意,在此 VM 中,我们安装了 CAPA,因此您可以感受如何运行该工具并进一步试验不同的命令参数。但是,使用附加的 VM 需要很长时间。因此,我们对报告进行了预处理,例如:
- cryptbot.txt
- cryptbot_vv.txt
- cryptbot_vv.json
并将它们放在目录 C:\Users\Administrator\Desktop\capa 下。我们将在这个房间里使用的所有文件几乎都在所述目录中。
任务2:工具概述:CAPA的工作原理
在本任务中,我们将了解如何使用 CAPA。运行该工具就像 1..2..3 一样简单。首先,打开 PowerShell,注意可能需要一段时间才会出现提示。接下来是确保您位于正确的目录 (C:\Users\Administrator\Desktop\capa
);然后你需要运行 capa
or capa.exe
,然后指向二进制文件,就是这样!
在此示例中,我们将使用 cryptbot.bin; 请注意,此文件的结果将在后续任务中讨论。
运行命令后,请等待结果,这可能需要几分钟时间。我们并不打算完成此操作,而是让您感受一下运行该工具的情况,因此我们建议您在 CAPA 运行时继续执行任务或停止处理。还有其他方法可以继续分析结果。请参阅下面的命令。
PS C:\Users\Administrator\Desktop\capa> capa.exe .\cryptbot.bin
loading : 100%|████████████████████| 485/485 [00:00<00:00, 1108.84 rules/s]
/ analyzing program...
除了 为我们提供有关该工具可用参数的更多信息的命令 -h
之外,我们还将使用两 (2) 个最常用的参数,即 -v
和 -vv
,这将为我们提供更详细的结果。但是,这将增加处理时间。在接下来的任务中,我们将讨论这些选项的结果。
选择 | 描述 | 示例语法 |
---|---|---|
| 显示此帮助消息并退出。 |
|
-v 或--verbose | 启用详细结果文档。 | capa.exe .\cryptbot.bin -v |
-vv 或--vverbose | 启用非常详细的结果文档。 | capa.exe .\cryptbot.bin -vv |
这应该是命令的输出。 *请注意,结果可能会有所不同。如果您对某些文件运行 CAPA,它可能会提供也可能不会提供与以下相同的信息。
PS C:\Users\Administrator\Desktop\capa> capa .\cryptbot.bin
┌─────────────┬────────────────────────────────────────────────────────────────────────────────────┐
│ md5 │ 3b9d26d2e7433749f2c32edb13a2b0a2 │
│ sha1 │ 969437df8f4ad08542ce8fc9831fc49a7765b7c5 │
│ sha256 │ ae7bc6b6f6ecb206a7b957e4bb86e0d11845c5b2d9f7a00a482bef63b567ce4c │
│ analysis │ static │
│ os │ windows │
│ format │ pe │
│ arch │ i386 │
│ path │ /home/strategos/Room-CAPA/cryptbot.bin │
└─────────────┴────────────────────────────────────────────────────────────────────────────────────┘
┌──────────────────────┬───────────────────────────────────────────────────────────────────────────┐
│ ATT&CK Tactic │ ATT&CK Technique │
├──────────────────────┼───────────────────────────────────────────────────────────────────────────┤
│ DEFENSE EVASION │ Obfuscated Files or Information [T1027] │
│ │ Obfuscated Files or Information::Indicator Removal from Tools [T1027.005] │
│ │ Virtualization/Sandbox Evasion::System Checks [T1497.001] │
│ DISCOVERY │ File and Directory Discovery [T1083] │
│ EXECUTION │ Command and Scripting Interpreter::PowerShell [T1059.001] │
│ │ Shared Modules [T1129] │
│ IMPACT │ Resource Hijacking [T1496] │
│ PERSISTENCE │ Scheduled Task/Job::At [T1053.002] │
│ │ Scheduled Task/Job::Scheduled Task [T1053.005] │
└──────────────────────┴───────────────────────────────────────────────────────────────────────────┘
┌─────────────────────────────┬────────────────────────────────────────────────────────────────────┐
│ MAEC Category │ MAEC Value │
├─────────────────────────────┼────────────────────────────────────────────────────────────────────┤
│ malware-category │ launcher │
└─────────────────────────────┴────────────────────────────────────────────────────────────────────┘
┌──────────────────────────┬──────────────────────────────────────────────────────────────────────────┐
│ MBC Objective │ MBC Behavior │
├──────────────────────────┼──────────────────────────────────────────────────────────────────────────┤
│ ANTI-BEHAVIORAL ANALYSIS │ Virtual Machine Detection [B0009] │
│ ANTI-STATIC ANALYSIS │ Executable Code Obfuscation::Argument Obfuscation [B0032.020] │
│ │ Executable Code Obfuscation::Stack Strings [B0032.017] │
│ COMMUNICATION │ HTTP Communication [C0002] │
│ │ HTTP Communication::Read Header [C0002.014] │
│ DATA │ Check String [C0019] │
│ │ Encode Data::Base64 [C0026.001] │
│ │ Encode Data::XOR [C0026.002] │
│ DEFENSE EVASION │ Obfuscated Files or Information::Encoding-Standard Algorithm [E1027.m02] │
│ DISCOVERY │ File and Directory Discovery [E1083] │
│ EXECUTION │ Command and Scripting Interpreter [E1059] │
│ FILE SYSTEM │ Create Directory [C0046] │
│ │ Delete File [C0047] │
│ │ Read File [C0051] │
│ │ Writes File [C0052] │
│ MEMORY │ Allocate Memory [C0007] │
│ PROCESS │ Create Process [C0017] │
└──────────────────────────┴──────────────────────────────────────────────────────────────────────────┘
┌──────────────────────────────────────────────────────┬──────────────────────────────────────────────┐
│ Capability │ Namespace │
├──────────────────────────────────────────────────────┼──────────────────────────────────────────────┤
│ reference anti-VM strings │ anti-analysis/anti-vm/vm-detection │
│ reference anti-VM strings targeting VMWare │ anti-analysis/anti-vm/vm-detection │
│ reference anti-VM strings targeting VirtualBox │ anti-analysis/anti-vm/vm-detection │
│ contain obfuscated stackstrings (2 matches) │ anti-analysis/obfuscation/string/stackstring │
│ reference HTTP User-Agent string │ communication/http │
│ check HTTP status code │ communication/http/client │
│ reference Base64 string │ data-manipulation/encoding/base64 │
│ encode data using XOR │ data-manipulation/encoding/xor │
│ contain a thread local storage (.tls) section │ executable/pe/section/tls │
│ get common file path │ host-interaction/file-system │
│ create directory │ host-interaction/file-system/create │
│ delete file │ host-interaction/file-system/delete │
│ read file on Windows (4 matches) │ host-interaction/file-system/read │
│ write file on Windows (5 matches) │ host-interaction/file-system/write │
│ get thread local storage value │ host-interaction/process │
│ create process on Windows │ host-interaction/process/create │
│ allocate or change RWX memory │ host-interaction/process/inject │
│ reference cryptocurrency strings │ impact/cryptocurrency │
│ link function at runtime on Windows (5 matches) │ linking/runtime-linking │
│ parse PE header (4 matches) │ load-code/pe │
│ resolve function by parsing PE exports (186 matches) │ load-code/pe │
│ run PowerShell expression │ load-code/powershell/ │
│ schedule task via at │ persistence/scheduled-tasks │
│ schedule task via schtasks │ persistence/scheduled-tasks │
└──────────────────────────────────────────────────────┴──────────────────────────────────────────────┘
由于我们知道处理时间需要几分钟,因此我们已将其预处理为位于 C:\Users\Administrator\Desktop\capa 中的名为 cryptbot.txt 的文件。同时,这已经附加到这项任务中;只需单击此任务右上角的按钮
。打开另一个 PowerShell 终端并使用命令 Get-Content cryptbot.txt
PS C:\Users\Administrator\Desktop\capa> Get-Content .\cryptbot.txt
将内容加载到 PowerShell 将提供与上述终端相同的输出。
所以,就是这样!我们完成了!
但是等等,这些结果是什么?我们该如何解释呢?
任务3:剖析 CAPA结果第1部分:一般信息、MITRE和 MAEC
如上一个任务中所述,针对 CAPA 运行 CAPA 的结果cryptbot.bin将在后续任务中讨论。因此,我们将剖析每个块和主题的结果。
第一个块包含有关文件的基本信息。这包括以下内容:
- 加密算法,例如 、 和 .
md5
sha1/256
- 该字段告诉我们 CAPA 如何对文件执行分析。
analysis
- 该字段显示已识别功能适用的操作系统 (OS) 上下文。
os
- 该字段允许我们确定我们是否正在处理与 x86 架构相关的二进制文件。
arch
- 分析文件所在的位置。
path
┌─────────────┬────────────────────────────────────────────────────────────────────────────────────┐
│ md5 │ 3b9d26d2e7433749f2c32edb13a2b0a2 │
│ sha1 │ 969437df8f4ad08542ce8fc9831fc49a7765b7c5 │
│ sha256 │ ae7bc6b6f6ecb206a7b957e4bb86e0d11845c5b2d9f7a00a482bef63b567ce4c │
│ analysis │ static │
│ os │ windows │
│ format │ pe │
│ arch │ i386 │
│ path │ /home/strategos/Room-CAPA/cryptbot.bin │
└─────────────┴────────────────────────────────────────────────────────────────────────────────────┘
主教ATT&CK
MITRE ATT&CK(Adversarial Tactics, Techniques, and Common Knowledge)框架是一个全面的全球知识库,它详细记录了威胁行为者在网络攻击的每个阶段采用的策略和技术。它充当战略手册,提供对攻击者方法的详细见解,从获得初始访问权限到保持存在、提升权限、规避防御、在网络内横向移动等等。
CAPA 将此格式用于输出。请注意,某些结果可能包含也可能不包含 Technique 和 Sub-technique Identifier。
在 CAPA 的最终输出中,他们引用了 MITRE 框架。这有助于分析师或防御者将文件的行为映射到攻击者的 playbook,这有助于缩小事件期间的调查范围。要更深入地了解此主题,您可能需要查看我们的 MITRE ATT&CK 框架室。
MAEC 公司
(Malware Attribute Enumeration and Characterization)恶意软件属性枚举和特征描述是一种专用语言,旨在编码和传达有关恶意软件的复杂细节。它包含广泛的属性,包括行为、伪影和各种恶意软件实例之间的互连。这种语言用作跟踪和分析恶意软件的复杂性的标准化系统。
┌─────────────────────────────┬────────────────────────────────────────────────────────────────────┐
│ MAEC Category │ MAEC Value │
├─────────────────────────────┼────────────────────────────────────────────────────────────────────┤
│ malware-category │ launcher │
└─────────────────────────────┴────────────────────────────────────────────────────────────────────┘
让我们看看下表,看看 CAPA 最常用的 MAEC 值:Downloader 和 Launcher。
MAEC 值 | 描述 |
---|---|
发射 | 表现出触发特定操作的行为,类似于恶意软件行为。 |
下载器 | 表现出下载和执行其他文件的行为,通常出现在更复杂的恶意软件上。 |
当 CAPA 使用“启动器”MAEC 值标记文件时,它表示该文件表现出类似于但不限于以下的行为:
- 丢弃其他负载
- 激活持久性机制
- 连接到命令和控制 (C2) 服务器
- 执行特定功能
这很有趣!其中一些行为也存在于恶意软件行为目录 (MBC) 和功能块中,我们将在下一个任务中讨论!
此外,当 CAPA 使用 “Downloader” MAEC 值标记文件时,它表示该文件表现出类似于但不限于以下的行为:
- 从 Internet 获取其他有效负载或资源
- 拉取更新
- 执行辅助阶段
- 检索配置文件
这些答案上面都有
任务4:剖析 CAPA结果第2部分:恶意软件行为目录
在此任务中,我们将涵盖以下主题:
- MBC 公司
- 目的
- 微目标
- MBC 公司行为
- 微行为
- 方法
让我们继续下一个块。这个终端也可以从任务 2 中看到,我们在其中运行 CAPA 工具。单击下面的视图终端。
View 终端
我们将处理恶意软件行为目录,以更好地了解上述阻止。
恶意软件行为目录 (MBC))
MBC 旨在支持恶意软件分析的各个方面,例如标记、相似性分析和标准化报告。从本质上讲,它充当恶意软件目标和行为的目录。MBC 还可以链接到 ATT&CK 方法,并记录在恶意软件分析过程中发现的所有行为和代码特征。需要注意的是,MBC 行为的名称可能与相应的 ATT&CK 技术匹配,也可能不匹配。行为页面上的信息补充了 ATT&CK 页面上的内容。换句话说,在记录恶意软件行为时,MBC 用户会引用 ATT&CK,但 MBC 不会复制 ATT&CK 信息。
下面的 MBC 内容可以用两种格式表示。
格式 | 样本 | 解释 |
---|---|---|
OBJECTIVE::Behavior::Method[标识符] | ANTI-STATIC ANALYSIS::可执行代码混淆::参数混淆 [B0032.020] | 防静电分析 = OBJECTIVE 可执行代码混淆 = BEHAVIOR 参数混淆 = METHOD BOO32.020 = 标识符 |
OBJECTIVE::Behavior::[标识符] | COMMUNICATION::HTTP Communication::[C0002] | 通信 = 客观 HTTP 通信 = 行为 C0002 = 标识符 |
这两种格式之间的区别在于,第一种格式包含称为 METHOD 的附加详细信息,它也可以作为子技术创造。
我们还必须讨论 Objective, Behavior, 和 Methods 以更好地理解这部分。
目的Objective
Objective 基于恶意软件行为背景下的 ATT&CK 策略,但并未包括所有内容。此外,MBC 具有反行为和防静电分析功能。这些目标是为恶意软件分析量身定制的,其用例是描述恶意软件的特征。请参阅下表,了解每种方法的解释。
目的 | 解释 |
---|---|
反行为分析 | 恶意软件试图通过使用沙盒或调试器等工具阻碍行为分析来逃避检测。 |
防静电分析 | 恶意软件试图阻碍静态分析或增加静态分析的复杂性,使安全专业人员更难识别和理解其恶意行为和意图。 |
收集 | 恶意软件侧重于识别和收集来自目标计算机或网络的信息。 |
命令和控制 | 恶意软件通常通过各种方法(例如命令和控制服务器、点对点网络或其他方式)与受感染的系统建立通信。这种通信允许恶意软件控制受感染的系统,使攻击者能够执行命令、泄露数据或执行其他恶意活动。 |
凭证访问 | 恶意软件的主要目的是窃取帐户凭据,例如用户名和密码。 |
防御闪避 | 该恶意软件旨在绕过和规避系统中存在的各种检测和安全机制,以避免被检测或缓解。 |
查看更多目标
微目标Micro-Objective
微目标与微行为相关联,微行为是指潜在恶意软件所采取的一个或多个操作,这些操作不一定是恶意的,并且可能服务于各种目标。示例二进制文件例如消息应用程序中的二进制文件。但是,重要的是要注意这些行为通常是滥用的。 这就是 CAPA 可能标记这种行为的原因。
微目标 | 描述 |
---|---|
过程 | 展示与进程相关的行为,例如但不限于创建进程、设置线程上下文、终止进程和检查互斥体。 |
记忆 | 表现出的行为,包括但不限于分配内存、更改内存保护和释放内存。 |
通信 | 表现出诸如(不限于(DNS、FTP、HTTP、ICMP、SMTP)网络流量等行为。 |
数据 | 展示行为,例如但不限于检查字符串、压缩、解码和编码数据 |
CAPA、Objective 和 Micro-Objective 的最终输出仅显示在 Objective 列下。
MBC 公司行为Micro-Behavior
MBC Behaviors 列包含行为和微行为,其中没有其方法和标识符。请查看链接 MBC 摘要 以获取所有 MBC 内容的列表。
以下是 Behaviors/Micro-behaviors 及其标识符的编译版本。
目的 | 行为 | 标识符 | 解释 |
---|---|---|---|
反行为分析 | 虚拟机检测 | 编号 B0009 | 恶意软件检查它是否在虚拟环境中运行。在系统侦查期间,恶意软件会检查各种用户和系统工件。 |
防静电分析 | 可执行代码混淆 | 编号 B0032 | 可执行代码已被故意遮挡,以防止静态代码分析。这是与恶意软件样本的可执行代码相关的特定行为,包括其 data 和 text 部分。 |
执行 | 命令和脚本解释器 | 编号 E1059 | 恶意软件可以利用命令和脚本解释器来运行恶意命令、脚本或二进制文件。它面向内置解释器,如 Windows 上的 cmd.exe 或 PowerShell,或类 Unix 系统上的 Bash。攻击者还可能使用其他脚本语言,如 Python、Perl 或 JavaScript。 |
发现 | 文件和目录发现 | 编号 E1083 | 恶意软件能够通过枚举文件和目录来搜索特定位置的特定文件。 |
防静电分析、防御规避 | 模糊处理的文件或信息 | 编号 E1027 | 恶意软件可以通过编码、加密或其他方式对文件或信息进行混淆,使其难以分析。它还可以自行编码或加密恶意软件样本。 |
微行为Micro-Behavior
恶意软件分析中的术语“低级行为”是指恶意软件表现出的操作,这些操作不一定是恶意的,并且可能服务于各种目标。这些行为通常在恶意软件行为特征 (MBC) 分析中记录为“微行为”。此类低级行为的示例包括创建 TCP 套接字和评估字符串中的特定条件。请务必注意,仅仅因为行为被归类为低级并不意味着它是无害的,因为它可能仍然是更大的恶意计划的一部分。
微目标 | 微行为 | 标识符 | 解释 |
---|---|---|---|
记忆 | 分配内存 | 编号: C0007 | 恶意软件经常利用内存分配作为其策略的一部分来解压缩自身并执行其恶意活动。 |
过程 | 创建流程 | 编号: C0017 | 恶意软件通过 WMI 或 shellcode 创建进程。它还可以创建挂起的进程。 |
通信 | HTTP 协议通信 | 编号: C0002 | 恶意软件能够启动 HTTP 通信。 |
数据 | 检查字符串 | 编号: C0019 | 恶意软件可以检查字符串以识别特定特征,例如 ASCII 内容、信用卡号和字符串长度。 |
查看更多表格
数据 | 对数据进行编码 | 编号: C0026 | 恶意软件能够使用 base64 和 XOR 对数据进行编码。 |
文件系统 | 创建目录 | 编号: C0046 | 恶意软件可以创建目录。 |
文件系统 | 删除文件 | 编号: C0047 | 恶意软件具有删除文件的功能。 |
文件系统 | 读取文件 | 编号: C0051 | 恶意软件可以读取文件。 |
文件系统 | 写入文件 | 编号: C0052 | 恶意软件具有写入文件的能力。 |
请注意,在 CAPA 的最终输出中,Behavior 和 Micro-Behavior 仅显示在 Behavior 列下。
方法Methods
最后,我们来检查 METHODS.以下是上一个示例的结果中包含的一些方法。方法与行为相关联;因此,要完整查看所有方法,请参阅感兴趣的每个特定行为/微观行为。
行为 | 方法或子技术 | 标识符 | 解释 |
---|---|---|---|
可执行代码混淆 | 参数混淆 | 编号 B0032.020 | API 调用的简单数字或字符串参数是在运行时计算的,这使得分析更加困难。 |
可执行代码混淆 | 堆栈字符串 | 编号: B0032.017 | 每次使用时在堆栈上构建和解密字符串,然后丢弃以避免明显的引用。 |
HTTP 协议通信 | 读取标头 | 编号: C0002.014 | HTTP 读取标头。 |
对数据进行编码 | 基地 64 | 编号: C0026.001 | 恶意软件可能会使用 Base64 对数据进行编码。 |
对数据进行编码 | 异或 | 编号: C0026.002 | 恶意软件可能会使用 XOR 对数据进行编码。 |
模糊处理的文件或信息 | 编码标准算法 | 编号 E1027.m02 | 对恶意软件样本、文件或其他信息进行编码使用标准算法(例如 base64)。 |
现在我们已经对 MBC 的内容有了很好的概述和理解,我们应该能够解释上一个示例的结果。因此,让我们使用其中一个结果进行快速回顾。好吗?
┌─────────────────────────────┬──────────────────────────────────┐
│ MBC Objective │ MBC Behavior │
├─────────────────────────────┼──────────────────────────────────┤
| DATA │ Encode Data::Base64 [C0026.001] │
└─────────────────────────────┴──────────────────────────────────┘
以下是对上述结果的解释。请参阅下表。
标签 | 价值 | 解释 |
---|---|---|
MBC 公司目的 | 数据 | 展示行为,包括但不限于检查字符串、压缩、解码和编码数据。 |
MBC 公司行为 | 对数据进行编码 | 恶意软件能够使用 base64 和 XOR 对数据进行编码。 |
方法 | 基地 64 | 恶意软件可能会使用 Base64 对数据进行编码。 |
标识符 | 编号: C0026.001 | identifier 中继有关行为的信息。这也用作标签。 |
知道了这些信息,你可以简单地说这个文件可以使用 base64 编码方案!
任务5:剖析 CAPA结果第3部分:命名空间
我们将讨论分为两个主要主题:能力和命名空间。 在本任务中,我们将重点介绍 Namespace 的讨论。
您将在下面找到输出。请注意,这也可以在任务 2 中查看。单击下面的 View Terminal。capa.exe
┌──────────────────────────────────────────────────────┬──────────────────────────────────────────────────────┐
│ Capability │ Namespace │
├──────────────────────────────────────────────────────┼──────────────────────────────────────────────────────┤
│ reference anti-VM strings │ anti-analysis/anti-vm/vm-detection │
│ reference anti-VM strings targeting VMWare │ anti-analysis/anti-vm/vm-detection │
│ reference anti-VM strings targeting VirtualBox │ anti-analysis/anti-vm/vm-detection │
│ contain obfuscated stackstrings (2 matches) │ anti-analysis/obfuscation/string/stackstring │
│ reference HTTP User-Agent string │ communication/http │
│ check HTTP status code │ communication/http/client │
│ reference Base64 string │ data-manipulation/encoding/base64 │
│ encode data using XOR │ data-manipulation/encoding/xor │
│ contain a thread local storage (.tls) section │ executable/pe/section/tls │
│ get common file path │ host-interaction/file-system │
│ create directory │ host-interaction/file-system/create │
│ delete file │ host-interaction/file-system/delete │
│ read file on Windows (4 matches) │ host-interaction/file-system/read │
│ write file on Windows (5 matches) │ host-interaction/file-system/write │
│ get thread local storage value │ host-interaction/process │
│ create process on Windows │ host-interaction/process/create │
│ allocate or change RWX memory │ host-interaction/process/inject │
│ reference cryptocurrency strings │ impact/cryptocurrency │
│ link function at runtime on Windows (5 matches) │ linking/runtime-linking │
│ parse PE header (4 matches) │ load-code/pe │
│ resolve function by parsing PE exports (186 matches) │ load-code/pe │
│ run PowerShell expression │ load-code/powershell/ │
│ schedule task via at │ persistence/scheduled-tasks │
│ schedule task via schtasks │ persistence/scheduled-tasks │
└──────────────────────────────────────────────────────┴──────────────────────────────────────────────────────┘
此块的内容以以下格式表示。
格式 | 样本 | 解释 |
---|---|---|
capability(规则名称)::TLN(top-level namespace)/namespace | 引用 anti-VM 字符串::Anti-Analysis/anti-vm/vm-detection | 引用 anti-VM 字符串 = 功能(规则名称) Anti-Analysis = TLN 或顶级命名空间 anti-vm/vm-detection = 命名空间 |
命名空间
CAPA 使用命名空间对具有相同目的的项目进行分组。
顶级命名空间 (TLN) | 解释 |
---|---|
反分析 | 包含一组专门设计用于检测恶意软件表现出的行为以逃避分析的规则。这些行为包括混淆、打包和反调试技术。 |
收集 | 包含一组与数据相关的规则,恶意软件可能会枚举和收集这些规则以用于外泄或其他目的。将其视为恶意软件行为的“数据收集”方面。 |
通信 | 包含一组与恶意软件演示的不同通信行为相关的规则。这包括恶意软件如何与网络交互,包括数据传输和接收、命令和控制通信以及其他与网络相关的行为。 |
编译器 | 包含一组规则和配置,用于识别用于生成可执行文件的特定构建环境或编译器。这些命名空间本质上是标识程序编译过程的唯一“签名”。 |
数据操作 | 包含一组规则,这些规则控制更改可执行文件中的数据所涉及的行为。这方面可以被视为恶意软件行为的“数据转换”组件,包括字符串加密和数据编码等操作。 |
查看更多表格
让我们通过查看下表来了解其工作原理。
顶级命名空间 (TLN) | 命名空间 | 规则 YAML 文件 | 解释 |
---|---|---|---|
反分析 | 防 VM/VM 检测 | reference-anti-vm-strings-targeting-virtualbox.yml reference-anti-vm-strings-targeting-virtualpc.yml | “anti-vm/vm-detection” 命名空间包含用于检测虚拟机 (VM) 环境的规则。这些规则侧重于识别恶意软件通常用于检测运行时 VM 的特定字符串或模式。使用这些规则,CAPA 可以识别恶意软件是否搜索特定于 VMware 的注册表项、是否存在 VMware 工具或其他与 VM 相关的元素。 |
混淆 | obfuscated-with-dotfuscator.yml obfuscated-with-smartassembly.yml | 恶意软件通常使用混淆技术使分析更加困难。这些方法包括字符串加密、代码混淆、打包和反调试技巧等方法。模糊处理命名空间解决了这些隐藏或模糊代码真正用途的技术。 |
为此,我们只使用 Anti-Analysis 作为 TLN 或 Top-Level Namespace。在这个 TLN 下,我们进行了分组命名空间,例如 anti-vm/vm-detection 和 obfuscation。每个命名空间内部都有一个规则集合,这些规则也分组在一起。对于 anti-vm/vm-detection,我们有规则,它是配置文件,例如:
- reference-anti-vm 的 -strings-targeting-virtualbox.yml
- reference-anti-vm-strings-targeting-virtualpc.ym l
混淆命名空间也是如此。我们有分组的规则,例如:
- obfuscated-with-dotfuscator.yml
- obfuscated-with-smartassembly.yml
同样,请注意,这仍处于 TLN 反分析下!
另请参阅下图。
除了上表提到的,Anti-Analysis 下还有几个命名空间和相应的规则。如果您想更深入地了解,请查看此链接。
如果您对其他 TLN 或顶级命名空间(如集合、编译器、持久性、链接和影响)感兴趣,请使用此链接。
任务6:剖析 CAPA结果第4部分:能力
在此任务中,我们将继续上一个任务的讨论。
能力
下表列出了 Capability 及其相关的 TLN、命名空间以及与 yaml 文件关联的规则。请好好看看。
能力 | 顶级命名空间 (TLN) | 命名空间 | 规则 YAML 文件 | 笔记 |
---|---|---|---|---|
引用反 VM 字符串 | 反分析 | 防 VM/VM 检测 | reference-anti-vm 的 -strings.yml | 要检查此命名空间下的所有规则,请单击此处 |
引用以 VMWare 为目标的反 VM 字符串 | 反分析 | 防 VM/VM 检测 | reference-anti-vm 的 -strings-targeting-vmware.yml | 要检查此命名空间下的所有规则,请单击此处 |
引用针对 VirtualBox 的反 VM 字符串 | 反分析 | 防 VM/VM 检测 | reference-anti-vm 的 -strings-targeting-virtualbox.yml | 您可以查看 TLN(Top-Level Namespace)。 |
引用 HTTP User-Agent 字符串 | 通信 | http/客户端 | reference-http -user-agent-string.yml | 要检查此命名空间下的所有规则,请单击此处) |
检查 HTTP 状态码 | 通信 | http | check-http -status-code.yml | 要检查此命名空间下的所有规则,请单击此处 |
查看更多功能
引用 Base64 字符串 | 数据操作 | 编码/base64 | reference-base64-string.yml | 要检查此命名空间下的所有规则,请单击此处 |
使用 XOR 对数据进行编码 | 数据操作 | 编码/XOR | encode-data-using-x或中.yml | 要检查此命名空间下的所有规则,请单击此处 |
包含线程本地存储 (.tls) 部分 | 可执行 | PE/部分/TLS | contain-a-thread-local-storage-tls-section.yml | 你可以查看 TLN(Top-Level Namespace) 了解更多规则。 |
获取常用文件路径 | 主机交互 | 文件系统 | get-common-file-path.yml | 你可以查看 TLN(Top-Level Namespace) 了解更多规则。 |
创建目录 | 主机交互 | 文件系统/create | create-directory.yml | 你可以查看 TLN(Top-Level Namespace) 了解更多规则。 |
删除文件 | 主机交互 | 文件系统/删除 | delete-file.yml | 要检查此命名空间下的所有规则,请单击此处 |
在 Windows 上读取文件 | 主机交互 | 文件系统/读取 | read-file-on-windows.yml | 要检查此命名空间下的所有规则,请单击此处 |
在 Windows 上写入文件 | 主机交互 | 文件系统/写入 | write-file-on-windows.yml | 要检查此命名空间下的所有规则,请单击此处 |
获取线程本地存储值 | 主机交互 | 过程 | get-thread-local-storage-value.yml | 这条规则位于 TLN Nursery 下,这是未经打磨的规则的集结地。 |
分配或更改 RWX 内存 | 主机交互 | 处理/注入 | allocate-or-change-rwx-memory.yml | 要检查此命名空间下的所有规则,请单击此处 |
在 Windows 上创建进程 | 主机交互 | 进程创建 | create-process-on-windows.yml | 要检查此命名空间下的所有规则,请单击此处 |
引用加密货币字符串 | 冲击 | 影响/加密货币 | reference-cryptocurrency-strings.yml | 这条规则位于 TLN Nursery 下,这是未经打磨的规则的集结地。 |
在 Windows 运行时的 link 函数 | 连接 | 运行时链接 | link-function-at-runtime-on-windows.yml | 要检查此命名空间下的所有规则,请单击此处 |
parse PE 标头 | 加载代码 | 加载代码/PE | parse-pe-header.yml resolve-function-by-parsing-pe-exports.yml | 要检查此命名空间下的所有规则,请单击此处 |
解析函数 | 加载代码 | 加载代码/PE | 解析函数 pe-exports.yml | 要检查此命名空间下的所有规则,请单击此处 |
运行 PowerShell 表达式 | 加载代码 | 加载代码/PowerShell | 运行 PowerShell -expression.yml | 要检查此命名空间下的所有规则,请单击此处 |
通过 AT 安排任务 | 坚持 | 计划任务 | schedule-task-via-at.yml | 你可以查看 TLN(Top-Level Namespace) 了解更多规则。 |
通过 SCHTASKS 安排任务 | 坚持 | 计划任务 | schedule-task-via-schtasks.yml | 你可以查看 TLN(Top-Level Namespace) 了解更多规则。 |
为了进一步解释这一点,我们来检查一下表中的第一个功能,“引用反 VM 字符串”。
- 我们注意到 YML 格式的相关规则是 reference-anti-vm-strings.yml
- 这位于命名空间 anti-vm/vm-detection 下
- 它也位于 Top-Level Namespace Anti-Analysis 下
这告诉我们,CAPA 能够通过使用 reference-anti-vm-strings.yml 规则 yaml 文件来识别潜在的恶意软件搜索特定于 VMware 的注册表项、是否存在 VMware 工具或其他与 相关的元素。恶意软件通常会执行此行为以避免被发现。这就是 CAPA 标记这个的原因。
让我们再举一个例子。让我们看看 “Schedule task via schtasks”。
- 我们注意到 YML 格式的相关规则是 schedule-task-via-schtasks.yml*
- 它位于命名空间 scheduled-tasks 下
- 它也在 Top-Level Namespace 持久性下
这告诉我们 CAPA 可以识别与 Windows 操作系统中的计划任务相关的行为。它可能已识别出指示可执行文件将自身注册为计划任务的模式,以使用 schedule-task-via-schtasks.yml 中定义的规则保持持久性。
坚持!你注意到什么了吗?
没错!Capability 下的项与 Rules 下的 YML 文件同名,只是在空格之间添加了一个破折号 (-) 字符!简单,因为 Capability 是规则的名称。
现在,我们想注意这里的一些例外情况。如果 Capability 或 rules 不在其 Namespace 下,让我们从上表中获取 Capability 引用加密货币字符串;这应该在 Impact Top-Level Namespace 下,对吧?但是,如果您浏览这些文件夹,将无法找到相应的规则。它将位于托儿所 TLN 下。这是尚未完全完善的规则的占位符。
现在,我们已经很好地概述了和理解了 Capability 和 Namespace 内容,我们应该能够解释前面任务的示例结果。因此,让我们使用其中一个结果进行快速回顾。好吗?
┌───────────────────────────────────────────┬───────────────────────────────────────────┐
│ Capability │ Namespace │
├───────────────────────────────────────────┼───────────────────────────────────────────┤
│ reference Base64 string │ data-manipulation/encoding/base64 │
└───────────────────────────────────────────┴───────────────────────────────────────────┘
以下是对上述结果的解释。请参阅下表。
标签 | 价值 | 解释 |
---|---|---|
能力 | 引用 base64 字符串 | 恶意软件能够使用 base64 方案对数据进行编码。 |
顶级命名空间 | 数据操作 | 包含一组规则,这些规则控制更改可执行文件中的数据所涉及的行为。这方面可以被视为恶意软件行为的“数据转换”组件,包括字符串加密和数据编码等操作。 |
Namespace | 编码/base64 | 此命名空间由使用 Base64 和 XOR 对数据进行编码和解码的规则组成 |
规则 YAML 文件匹配? | reference-base64-string.yml | 请记住,功能的名称也是规则的名称,并在空格之间附加一个短划线 (-) 字符。 |
知道了这些信息,你可能会说这个文件可以用 base64 编码方案了!
现在,我们已经完成了对上一个任务的样本运行结果的剖析!
任务7:更多信息,更多乐趣!
您难道不想知道规则中究竟匹配了什么吗?嗯,我是!
在此任务中,我们将寻求确定触发规则的原因和所涉及的条件。我们将使用参数 或 **very verbose** 来实现这一点。-vv
选择 | 描述 | 示例语法 |
---|---|---|
-v 或--verbose | 启用详细结果文档 | capa.exe -v .\cryptbot.bin |
-vv 或--vverbose | 启用非常详细的结果文档) | capa.exe -vv .\cryptbot.bin |
让我们运行它!
PS C:\Users\Administrator\Desktop\capa> capa -vv .\cryptbot.bin
loading : 100%|████████████████████| 485/485 [00:00<00:00, 1108.84 rules/s]
/ analyzing program...
这将为我们提供更详细的结果;但是,这将花费大量时间。我们已经处理了此文件,并在 “” 中命名了该文件。请记住,您无需等待工具完成运行;我们这样做是为了让您感受一下运行该工具并试验其参数。cryptbot_vv.txt
C:\Users\Administrator\Desktop\capa
打开另一个 PowerShell 终端,并使用命令 .Get-Content cryptbot_vv.txt
PS C:\Users\Administrator\Desktop\capa> Get-Content .\cryptbot_vv.txt
那么,您打开文件了吗?你有没有三千多行类似的代码?
使用终端或文本编辑器访问如此大量的信息将具有挑战性。
为了轻松分析此结果,我们需要做两件事。首先,我们将使用参数 and ,并将结果定向到 .json 文件。命令将是 -j
-vv
capa.bin -j -vv .\cryptbot.bin > cryptbot_vv.json
PS C:\Users\Administrator\Desktop\capa> capa.bin -j -vv .\cryptbot.bin > cryptbot_vv.json
loading : 100%|████████████████████| 485/485 [00:00<00:00, 1108.84 rules/s]
/ analyzing program...
同样,这将花费大量时间,类似于我们之前运行的命令。我们已经对此进行了处理,并在 “C:\Users\Administrator\Desktop\capa” 中创建了一个名为 cryptbot_vv.json 的文件。此外,我们还将文件附加到此任务中。请记住,您无需等待工具完成运行;我们这样做是为了让您感受一下运行该工具并试验其参数。
我们可以从下一步开始。
CAPA Web 浏览器
我们需要做的第二件事是将文件上传到 CAPA Explorer Web。我们可以在此链接上使用他们的在线版本,也可以使用虚拟机中已有的离线版本。桌面上有一个名为 capa_web_explorer_offline.html 的 Google Chrome 浏览器。或者,您可以使用常规的 Chrome 浏览器书签来访问它。请注意,本地页面可能需要长达一分钟的时间才能在目标计算机上的 Chrome 中加载。
现在,我们应该可以访问主页了!
查找位于页面左下角的 按钮,然后在 C:\Users\Administrator\Desktop\capa 中选择文件 。上传后,您应该有类似的输出。
这看起来不是很好,更容易使用吗?我敢打赌!
现在,是时候探索该工具的这个出色的补充了。我们将回顾一些功能,并检查规则中准确匹配的内容。这将使我们更好地了解规则的工作原理。
让我们看一下下面的第一个例子。我们知道该功能是引用针对 VMWare 的 anti-VM 字符串,对应的规则配置文件或 yaml 文件是 anti-VM-Strings-targeting-VMWare.yml。 请注意图像中的框。
然后,让我们向您展示规则内容的概述。请关注这些功能,因为 CAPA 会使用下面的后续字符串来检查字符串是否在分析的文件中。
查看规则
你看到了吗?没错!在这些功能下,CAPA Web Explorer 引用了“字符串:/VMWare/i”。简单地说,CAPA 就是说,在这个命名空间下,我们可以通过使用规则中的条件和正则表达式来识别值为 VMWare 的字符串。
让我们再举一个例子。 我们知道该功能是通过 schtasks 引用计划任务,相应的规则是通过 schtasks.yml 计划任务。 请注意图像中的框。
这同样适用于我们的第一个例子;我们将向您展示规则的内容概述。请关注功能,因为 CAPA 会使用下面的后续字符串来检查正在分析的文件中是否有字符串。
ule:
meta:
name: schedule task via schtasks
namespace: persistence/scheduled-tasks
authors:
- [email protected]
scopes:
static: function
dynamic: thread
att&ck:
- Persistence::Scheduled Task/Job::Scheduled Task [T1053.005]
examples:
- 79cde1aa711e321b4939805d27e160be:0x401440
features:
- and:
- match: host-interaction/process/create
- or:
- and:
- string: /schtasks/i
- string: /\/create /i
- string: /Register-ScheduledTask /i
在该功能下,CAPA Web Explorer 引用了 “string: /schtasks/i and /\/create /i”。简单地说,CAPA 就是在这个命名空间下,通过使用规则中的条件和正则表达式,我们可以识别值为 schtasks 的字符串并创建 .
全局搜索框
该工具的另一个很酷的功能是它的过滤器选项和全局搜索框,这非常有用。
任务8:结论
在这个房间里,我们讨论了如何利用 CAPA 并通过分析潜在的恶意或危险软件并使用静态分析主动搜索潜在威胁,并在网络安全中发挥关键作用。它通过自动化检测可执行文件中复杂功能的过程并以易于理解的格式为安全专家呈现结果来实现这一目标。这种对复杂逆向工程概念的简化有助于快速理解可能有害的软件,最终加强事件响应和防御策略。