博文系列:Cobalt Strike:解密流量
- Cobalt Strike:使用已知私钥解密流量 - 第 1 部分
- Cobalt Strike:使用已知私钥解密流量 - 第 2 部分
- Cobalt Strike:使用进程内存解密流量 - 第 3 部分
- Cobalt Strike:解密混淆流量 - 第 4 部分
- Cobalt Strike:解密 DNS 流量——第 5 部分
- Cobalt Strike:内存转储 - 第 6 部分(当前)
- Cobalt Strike:概述 – 第 7 部分
这是创建和分析 Cobalt Strike 信标的内存转储的不同方法的概述。
本系列博文介绍了解密 Cobalt Strike 流量的不同方法。在 本系列的第 1 部分中,我们揭示了在恶意 Cobalt Strike 包中发现的私有加密密钥。在 第 2 部分中,我们从 RSA 私钥开始解密 Cobalt Strike 流量。在 第 3 部分中,如果您不知道私有 RSA 密钥但确实有进程内存转储,我们将解释如何解密 Cobalt Strike 流量。在 第 4 部分中,我们处理使用可塑性 C2 数据转换混淆的流量。在 第 5 部分中,我们处理 Cobalt Strike DNS 流量。
对于之前博客文章中讨论的一些 Cobalt Strike 分析方法,进行内存转储很有用:系统 RAM 的内存转储,或托管 Cobalt Strike 信标的进程的进程内存转储。
我们概述了制作和/或使用内存转储的不同方法。
完整的系统内存转储
有几种方法可以获得 Windows 机器的完整系统内存转储。由于这些方法大多涉及商业软件,我们不会详细介绍获取完整内存转储的细节。
当您有一个未压缩的完整系统内存转储时,首先要检查的是内存中是否存在 Cobalt Strike 信标。这可以使用工具1768.py来完成,该工具用于提取和分析 Cobalt Strike 信标的配置。确保使用 64 位版本的 Python,因为未压缩的完整内存转储很大。
发出以下命令:
1768.py -r 内存转储
例子: 
图 1:在完整的系统内存转储上使用 1768.py 在这个例子中,我们很幸运:1768.py 不仅检测到信标配置的存在,而且该配置也包含在单个内存页面中。这就是我们获得完整配置的原因。通常,配置会重叠内存页面,然后您会得到部分结果,有时甚至是 Python 错误。但是我们从这个命令中得到的最重要的信息是,系统上运行了一个信标,我们对其进行了完整的内存转储。
假设我们的命令产生了部分结果。然后,为了获得完整的配置,我们必须做的是使用Volatility生成托管信标的进程的进程内存转储。由于我们不知道哪个进程托管信标,我们将为所有进程创建进程内存转储。
我们使用以下命令执行此操作:
vol.exe -f memorydump -o procdumps windows.memmap.Memmap -dump
例子: 
图 2:使用 Volatility 提取进程内存转储 - 命令开始 
图 3:使用 Volatility 提取进程内存转储 - 命令结束
procdumps 是将写入所有进程内存转储的文件夹。
此命令需要一些时间才能完成,具体取决于内存转储的大小和进程数。
命令完成后,我们再次使用工具 1768.py 来分析每个进程转储: 
图 4:使用 1768.py 分析所有提取的进程内存转储 - 命令开始 
图 4:使用 1768.py 分析所有提取的进程内存转储 - 检测进程 ID 2760 我们看到文件 pid.2760.dmp 包含一个信标配置:这意味着进程 ID 为 2760 的进程托管一个信标。如果我们需要提取更多信息,例如加密密钥,我们可以使用此进程内存转储(请参阅本系列的博客文章 3 )。
进程内存转储
存在不同的方法来获取 Windows 机器上的进程内存转储。我们将解释几种不需要商业软件的方法。
任务管理器
可以使用内置的 Windows 任务管理器进行完整的进程内存转储。 这样的进程内存转储包含所选进程的所有进程内存。
要使用此方法,您必须知道哪个进程正在托管信标。然后在任务管理器中选择这个进程,右键,选择“创建转储文件”: 
图 6:任务管理器:选择托管信标的进程 
图 7:创建一个完整的进程内存转储
进程内存转储将被写入临时文件夹: 
图 8:进程内存转储完成后的任务管理器对话框 
Sysinternals 的 Process Explorer
Process Explorer可以进行进程内存转储,就像任务管理器一样。选择托管信标的进程,右键单击并选择“创建转储/创建完整转储”。 
图 10:使用 Process Explorer 创建完整的进程内存转储 不要选择“Create Minidump”,因为使用此选项创建的进程内存转储不包含进程内存。
使用 Process Explorer,您可以选择保存转储的位置: 
图 12:使用 Process Explorer,您可以选择保存转储文件的位置
Sysinternals 的 ProcDump
ProcDump是一个从命令行创建进程内存转储的工具。您为它提供一个进程名称或进程 ID,它会创建一个转储。确保使用选项 -ma 创建完整的进程内存转储,否则转储将不包含进程内存。 
图 12:使用 procdump 创建一个完整的进程内存转储
使用 ProcDump,将转储写入当前目录。
使用进程内存转储
与完整系统内存转储一样,工具1768.py可用于分析进程内存转储并提取信标配置。 如本系列的第 3 部分所述,工具cs-extract-key.py可用于从进程内存转储中提取密钥。 如果密钥被混淆,工具cs-analyze-processdump.py可用于尝试破解混淆,如本系列的第 4 部分所述。
结论
内存转储可用于检测和分析信标。 我们开发了从内存转储中提取信标配置和密钥的工具。
|