在本文中,Unit 42 研究人员详细介绍了最近发现的恶意 Cobalt Strike 基础设施。我们还分享了恶意 Cobalt Strike 样本的示例,这些样本使用了 Malleable C2 配置文件,这些配置文件源自托管在公共代码存储库中的同一配置文件。
Cobalt Strike 是一个商业软件框架,可让红队成员等安全专业人员模拟攻击者嵌入网络环境。然而,威胁行为者仍在现实世界的攻击中使用破解版的 Cobalt Strike。名为 Beacon 的后漏洞利用有效载荷使用名为 Malleable C2 的基于文本的配置文件来更改 Beacon 网络流量的特征,以试图避免被检测到。
尽管 Cobalt Strike 被用于防御性网络安全评估,但威胁行为者仍继续利用它进行恶意攻击。由于其可塑性和逃避性,Cobalt Strike 仍然是组织面临的重大安全威胁。
第一个 Beacon 样本借用了托管在公开软件存储库中的名为ocsp.profile的 Malleable C2 配置文件。此配置文件本身并不恶意,它是托管在公开存储库中的众多配置文件之一,攻击者可以复制和修改这些配置文件以用于自己的恶意目的。
第一个示例 SHA256 哈希:
我们从 ATP 解决方案发现的其中一台 Cobalt Strike 服务器下载了这个 Beacon 样本。攻击者通常从 Cobalt Strike 服务器检索 Beacon 实例,并通过其他一些受感染的进程将 Beacon 加载到内存中。此 Beacon 二进制文件中嵌入了来自其 Malleable C2 配置文件的详细信息。
我们使用 Didier Stevens 的 Python 脚本1768.py来提取 Malleable C2 配置文件详细信息。这些详细信息列于下表 1 中。
表 1.从我们的第一个 Beacon 样本的配置文件中提取的网络信息。
下面的图 1 显示了 Stevens 对我们的第一个 Beacon 样本的 Python 脚本分析结果的一部分。此部分包含与样本的 Malleable C2 配置文件配置相关的信息。如http_get_header部分所述,受害者的元数据使用小写NetBIOS编码进行编码并附加到请求 URI。此配置还将Accept: * /*添加到 HTTP GET 请求标头。
图 2 显示了此 Beacon 实例与 Cobalt Strike 服务器之间的 HTTP C2 流量的 TCP 流。在其中,我们可以看到 Malleable C2 配置文件指定的 GET 请求中的小写 NetBIOS 编码。
此配置文件配置似乎基于可公开访问的软件存储库中的ocsp.profile。攻击者只是将两种 HTTP 请求方法中的/oscp/替换为/ocsp/ ,并将User-Agent字符串从Microsoft-CryptoAPI/6.1更改为Microsoft-CryptoAPI/7.0。图 3 显示了原始 Malleable C2 配置文件中的值,这些值已针对此 Beacon 示例进行了更改。此示例使用的其余配置文件与原始ocsp.profile内容相匹配。
我们的第二个 Beacon 样本的 Malleable C2 配置文件借用了与我们的第一个样本相同的ocsp.profile 。
第二个示例 SHA256 哈希:
与我们的第一个示例一样,此 Beacon 示例是一个由 Cobalt Strike 服务器托管的分阶段二进制文件,我们的 ATP 平台检测到并下载了它。按照相同的分析程序,我们使用1768.py提取了 Malleable C2 配置文件信息,并将结果与我们已知配置文件的存储库进行了比较。表 2 显示了我们从此配置文件中提取的网络信息。
表 2.从我们的第二个 Beacon 样本的配置文件中提取的网络信息。
在这个 Beacon 样本中,攻击者更新了 URI 路径,将HTTP GET 请求的原始ocsp.profile值从/oscp/替换为/download/。攻击者还将 HTTP POST 请求的原始值从/oscp/a/替换为/pkg/a/。最后,他们将User-Agent值从Microsoft-CryptoAPI/6.1更新为Microsoft-CryptoAPI/8.1。
图 4 显示了第二个 Beacon 实例与其 Cobalt Strike 服务器之间的 HTTP C2 流量的 TCP 流。
我们的第三个样本的 Malleable C2 配置文件借用了与第一个和第二个样本相同的ocsp.profile 。
第三个示例 SHA256 哈希:
第三个 Cobalt Strike 样本是一个无阶段的 64 位 Windows 可执行文件,它使用相同的 ocsp.profile 作为其 Malleable C2 配置文件,但略有不同。其 C2 服务器的域名在前导子域中包含一个字符串,该字符串与某知名跨国科技公司的 FQDN 相匹配。
Cobalt Strike C2 服务器的 FQDN 是 www.consumershop.lenovo.com.cn.d4e97cc6.cdnhwcggk22[.]com,但其父域实际上是 cdnhwcggk22[.]com。
图 5 显示了此第三个样本生成的 HTTP C2 流量示例,该流量从 C2 域的 DNS 查询解析为服务器的 IP 地址后开始。
依赖于 HTTP 请求标头模式中的网络流量模式的 Cobalt Strike 活动检测价值有限,因为这些模式的任何变化都可能导致检测失败。一些变通方法(例如正则表达式模式)可以暂时缓解这种逃避。然而,攻击者可以轻易修改 Malleable C2 配置文件,从而引发一场检测军备竞赛,攻击者始终领先于传统网络安全解决方案一步。在这些情况下,防御者比攻击者付出的代价更大。
此外,攻击者无需从头开始创建 Malleable C2 配置文件。他们可以轻松复制公开可用的示例并修改各种值以满足他们的需求。我们的研究表明,攻击者会使用这些公开可用的配置文件的轻微修改来进行 Cobalt Strike 活动,以逃避检测。
在不断发展的网络安全格局中,攻击者不断寻找新方法,例如利用公开的 Malleable C2 配置文件。此策略使攻击者能够灵活地发起 Cobalt Strike C2 通信,频繁更改配置文件以逃避检测并维持恶意活动。这些策略强调了网络威胁的动态性质以及对自适应和前瞻性防御机制的持续需求。
像 ATP 这样的基于机器学习的解决方案是可用于预防高度规避攻击和 Cobalt Strike 等 C2 的最佳防御对策。启发式检测无法覆盖 Malleable C2 框架可以轻松提供的大量排列。
网络安全误报的成本严重偏向防御者,这是安全操作中的一个漏洞,攻击者可以利用它来为自己谋利。基于机器学习的解决方案(如 ATP)是当今最好的防御对策,可以防止高度规避的攻击和 Cobalt Strike 等 C2。启发式检测无法覆盖 Malleable C2 框架可以轻松提供的大量排列。网络安全误报的成本严重偏向防御者,这是安全操作中的一个漏洞,攻击者可以利用它来为自己谋利。
采用像 ATP 这样的机器学习网络安全平台可以提供检测能力来应对这些类型的威胁。
我们致力于改进技术以应对这些威胁,这再次表明我们致力于网络安全卓越性和数字社区安全。
可以通过以下产品更好地免受 Cobalt Strike 的攻击: