深入研究C2框架CobaltStrike 篇1

admin 2024年8月1日16:20:55评论308 views字数 17785阅读59分17秒阅读模式

前言

在这篇博文中,我们将介绍重要的定义和概念,以帮助防御者(蓝队)了解 Cobalt Strike,并希望找到使用此工具搜寻、应对和归因恶意行为者的新方法。

本文内容结合了官方文档、公开研究以及 Mandiant 自身在执行红队评估和应对威胁行为者使用 Cobalt Strike 的入侵方面的经验。由于 Cobalt Strike 既可用于合法测试,也可用于入侵,因此在本文中,我们将所有 Cobalt Strike 用户(无论其动机如何)称为“CS用户”,以方便理解。

虽然这篇博文主要致力于解释 Cobalt Strike 和 BEACON 工件以帮助防御者(蓝队)进行分析,但我们还引用了一些资源,以了解有关 Cobalt Strike 的更多信息以及如何在攻击生命周期的各个阶段检测常见的 BEACON 活动。

本系列为《深入研究C2框架--CobaltStrike》的第一篇,后续每周更新一篇博客,下期将分享CS的DNS beacon使用,DNS中继环境搭建以及流量分析。

深入研究C2框架CobaltStrike 篇1

本篇全篇11274个字,阅读需要20~40分钟,也可以加入群聊,不定时更新威胁情报。

重要组件

Cobalt Strike、BEACON、团队服务器(Team Server)...

你可能会听到过 Cobalt Strike、BEACON 甚至团队服务器(Team Server)这些名称互换使用,但它们之间存在一些重要的区别。

Cobalt Strike本身就是命令和控制( _C2) 应用程序_。它有两个主要组件:团队服务器(Team Server)和客户端。它们都包含在同一个 Java 可执行文件 (JAR 文件) 中(4.6之后Server和Client分开),唯一的区别是CS用户用来执行它的参数。

团队服务器(Team Server)是 Cobalt Strike 的 C2 服务器部分。它可以接受客户端连接、BEACON 回调和常规 Web 请求。

默认情况下,它在 TCP 端口 50050 上接受客户端连接。团队服务器(Team Server)仅支持在Linux系统上运行。

客户端 是CS用户连接团队服务器(Team Server)的方式。

客户端可以在与团队服务器(Team Server)相同的系统上运行或远程连接。客户端可以在 Windows、macOS 或 Linux 系统上运行。

BEACON是 Cobalt Strike 默认恶意软件负载(payload)的名称,用于与团队服务器(Team Server)建立连接。来自目标的活动回调会话也称为“信标”。(这是该恶意软件家族名称的由来)有两种类型的 BEACON:

Stager是可选的 BEACON 有效载荷。CS用户可以通过发送初始的小型 BEACON shellcode 有效载荷来“准备”他们的恶意软件,该载荷仅进行一些基本检查,然后查询配置的 C2 以获取功能齐全的后门。完整后门(Stagerless)可以通过 BEACON stager、“加载器”加载或直接调用默认 DLL 导出“ReflectiveLoader”函数来执行。此后门在内存中运行,可以通过多种方法与团队服务器(Team Server)建立连接。

各种加载器不是BEACON。BEACON 是后门本身,通常与其他加载器一起执行,无论是分阶段_后门_(staged)还是完整后门。Cobalt Strike 确实带有默认加载器,但CS用户也可以使用 PowerShell、.NET、C++、GoLang 或任何能够运行 shellcode 的东西创建自己的加载器。

所有东西都是互联的

侦听器[1](Listensers)是 Cobalt Strike 组件,有效载荷(例如 BEACON)使用它来连接到团队服务器(Team Server)。Cobalt Strike 支持多种协议,并支持在每种侦听器类型中进行各种修改。对侦听器进行某些更改需要“侦听器重新启动”并生成新的有效载荷。某些更改需要完全重新启动团队服务器(Team Server)。

HTTP/HTTPS[2]是迄今为止最常见的监听器类型。

虽然 Cobalt Strike 包含默认的 TLS 证书,但这对于防御者(蓝队)来说是众所周知的,并且被许多企业产品阻止(“签名”)。通常,CS会生成有效的证书(例如使用 LetsEncrypt),以便他们的 C2 域融入其中。借助可拓展配置文件(将在后面讨论),CS可以严格配置 BEACON 网络流量的外观,并可以伪装成合法的 HTTP 连接。CS用户可以在配置侦听器时提供域/IP 列表,团队服务器(Team Server)将接受来自所有域/IP 的 BEACON 连接(请参阅“重定向器Redirectors”)。CS用户还可以指定主机标头值(请参阅“域前置 Domain Fronting”)。

DNS[3]侦听器使用针对团队服务器(Team Server)具有权威性的域的 DNS 请求与其团队服务器(Team Server)建立会话。DNS 侦听器支持两种模式[4]

