请查看我们之前关于如何收集 Cobalt Strike 信标植入物的帖子。 我们将利用这些信息从信标中提取配置。
在这篇文章中,我们将逐步使用优秀的Cobalt Strike 配置提取器 (CSCE)从二进制信标有效负载中手动分析 Cobalt Strike C2 配置。 我们还将介绍如何启用 Elastic Stack 的一些较新的功能,通过从内存中提取信标,这些功能可让您在所有受监控的端点上大规模执行此操作。
Blackberry 团队有一本名为“在黑暗中寻找信标”(需要注册)的详尽手册,其中深入探讨了 Cobalt Strike 信标配置。 我们将在这里讨论配置中的几个字段,但如果您有兴趣了解信标如何运作,我们强烈建议您查看该资源。
Cobalt Strike 配置提取器
Stroz Friedberg 的Cobalt Strike 配置提取器 (CSCE)是一个“用于从 Cobalt Strike 信标中提取和解析配置的 Python 库和脚本集”。
要使用 CSCE,我们将创建一个 Python 虚拟环境、激活它并安装 CSCE Python 包。
设置 Cobalt Strike 配置提取器
$ python3 -m venv csce
$ source csce/bin/activate
(csce) $ pip3 install libcsce
...truncated...
Collecting libcsce
Using cached libcsce-0.1.0-py3-none-any.whl (24 kB)
Collecting pefile>=2019.4.18
...truncated...
接下来,我们可以在从内存中提取的信标有效负载上运行 CSCE,看看是否存储了我们可以收集的任何有趣信息(我们将添加--pretty
标志,以使输出更容易以 JSON 文档形式读取)。
查看 CS 信标配置的原子指标
(csce) $ csce --pretty beacon.exe
{
"beacontype": [
"HTTPS"
],
"sleeptime": 45000,
"jitter": 37,
"maxgetsize": 1403644,
"spawnto": "GNEtW6h/g4dQzm0dOkL5NA==",
"license_id": 334850267,
"cfg_caution": false,
"kill_date": "2021-12-24",
"server": {
"hostname": "clevelandclinic[.]cloud",
"port": 443,
"publickey": "MIGfMA0GCSqGSIb3DQEBAQUAA4G...
...truncated...
我们立即可以看到,该信标使用 HTTPS 进行通信,并且域名为clevelandclinic[.]cloud
。 这为我们提供了一个可以进行分析的原子指标。 查看Malleable Command and Control 文档,我们可以获得配置变量的描述。
举例来说,我们可以看到sleeptime
是450000
毫秒,这将默认信标检查从每 60 秒更改为每 450 秒,或 7 ½ 分钟。 此外,我们看到抖动为37
,这意味着存在450000
毫秒 ( 166,500
毫秒) 的 37% 的随机抖动,因此信标签到可能在283,000
和450,000
毫秒 (4.7 - 7.5 分钟) 之间。
此外,Cobalt Strike Team Server 使用publickey
字段来加密服务器和信标之间的通信。 这与使用浏览器或数据传输库(如cURL
访问 C2 域时使用的普通 TLS 证书不同。 该字段值得注意,因为团队服务器对每个信标使用相同的公钥,因此该字段在将信标与其视角团队服务器进行聚类时很有价值,因为威胁行为者通常对多个活动使用相同的团队服务器,因此配置中的这些数据可用于将威胁行为者链接到多个活动和基础设施。
继续查看配置输出,我们可以看到围绕process-inject
嵌套字段stub
的另一个有趣的部分:
查看 process-inject.stub 字段
(csce) $ csce --pretty beacon.exe
...truncated...
"process-inject": {
"allocator": "NtMapViewOfSection",
"execute": [
"CreateThread 'ntdll!RtlUserThreadStart'",
"CreateThread",
"NtQueueApcThread-s",
"CreateRemoteThread",
"RtlCreateUserThread"
],
"min_alloc": 17500,
"startrwx": false,
"stub": "IiuPJ9vfuo3dVZ7son6mSA==",
"transform-x86": [
"prepend '\\x90\\x90'"
],
...
stub
字段包含 Cobalt Strike Java 档案的 Base64 编码的 MD5 文件哈希。 为了转换它,我们可以再次使用 CyberChef,这次添加“从 Base64”和“到十六进制”配方,确保在“到十六进制”配方中将“分隔符”更改为“无”。
现在我们有了 Java 存档的 MD5 值 ( 222b8f27dbdfba8ddd559eeca27ea648
),我们可以根据 VirusTotal 等在线数据库进行检查以获取更多信息,特别是 SHA256 哈希值 ( 7af9c759ac78da920395debb443b9007fdf51fa66a48f0fbdaafb30b00a8a858
)。
最后,我们可以使用 CobaltStrike 验证 SHA256 哈希,通过访问https://verify.cobaltstrike.com并搜索哈希来识别 Java 档案的版本。
现在我们知道该信标是使用 Cobalt Strike 4.4 的许可版本创建的。
配置中另一个对聚类活动有帮助的字段是license_id
字段。
查看 Cobalt Strike 水印
...truncated
"spawnto": "GNEtW6h/g4dQzm0dOkL5NA==",
"license_id": 334850267,
"cfg_caution": false,
...truncated...
这通常被称为水印,是每个许可证唯一的 9 位数字。 虽然该值可以修改,但它仍可与process-inject.stub
和publickey
字段(如上所述)结合使用,以对基础设施和活动组进行聚类。
这些只是可以使用从 Cobalt Strike 信标中提取的配置来识别和聚类活动的几个字段。 如果您对配置的深入分析感兴趣,我们建议您查看黑莓团队编写的《在黑暗中寻找信标 Cobalt Strike》手册。
将分析付诸行动
为了测试我们的分析师剧本,用于收集 Cobalt Strike 信标有效载荷、其配置和其中包含的元数据;我们可以将它们应用于更多数据以识别活动集群。
在上图中,我们可以根据威胁行为者对信标有效载荷公钥的共享用途对其进行聚类,正如我们上面所述,每个团队服务器的公钥都是唯一的。 这将允许我们将多个信标有效载荷哈希、基础设施和活动分组到单个威胁行为者。
与往常一样,使用从信标有效载荷配置中提取的原子指标(在我们的示例中为clevelandclinic[.]cloud
)允许您识别其他共享基础设施、目标垂直行业和威胁行为者能力。
这次全速前进
我们在此版本以及之前的版本中强调的所有步骤都可以使用Cobalt Strike Beacon Extraction项目自动执行并写入 Elasticsearch。
总结
在这篇文章中,我们重点介绍了 Elastic Stack 中可用于收集 Cobalt Strike Malleable C2 信标有效载荷的新功能。 此外,我们还介绍了构建 Fleet 策略以从内存及其配置中提取信标有效负载的过程。
这些 Fleet 政策和流程使安全分析师能够收集 Cobalt Strike 信标有效载荷及其配置,以识别威胁行为者控制的基础设施和集群活动。
工件
可观察的 | 类型 | 注意 -------------------------------------------------------------------|-------------------------|------------------------------------------ 697fddfc5195828777622236f2b133c0a24a6d0dc539ae7da41798c4456a3f89
| SHA256 | Cobalt Strike Malleable C2 信标有效载荷7475a6c08fa90e7af36fd7aa76be6e06b9e887bc0a6501914688a87a43ac7ac4
| SHA256 | Cobalt Strike Malleable C2 信标有效载荷f9b38c422a89d73ebdab7c142c8920690ee3a746fc4eea9175d745183c946fc5
| SHA256 | Cobalt Strike Malleable C2 信标有效载荷clevelandclinic[.]cloud
| 域名 | Cobalt Strike Malleable C2 域104[.]197[.]142[.]19
| ipv4-addr | Cobalt Strike Malleable C2 IP 地址192[.]64[.]119[.]19
| ipv4-addr | Cobalt Strike Malleable C2 IP 地址
工件
您还可以通过组合 zip 包下载ECS 和 STIX 格式的工件。