概述
Cobalt Strike 是一款高级的攻击性安全工具,渗透测试人员和红队成员将其用作模拟对手行为的方式。其目标是验证安全检测能力和流程,从而复现真实世界的入侵。虽然 Cobalt Strike 是一种合法的工具,但它经常被实际的威胁攻击者滥用,以获得和维持对目标网络的持久性访问。
为了管理命令和控制,Cobalt Strike 利用一种植入,该植入使用称为 可塑命令和控制 (Malleable C2) 配置文件的 beacon 配置。Malleable C2 配置文件包含大量选项,用于配置 beacon 的功能,有关配置 Malleable C2 beacon 的具体信息,请参阅 Cobalt Strike 的官方文档。
本博客将重点介绍如何使用 Elastic Stack 收集 Cobalt Strike beacon 有效载荷,提取和解析 beacon 配置,以及分析配置中的元数据。所有这些都将从我们从遥测中收集的目标 Windows 端点的内存中获取。
Fleet 策略
Fleet 是 Kibana 中的一个应用程序,它提供了一个集中位置来配置和监视您的 Elastic Agent。Fleet 使用 集成,这些集成是统一的插件,允许从应用程序和服务中收集数据,然后将其存储在 Elasticsearch 中。集成被添加到策略中,而 Elastic Agent 被添加到策略中。
首先,我们需要在 Fleet 策略中配置 shellcode 和恶意内存区域的收集。这将从 shellcode 和恶意内存事件周围的内存中收集 4MB 的数据。应该注意的是,此集合可能会显著增加存储在 Elasticsearch 中的数据量。
您可以将其添加到现有策略或创建新策略。要创建新策略,请在 Kibana 中导航到“Fleet → Agent 策略 → 创建 Agent 策略”。为您的策略指定名称和描述。您可以选择禁用“系统监视”和“Agent 监视”,以减少从端点收集的系统和 Agent 元数据量。单击“创建 Agent 策略”。
接下来,单击您的新策略,然后单击“添加集成”按钮。
最后,我们将添加内存和 shellcode 收集选项。单击集成名称(“Endpoint Security”)。
在“保护”下,保留选定的不同保护类型,但将保护级别从“阻止”更改为“检测”。这将允许恶意软件继续运行,以便进行更丰富的事件收集。有几种类型的保护(恶意软件、内存等),对于每个将 Windows 作为可用“操作系统”的类型,选择“检测”;您可以取消选中 Mac 和 Linux 操作系统。**如果您要为生产环境启用此功能,请将保护级别保留为“阻止”**
在集成配置页面的底部,您可以切换“注册为防病毒软件”,以便将 Elastic Agent 注册为防病毒解决方案,并禁用 Windows Defender。单击“显示高级设置”。
在高级设置页面的最底部,为 windows.advanced.memory_protection.shellcode_collect_sample 和 windows.advanced.memory_protection.memory_scan_collect_sample 设置键入“true”,然后单击“保存集成”。
创建此特定 Fleet 策略后,您可以将此策略应用于运行 Elastic Agent 的端点。有关如何部署 Elastic Agent 的具体说明,请参阅官方 Elastic 文档。
收集 Beacon
现在我们已经制定了一个收集策略并将其应用于 Windows 计算机,您可以使用 Cobalt Strike 活动来定位它。我们将不模仿 Cobalt Strike beacon 在实验室中的样子,而是使用 Elastic 遥测中的实时 Cobalt Strike beacon 有效负载。
要查找 Cobalt Strike beacon 有效负载,您可以使用 Kibana 中的 Discover 应用程序返回标识为 Cobalt Strike 的事件。这些事件由 Elastic Endpoint Security Agent 提供,该 Agent 使用“Windows.Trojan.CobaltStrike”恶意软件签名识别 Cobalt Strike beacon 和模块。一个简单的 Kibana 查询语言 (KQL) 搜索如下:
KQL search for Cobalt Strike
event.category:(malware or intrusion_detection) and
rule.name:(Windows.Trojan.CobaltStrike or Windows.Trojan.Cobaltstrike)
接下来,让我们筛选具有 process.Ext.memory_region.bytes_compressed 字段的文档(这是由我们在上面的 Fleet 策略中配置的 windows.advanced.memory_protection.shellcode_collect_sample 和 windows.advanced.memory_protection.memory_scan_collect_sample 设置填充的字段)。为此,我们可以简单地添加一个 process.Ext.memory_region.bytes_compressed_present 字段的筛选器,其值为 true。
最后,将 process.Ext.memory_region.bytes_compressed 字段添加到我们的视图中,以便我们可以查看该字段的值。
我们可以看到,我们在 process.Ext.memory_region.bytes_compressed 字段中提供了 133 个数据示例。此字段包含从受感染主机的内存中提取的文件,然后使用 zlib 解压缩并进行 Base64 编码。
现在我们已经在 Elastic Stack 中收集了该文件,让我们将原始数据转换为可以分析的文件。
在如何解码 Base64 和解压缩 zlib 压缩文件方面,操作系统之间存在很多细微差别。如果您更喜欢使用命令行或本地工具,请随意这样做。也就是说,CyberChef 是英国政府通信总部 (GCHQ) 免费提供的基于浏览器的数据解析器。
使用 CyberChef Web 应用程序,添加“From Base64”和“Zlib Inflate”配方,然后将 process.Ext.memory_region.bytes_compressed 字段的内容粘贴到括号中。
单击磁盘图标下载解压缩后的二进制文件。
运行 file 命令,我们可以看到这是一个可由恶意软件逆向工程师 (RE) 分析的可移植可执行 (PE) 文件。
Using the file command to validate the file type
$ file beacon.exe
beacon.exe: PE32 executable (GUI) Intel 80386 (stripped to external PDB), for MS Windows
虽然 RE 可以识别大量信息,但让我们探讨一下非 RE 可以从此文件中获得哪些其他信息。
下一步
在下一个版本中,我们将使用我们刚刚收集的 beacon 并提取其配置。通过这些信息,我们将能够识别其他重要元素,例如许可证标识、水印和原子指标。