混合(DNS+HTTP)是默认设置,使用 DNS 作为信标通道,使用 HTTP 作为数据通道。还可以启用纯 DNS,以便将 DNS 用于信标和数据通道。这可以利用常规 A 记录请求来避免使用 HTTPS,并提供一种更隐蔽但速度较慢的通信方法。

SMB[5]是一种绑定式监听器,最常用于链接信标。绑定监听器在目标系统上打开本地端口并等待来自CS用户的传入连接。有关更多信息,请参阅官方文档中“Important Concepts > Chaining Beacons”。Raw TCP[6]是一种(较新的)绑定式监听器,也可用于链接信标。有关更多信息,请参阅后文中重要组件部分。

最后两个监听器不太常见,但它们提供了与其他有效载荷类型的兼容性。

外部监听器[7]允许来自 Metasploit 的Meterpreter[8]后门的连接,以简化 Metasploit 框架和 Cobalt Strike 框架之间的传递会话。外部 C2[9]侦听器提供了一种规范,CS用户可以使用该规范通过反向 TCP 侦听器连接到团队服务器(Team Server)。反向侦听器会连接回来并与CS用户建立外部连接,而不是像使用“绑定”侦听器那样等待传入连接。

所有组件可定制

Arsenal Kits(军械库套件)[10] 可供下载,具有有效许可证,并且仅用于许可(或破解)安装。Arsenal Kits(军械库套件)有时会与 Cobalt Strike 的破解副本一起分发。完整的套件列表(截至 2021 年 10 月)如下:

Applet/PowerApplet Kit[11]允许CS用户修改 Cobalt Strike 的内置 Java Applet 有效负载(payload)。该套件是第一个添加到 Arsenal 的套件,现已不再广泛使用。Artifact Kit[12]允许CS用户修改所有 Cobalt Strike 可执行文件、DLL 和 shellcode 的模板。该套件于 2014 年 1 月添加,目前仍在使用。Elevate Kit[13]允许CS用户将其一些特权提升漏洞集成为 Cobalt Strike 命令。该工具包于 2016 年 12 月发布。与其他工具包不同,它是公开的[14],它本质上只是一个 Aggressor Script,用于简化将您自己的 PowerShell 脚本、二进制文件等加载到 BEACON 会话中的过程(请参阅下文“Aggressor Scripts”)。Mimikatz Kit[15]允许CS用户更新其 Mimikatz 版本,而无需等待 Cobalt Strike 软件更新。该套件于 2021 年 7 月添加。Resource kit[16]允许CS用户修改 Cobalt Strike 使用的脚本模板(主要用作加载器)。该工具包于 2017 年 5 月添加,目前仍在使用。Sleep Mask Kit[17]允许CS用户修改 BEACON 使用的内存混淆,以避免此类检测方法[18]该套件于 2021 年 8 月添加。有关如何使用此套件影响内存 BEACON 检测的演练,可以查看此博客文章[19]用户定义的反射加载器套件[20]允许CS用户自定义 BEACON 使用的反射加载器功能。此套件于 2021 年 8 月添加。

Malleable Profile[21]是 Arsenal Kit 的最后一部分,它允许CS用户广泛修改其 Cobalt Strike 安装的工作方式。这是CS用户自定义 Cobalt Strike 的最常见方式,因此有大量[22]文档记录[23]

对可拓展配置文件的更改需要重新启动团队服务器(Team Server),并且根据更改,可能需要重新生成有效负载(payload)并重新生成信标会话。有多个强大的开源项目可以生成随机配置文件,这会使检测变得困难。不过,CS用户通常会重复使用配置文件(或仅对其进行轻微修改),以便更轻松地进行检测并可能进行归因聚类。分析样本时,请检查 GitHub 和其他公共来源,查看该配置文件是否开源。

Aggressor Scripts[24]是CS用户可以编写并加载到客户端中的宏,以简化工作流程。这些宏在客户端上下文中加载和执行,不会创建新的 BEACON 功能,而是自动执行现有命令。它们是用一种基于 Perl 的语言“Sleep”编写的,该语言由 Raphael Mudge(Cobalt Strike 的创建者)编写。有关示例,请查看后文“CS用户视角”部分。

攻击者脚本加载到CS用户的本地客户端中。它们_不会_加载到其他CS用户的客户端、团队服务器(Team Server)或 BEACON 会话(受害者主机)中。这些脚本的主要检测机会是检查它们是否有可用于检测或搜索规则的静态默认值。

Execute-Assembly[25] 是一个 BEACON 命令,允许CS用户在目标主机的内存中运行 .NET 可执行文件。BEACON 通过生成临时进程并将程序集注入其中来运行这些可执行文件。与 Aggressor Scripts 相比,execute-assembly 允许CS用户扩展 BEACON 功能。如果启用了Microsoft 的AMSI ,以这种方式运行的程序集仍将被扫描。[26]

Beacon 对象文件[27](BOF)是 Cobalt Strike 的一项最新功能,允许CS用户扩展 BEACON 后利用功能。BOF 是经过编译的 C 程序,在目标主机的内存中执行。与 Aggressor Scripts 不同,BOF 在 BEACON 会话中加载,可以创建新的 BEACON 功能。此外,与其他 BEACON 后利用命令(如 execute-assembly)相比,BOF 相对隐蔽,因为它们在 BEACON 会话中运行,不需要创建或注入进程。

CS用户视角

上述四个组件(客户端、攻击者脚本、Beacon 对象文件和可定制配置文件)是CS用户与其团队服务器(Team Server)交互和自定义的主要方式。此处包含每个组件的示例,以从CS用户的角度展示这些组件。

通过 Cobalt Strike客户端访问团队服务器(Team Server)的CS用户将看到如下视图。顶部窗格显示活动信标会话列表,其中包含基本元数据,包括当前用户、进程 ID、内部和外部 IP 地址以及主机上次与团队服务器(Team Server)签入的时间。底部窗格包含每个会话的选项卡,CS用户可以在其中向受害主机发送命令并查看过去命令和输出的日志。客户端界面还允许CS用户构建有效载荷、执行插件和生成报告。

深入研究C2框架CobaltStrike 篇1

深入研究C2框架CobaltStrike 篇1

在客户端中,CS用户可以导入攻击者脚本来自定义命令、菜单选项和界面。攻击者脚本的复杂程度各不相同,从添加新的菜单快捷方式到链接多个攻击步骤。以下是credpocalypse.cna[28]的摘录,攻击者脚本会按计划检查活动信标会话,并在有新用户登录时运行开源凭据转储程序 Mimikatz。

请注意,这不会向 Cobalt Strike 添加功能。在这种情况下,该脚本使用内置的 BEACON 功能列出进程并执行 Mimikatz,并使用 Cobalt Strike API 按计划运行。这意味着 BEACON 的 Mimikatz 模块的现有检测也将检测到这一点。

深入研究C2框架CobaltStrike 篇1

深入研究C2框架CobaltStrike 篇1

Beacon 对象文件是单个C 程序文件 ,在 BEACON 会话中运行。BOF 应该很小,并且运行时间很短。由于 BEACON 会话是单线程的,BOF 将在执行时阻止任何其他 BEACON 命令。以下是来自Cobalt Strike 文档[29]的一个示例,它使用动态函数解析来查找当前域。

深入研究C2框架CobaltStrike 篇1

深入研究C2框架CobaltStrike 篇1

最后,可定制配置文件允许CS用户在首次启动团队服务器(Team Server)时自定义各种设置。以下来自公共配置文件的[30]代码片段是CS用户如何使 BEACON 流量看起来像与 Amazon 相关的示例。蓝色部分(设置 uri 行和客户端块)定义了 BEACON 有效负载(payload)的行为方式。其中一些值可以从 BEACON 样本中提取。有关更多信息,请参阅后文“GET 和 POST 请求”部分。

深入研究C2框架CobaltStrike 篇1

深入研究C2框架CobaltStrike 篇1

重要概念

Stagers

之前,我提到过“两种类型的 BEACON”,其中一种是 stager。CS用户可以拥有多种侦听器类型的 stager(例如 DNS stager、SMB stager、HTTPS stager)。在这些情况下,当执行 stager shellcode 时,它将通过相关协议提取最终的 BEACON 有效负载(payload)并执行它,使用定义的侦听器方法建立连接。

对于防御者(蓝队)来说,一个重要的提示是,默认情况下,即使CS用户未在其操作中使用分段载荷(staged payloads),防御者(蓝队)也可以从团队服务器(Team Server)下载 Cobalt Strike HTTP/S stager payload。这将允许防御者(蓝队):

1.确认某个东西正在托管一个团队服务器(Team Server),并在该端口上设置侦听器;2.从有效载荷中提取其他配置工件。

这是因为 Cobalt Strike 的设计与 Metasploit 的 Meterpreter 有效负载(payload)兼容。当收到有效的 URL 请求时,Metasploit(以及 Cobalt Strike)将提供 HTTPS stager 。有效的 URL 是任何 4 个字符的字母数字值,其有效 8 位校验[31]和由将4 个字符的ASCII 值相加[32]计算得出。

CS用户可以通过将 host_stage Malleable Profile 值设置为“false”来阻止防御者(蓝队)检索 stager。更常见的是,他们可能会使用反向代理来过滤掉不想要的流量,例如 stager 请求。作为一项保护功能,Cobalt Strike 将忽略带有黑名单用户代理的 Web 请求,例如 curl 或 wget。从 Cobalt Strike 4.4 开始[33],CS用户还可以使用 .http-config.allow_useragents Malleable Profile 选项将用户代理_列入白名单_。

作为操作安全注意事项,CS用户还可以检测到对团队服务器(Team Server)的任何 Web 请求,因为CS用户可以在日志中看到这些请求他们还可以在“Web 日志”视图中看到是否已提取Stagers,以及所有 HTTP 请求详细信息(如源 IP)。

试用版 vs 授权版 vs 破解版

Cobalt Strike 并非_合法_免费提供。除非CS用户申请并获得批准,否则无法从 Help Systems(拥有 Cobalt Strike 的公司)下载团队服务器(Team Server)/客户端的试用版或许可版。不幸的是,几乎所有最新版本的试用版和破解版(包括大多数(如果不是全部)许可功能)都已泄露并继续公开分发。

Cobalt Strike 的试用版经过严格签名,包含许多明显的默认设置,旨在在生产环境中捕获。(例如,它将 EICAR 字符串嵌入到所有有效负载(payload)中。)这是为了确保CS用户确实将其用作试用版,如果将其用于专业用途,最终将付费。Cobalt Strike 的许可版本包含更多功能(例如 Arsenal Kits)和更少的水印嵌入(不再有 EICAR!)。与Cobalt Strike 许可证相关的水印仍嵌入在有效载荷中,可以使用大多数 BEACON 配置解析器提取。该值有很多注意事项,因此请参阅文章后面的“水印”部分。

许可证可能会被盗,但如果许可证被吊销,CS用户将无法再使用它来更新安装。如果CS用户保留“授权文件”(参见“水印”),现有安装将仍然有效,直到到期。

破解版的 Cobalt Strike 已在各种论坛中发布。通常,这些破解版是有人修改试用版 JAR 文件以绕过许可证检查并重建 JAR,或使用伪造的许可证 ID 制作授权文件并将其与 JAR 一起分发的结果。

区分 Cobalt Strike 的破解版本和合法授权版本可能很困难。如果水印是作为破解过程的一部分静态定义的,则可能可以将其与共享/分发副本联系起来。一些破解的 Cobalt Strike 副本还包含后门,以提供对团队服务器(Team Server)的第三方访问权限。在这些情况下,恶意软件分析人员需要能够通过静态分析识别非法副本。

重定向器Redirectors

CS用户有时会使用一个(或多个)重定向器来接受连接并将其转发到团队服务器(Team Server),而不是让信标直接连接到团队服务器(Team Server)。这对CS用户有几个好处,包括能够:

循环通过多个域实现单个 BEACON 连接无需更换底层团队服务器(Team Server)即可更换检测到/阻止的重定向器使用信誉较高的域名,帮助 BEACON 流量融入并避免被检测到

CS用户还可以使用重定向器过滤掉“可疑”流量,如扫描仪或搜索工具,以保护他们的团队服务器(Team Server),但通常仍然很容易追踪团队服务器(Team Server)和重定向器。有关更多详细信息,请参阅“寻找团队服务器(Team Server)”部分。

域前置 Domain Fronting

有时“重定向器”就像带有 nginx 代理的云实例一样简单,但另一种非常有效的重定向方法是“域前置”。域前置是一种技术,CS用户可以通过内容交付网络 (CDN) 的基础设施重定向网络连接的真实目的地,从而隐藏网络连接的真实目的地。该技术最初被记录为一种绕过互联网审查的手段,也被威胁行为者(如APT 29[34])用来伪装 C2 流量。

当 HTTPS 请求被前置时,连接将直接与 CDN 托管的知名已知域建立。这就是“前置”域。加密请求将包含一个唯一标识符,通常包含在 HTTP“Host”标头中,CDN 使用该标识符将请求路由到CS控制的服务器。由于域前置流量最初发送到 CDN,因此当防御者(蓝队)观察到时,它将使用 CDN 的合法 SSL/TLS 证书。

深入研究C2框架CobaltStrike 篇1

在这种情况下,为了阻止流向CS域的流量,防御者(蓝队)需要解密流量以发现 HTTPS 连接中的真实目的地,但这并不总是可行的。除了资源密集之外,解密某些 CDN 的流量可能是不可能的。例如,一些 CDN 强制在其 SSL/TLS 证书上进行证书固定[35],以防止使用组织提供的受信任根证书拦截和解密流量。

域前置 vs 伪装

伪装流量被设计为看起来像合法服务,但实际上是与CS服务器的直接连接,而前置流量被发送到合法服务 (CDN) 并从那里转发给CS。

如果 Host 标头值和目标域相同,这只是一个普通的直接 HTTP 连接。

如果 Host 标头和目标域不同,并且 Host 标头是:

一个合法的域名(例如在 Alexa Top 1M 中),那么它很可能是域名伪装用于 CDN 端点的域(例如 *.azureedge.net),那么它可能是域前置。

有多个公共指南可用于测试域名是否可前置化。https://github.com/vysecurity/DomainFrontingLists还包含[36] CDN 提供商预先编译的可前置化域名列表。请注意,公共列表可能已过时,可能仍需要手动验证。

链接Beacon(beacon 分级跳转)

CS用户建立连接的另一种方法是链接信标。一旦CS用户拥有一个被攻陷的系统(例如向 HTTPS 侦听器发送信标),他们就可以内部转向其他系统。

CS用户链接信标的最常见原因是绕过网络分段和限制。如果他们瞄准没有出站互联网访问权限的服务器,他们可以通过另一个具有网络连接的信标代理其与目标系统的连接,并在其团队服务器(Team Server)上接收回调。如果CS用户失去对父系统的访问权限,他们也将失去对链接信标的访问权限。

SMB 侦听器和 SMB 分段信标(SMB staged beacons)是最初的链接方法。Cobalt Strike 现在还支持原始 TCP 侦听器。在SMB 分段载荷被检测到的环境中(对于端点检测和响应产品来说越来越常见),CS用户可以在端口 445 上使用原始 TCP 链。这使利用 SMB 很少在内部主机之间被阻止,但避免使用签名更严格的 SMB 侦听器。

在上文“CS用户视图”部分的屏幕截图中,第一个会话的外部 IP 与会话 2 的内部 IP 匹配。这表明它正在通过第二个会话进行链接。IP 旁边的双无穷大图标也表明它已被链接。如果系统与其父主机失去连接,该链图标将断开连接。

以下屏幕截图显示了来自 Cobalt Strike 客户端的“数据透视图”视图。在此图中,每个 BEACON 都由一个计算机图标表示。链接会话通过指向其子会话的箭头标识,防火墙图标表示与CS用户 C2 的外部连接。

深入研究C2框架CobaltStrike 篇1

寻找团队服务器(Team Server)

Mandiant 的高级实践团队会定期扫描互联网上的 C2,包括 Cobalt Strike 团队服务器(Team Server)。如果CS没有妥善保护其团队服务器(Team Server),分析师可以在事先不知道是否或在哪里使用恶意基础设施的情况下识别它,并为客户提供提前警告和覆盖。有关我们如何识别 Cobalt Strike 等 C2 的更多详细信息,请查看火眼的博客文章“ SCANdalous!(使用网络扫描数据和自动化进行外部检测[37]) ”。

一些其他内容解释

团队服务器(Team Server)和客户端日志

Cobalt Strike 日志对于了解使用团队服务器(Team Server)进行的活动非常有用。防御者(蓝队)可能不经常访问这些日志数据,但如果有日志可用,了解可以从中提取哪些数据很有用。

Cobalt Strike 以两种主要格式存储日志: 完整的纯文本信标日志 和 Java 序列化 bin。这些日志存储在团队服务器(Team Server)工作目录中,并在客户端连接到团队服务器(Team Server)时复制到客户端工作目录中。当项目发生变化(例如捕获新的凭据)时,它们也会更新。

cobaltstrike/logs/ 目录包含格式为 [date]/[IP]/[beacon id].log 目录结构。每个文件都是每个 beacon 命令及其相关输出的纯文本日志。这反映了CS用户在 Cobalt Strike beacon 控制台中看到的内容。

cobaltstrike/screenshots/和 cobaltstrike/downloads/文件夹分别包含CS用户从 beacons 下载的所有屏幕截图或文件。

单个CS用户/客户端工作目录 将仅包含该CS用户同步到其本地系统的下载,这些下载可能来自多个团队服务器(Team Server)连接。团队服务器工作目录将包含该团队服务器(Team Server)上任何CS用户的屏幕截图/下载。

每个 cobaltstrike/logs/[date] 目录下还有一个 events.log 和一个 web.log 文件。

Events.log 是团队服务器(Team Server)“事件”控制台的镜像,它至少包括每个CS用户连接到服务器的日期/时间以及每个初始信标回调。Web.log 将显示对团队服务器(Team Server)的每个 Web 请求的日志,包括对暂存有效负载(payload)或团队服务器(Team Server)托管文件的请求。

托管在团队服务器(Team Server)上并通过 Cobalt Strike 的 Web 功能提供的文件保存在 cobaltstrike/uploads/ 目录中。单个CS用户/客户端工作目录将仅包含该CS用户上传的文件。

cobaltstrike/data目录 包含几个 .bin 文件,这些文件是 Cobalt Strike 用于跟踪其状态的不同数据模型的序列化 Java 对象。可以使用此脚本[38]将 Cobalt Strike 序列化 .bin 日志中的数据提取为 CSV 。

对于大多数分析师来说,sessions.bin、listeners.bin 和 credentials.bin 是最受关注的。.bin 日志包含最集中且最易于解析的数据,可用于识别使用特定团队服务器(Team Server)入侵了哪些系统和用户。

Sessions.bin 列出了来自给定团队服务器(Team Server)的所有 活动和历史 信标会话以及一些基本元数据(例如用户、内部和外部 IP、主机名、架构)。Listeners.bin 详细说明了 给定团队服务器(Team Server)的所有活跃监听器。Credentials.bin 包含使用内置凭证模块(如 Mimikatz)自动转储或手动添加(如离线破解密码后)的任何凭证(明文、散列等)。

水印

Cobalt Strike 水印 是从给定的“CobaltStrike.auth”文件生成并绑定到该文件的唯一值。此值嵌入在所有 BEACON stager 的最后 4 个字节中,并嵌入在 完整后门 BEACON 样本[39]的嵌入配置中。

CobaltStrike.auth文件 是 Cobalt Strike 用来确定许可证 ID 和有效期的配置文件。启动时,Cobalt Strike 将检查许可证是否有效且未过期。启动现代版本的 Cobalt Strike 需要 CobaltStrike.auth 文件,并在更新 Cobalt Strike 和输入许可证时(无论是首次输入还是重新输入)更新该文件。

水印 匹配意味着 两个有效载荷来自使用相同 CobaltStrike.auth 文件的团队服务器(Team Server)。这 并不一定意味着 它们来自同一个CS用户。有人可以复制整个 Cobalt Strike 目录(包括 auth 文件),并将其安装在另一台服务器上,然后该服务器将具有相同的水印,直到许可证过期。

公钥

Cobalt Strike 使用 4 种不同类型的密钥库:

监听器 可以在可拓展配置文件中指定自定义密钥库。可以使用可拓展配置文件中指定的自定义密钥库来配置代码签名。客户端连接 使用 cobaltstrike.store 文件来加密客户端通信。Beacon Connections使用团队服务器(Team Server)生成的密钥库来加密 BEACON 数据并处理其他安全功能。

Raphael Mudge 的培训“高级威胁策略:基础设施[40]”中讨论了 BEACON 密钥和其他安全功能。这些密钥仅用于完整的 BEACON 后门,而不是 stager。这些密钥存储在团队服务器(Team Server)工作目录中名为“.cobaltstrike.beacon_keys”的序列化文件中。

匹配的公钥意味着两个有效载荷来自使用相同 .cobaltstrike.beacon_keys 密钥库的团队服务器(Team Server)。这 并不一定意味着 它们来自同一个团队服务器(Team Server)。同样,有人可以复制整个 Cobalt Strike 目录,包括密钥库,就像有时使用分发或破解的副本所做的那样。

C2 IP 和 URL

BEACON 解析器通常还会从样本中提取 C2 IP、域和 URL。其中一些可能是合法域,例如,如果CS用户使用域前置或伪装。

在尝试将 BEACON 活动聚类以进行归因分析时,需要注意一些问题 。例如,以下情况并不一定意味着您正在查看不同的团队服务器(Team Server)。

两个样本连接到不同的 IP - 这可能是更改重定向器或在侦听器中定义多个域/主机的结果。两个样本引用不同的 URL 路径 - CS用户在定义可拓展配置文件时可以指定多个 URL 路径。每次CS用户生成 BEACON shellcode 时,Cobalt Strike 都会从此列表中选择一个随机值。如果两个样本的 URL 不同,则它们可能仍引用同一台服务器。

GET 和 POST 请求

BEACON 配置可能包括 HTTP GET 和 POST 请求的自定义 HTTP 标头、Cookie 等。这些字段表示CS用户如何配置其团队服务器(Team Server)(使用可拓展配置文件或默认值)来构建和伪装 BEACON 网络流量。这与有效负载(payload)中的内容并非直接一对一对应。可拓展配置文件接受多个字段的多个值,并且给定的有效负载(payload)中可能只出现其中一个值。如果 GET 或 POST 请求不完全匹配,则并不一定表示它来自不同的服务器。

生成注入目标进程

每个 BEACON 有效载荷将配置两个“生成”进程,一个用于 32 位任务,一个用于 64 位任务。这些值是 BEACON 将为各种后利用命令生成的临时进程。BEACON 启动进程,注入其中(使用CS用户指定的任何技术),执行后利用任务,然后终止进程。作为这可能会影响哪些命令的示例,请查看此旧指南: Beacon 命令的 Opsec 注意事项[41]。默认的生成进程是 rundll32.exe,但可以通过两种方式进行修改。

Malleable Profile 允许CS用户修改默认的 spawn_to 进程(如果使用许可或破解版本)。更改这些值将需要重新启动团队服务器(Team Server)并重新生成新的 BEACON 有效负载(payload)以使用新值。一旦建立 BEACON 会话,客户端 允许CS用户以交互方式修改 spawn_to 进程。这些可以根据需要多次更改,不需要重新启动,但它只会影响当前的 BEACON 会话。

命名管道

命名管道是用于进程间通信 (IPC) 的 Windows 功能。Cobalt Strike 以多种方式使用命名管道:

有效负载(payload) - 用于将后门加载到内存中,可通过 Malleable 配置文件和/或 Artifact Kit 进行修改。后利用作业 - 用于需要生成并注入到进程中的各种 Cobalt Strike 命令。暂存- 用于 SSH/SMB BEACON 暂存和链接

Raphael Mudge 的文章“学习适用于所有进攻项目的管道配件[42]”提供了有关此功能的一些有用的附加详细信息。

SLEEP

BEACON 配置中的“休眠时间”值是回调间隔使用的基本时间。BEACON 将在一个固定百分比的范围内随机化回调。例如,休眠时间为 10 秒,抖动为 50%,则每 5 到 15 秒会产生一次回调。此值不是恒定的,这会使网络检测更具挑战性。

在 Malleable Profile 中,CS用户可以指定休眠时间(单位为 毫秒)。创建会话后,CS用户可以交互方式更改休眠时间和抖动值,但两者都必须是整数,并且休眠时间必须以 为单位定义。

KillDate

BEACON 样本中的“killdate”值决定了它是否应在给定日期之后连接到团队服务器(Team Server)。红队CS用户会使用此值来确保在交战完成后不会意外执行有效载荷。威胁行为者还可以使用它来限制成功的沙盒执行并阻止追溯分析工作。

此值由启动团队服务器(Team Server)时的命令行参数定义,并且无法通过 Malleable Profile 或交互式 BEACON 命令进行修改。默认情况下,不指定终止日期。

结论

Cobalt Strike 仍然是合法安全测试人员和威胁行为者的首选 C2 框架。我们希望,通过更彻底地了解该框架的功能和常见用法,防御者(蓝队)将能够更好地找到使用此工具追踪、响应和归因恶意行为者的新方法。

参考

检测指南

Cobalt Strike,防御者(蓝队)指南[43] (DFIR 报告)CS撞击探测[44] (Recorded Future)使用内存签名检测 Cobalt Strike[45] (Elastic)

分析资源

开源 Cobalt Strike 解析器[46] (Sentinel One)反击退役的 Cobalt Strike[47] (NCCGroup)了解CS概况[48] (ZeroSec)深入探究 Malleable C2[49] (Specter Ops)

练习和示例

Cobalt Strike 的创建者 Raphael Mudge 创建了一个由九部分组成的 YouTube 课程,即 《Red Team Ops with Cobalt Strike》[50],展示了如何使用 Cobalt Strike。这个课程值得一看,可以了解该产品的外观以及如何使用本博文中讨论的各种功能(+一些)。

Cobalt Strike 文档[51] (Raphael Mudge + 帮助系统)可锻造轮廓示例[52] (Raphael Mudge)社区工具包[53] (各种)——“扩展的中央存储库……用于扩展……Cobalt Strike”戴着面具睡觉[54] (亚当·斯沃博达)域名前端列表[55] (Vincent Yiu)

References

[1] 侦听器https://www.cobaltstrike.com/help-listener-management
[2] HTTP/HTTPShttps://www.cobaltstrike.com/help-http-beacon
[3] DNShttps://www.cobaltstrike.com/help-dns-beacon
[4] 两种模式: https://blog.cobaltstrike.com/2013/06/20/thatll-never-work-we-dont-allow-port-53-out/
[5] SMBhttps://www.cobaltstrike.com/help-smb-beacon
[6] Raw TCPhttps://www.cobaltstrike.com/help-tcp-beacon
[7] 外部监听器https://www.cobaltstrike.com/help-listener-management
[8] Meterpreter: https://www.offensive-security.com/metasploit-unleashed/about-meterpreter/
[9] 外部 C2https://www.cobaltstrike.com/help-externalc2
[10] Arsenal Kits(军械库套件)https://cobaltstrike.com/scripts
[11] Applet/PowerApplet Kithttps://blog.cobaltstrike.com/2017/10/03/kits-profiles-and-scripts-oh-my/
[12] Artifact Kithttps://www.cobaltstrike.com/help-artifact-kit
[13] Elevate Kithttps://www.cobaltstrike.com/help-elevate
[14] 公开的: https://github.com/rsmudge/ElevateKit
[15] Mimikatz Kithttps://blog.cobaltstrike.com/2021/07/29/introducing-mimikatz-kit/
[16] Resource kithttps://www.cobaltstrike.com/help-resource-kit
[17] Sleep Mask Kithttps://www.cobaltstrike.com/help-sleep-mask-kit
[18] 。: https://www.elastic.co/blog/detecting-cobalt-strike-with-memory-signatures
[19] 此博客文章: https://adamsvoboda.net/sleeping-with-a-mask-on-cobaltstrike/
[20] 用户定义的反射加载器套件https://www.cobaltstrike.com/help-user-defined-reflective-loader
[21] Malleable Profilehttps://www.cobaltstrike.com/help-malleable-c2
[22] 大量: https://blog.zsec.uk/cobalt-strike-profiles/
[23] 文档记录: https://posts.specterops.io/a-deep-dive-into-cobalt-strike-malleable-c2-6660e33b0e0b
[24] Aggressor Scriptshttps://www.cobaltstrike.com/help-scripting
[25] Execute-Assemblyhttps://blog.cobaltstrike.com/2018/04/09/cobalt-strike-3-11-the-snake-that-eats-its-tail/
[26] Microsoft 的AMSI ,以这种方式运行的程序集仍将被扫描。: https://docs.microsoft.com/en-us/windows/win32/amsi/antimalware-scan-interface-portal
[27] Beacon 对象文件https://www.cobaltstrike.com/help-beacon-object-files
[28] credpocalypse.cna: https://github.com/ramen0x3f/AggressorScripts/blob/master/credpocalypse.cna
[29] Cobalt Strike 文档: https://www.cobaltstrike.com/help-beacon-object-files
[30] 公共配置文件的: https://github.com/rsmudge/Malleable-C2-Profiles/blob/master/normal/amazon.profile
[31] 校验: https://github.com/rapid7/metasploit-framework/blob/master/lib/rex/payloads/meterpreter/uri_checksum.rb#L6
[32] ASCII 值相加: https://isc.sans.edu/forums/diary/Finding+Metasploit+Cobalt+Strike+URLs/27204/
[33] 从 Cobalt Strike 4.4 开始: https://blog.zsec.uk/cobalt-strike-profiles/
[34] APT 29: https://www.fireeye.com/blog/threat-research/2017/03/apt29_domain_frontin.html
[35] 进行证书固定: https://owasp.org/www-community/controls/Certificate_and_Public_Key_Pinning
[36]https://github.com/vysecurity/DomainFrontingLists还包含
[37] SCANdalous!(使用网络扫描数据和自动化进行外部检测: https://www.mandiant.com/resources/scandalous-external-detection-using-network-scan-data-and-automation
[38] 此脚本: https://github.com/ramen0x3f/AggressorScripts/blob/master/parse_cs_bin.py
[39] 完整后门 BEACON 样本: https://blog.cobaltstrike.com/2017/09/20/cobalt-strike-3-9-livin-in-a-stagers-paradise/
[40] Raphael Mudge 的培训“高级威胁策略:基础设施: https://www.youtube.com/watch?v=3gBJOJb8Oi0&t=2995s
[41] Beacon 命令的 Opsec 注意事项: https://blog.cobaltstrike.com/2017/06/23/opsec-considerations-for-beacon-commands/
[42] 学习适用于所有进攻项目的管道配件: https://blog.cobaltstrike.com/2021/02/09/learn-pipe-fitting-for-all-of-your-offense-projects/
[43] Cobalt Strike,防御者(蓝队)指南: https://thedfirreport.com/2021/08/29/cobalt-strike-a-defenders-guide/
[44] CS撞击探测: https://go.recordedfuture.com/hubfs/reports/mtp-2021-0914.pdf
[45] 使用内存签名检测 Cobalt Strike: https://www.elastic.co/blog/detecting-cobalt-strike-with-memory-signatures
[46] 开源 Cobalt Strike 解析器: https://github.com/Sentinel-One/CobaltStrikeParser/
[47] 反击退役的 Cobalt Strike: https://research.nccgroup.com/2020/06/15/striking-back-at-retired-cobalt-strike-a-look-at-a-legacy-vulnerability/
[48] 了解CS概况: https://blog.zsec.uk/cobalt-strike-profiles/
[49] 深入探究 Malleable C2: https://posts.specterops.io/a-deep-dive-into-cobalt-strike-malleable-c2-6660e33b0e0b
[50] 《Red Team Ops with Cobalt Strike》: https://www.youtube.com/watch?v=q7VQeK533zI
[51] Cobalt Strike 文档: https://cobaltstrike.com/support
[52] 可锻造轮廓示例: https://github.com/rsmudge/Malleable-C2-Profiles
[53] 社区工具包: https://cobalt-strike.github.io/community_kit/
[54] 戴着面具睡觉: https://adamsvoboda.net/sleeping-with-a-mask-on-cobaltstrike/
[55] 域名前端列表: https://github.com/vysecurity/DomainFrontingLists

原文始发于微信公众号(TIPFactory情报工厂):深入研究C2框架--CobaltStrike 篇1

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年8月1日16:20:55
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   深入研究C2框架CobaltStrike 篇1https://cn-sec.com/archives/3022314.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息