原文链接:https://www.cobaltstrike.com/blog/cobalt-strike-4-7-the-10th-anniversary-edition/
Cobalt Strike 4.7 现已推出。此版本支持 SOCKS5、提供灵活的 BOF 存储在内存中的新选项、Beacon 睡眠方式的更新以及我们用户要求的许多其他更改。我们还对用户界面进行了一些更新(包括对急需的暗模式的支持!)。
为纪念Cobalt Strike 成立 10周年,我要衷心感谢所有用户多年来的持续支持——从 Raphael Mudge 创建的第一个版本,到被 HelpSystems 收购,直到今天超越。当我第一次见到 Raphael 时,他给我留下了深刻的印象,Cobalt Strike 的用户社区是多么独特和特别,我每天都在提醒我——从社交媒体上的互动,到提交到社区工具包和所有伟大的(以及老实说,有时不是很好!)我们收到的反馈。没有您的支持和不断的反馈,Cobalt Strike 不会有今天的成就,所以谢谢您。这是未来10年!
关于逃避(Evasion)的一句话
在深入了解 4.7 版本的细节之前,我想花一点时间谈谈该版本中没有的内容。在过去的几个月里,我们收到了很多反馈,表明 Cobalt Strike 正在被积极地指纹识别,这使得绕过 AV 和 EDR 工具变得困难。对于没有时间开发自己的工具的团队来说,这让事情变得特别困难,您可能一直期望 4.7 版本中的更改会推迟这一点。然而,正如我在一篇关于我们路线图的博客文章中提到的那样早在 3 月,我们就不会在核心 Cobalt Strike 产品中添加任何开箱即用的规避措施(为了避免重复我自己,请阅读博文,因为它深入了解了为什么会这样) . 这并不是说我们根本没有做任何事情——我们当然会认真对待这一点,当然我们正在集中精力进行改进。我们的主要产品版本将继续增加灵活性,对用户要求的产品进行更改,并保持稳定。与此同时,我们不断壮大的研究团队将专注于在主发布周期之外向阿森纳工具包添加新的和更新现有的规避工具,在不影响或让您等待主要产品发布的情况下保持进展。从长远来看,这对我们的用户来说应该会更好。
HelpSystems 继续投资于开发团队和研究团队。我们最近在 Cobalt Strike Arsenal Kit 中发布了一个Thread Stack Spoofing 工具,我们还有许多其他工具目前正在开发中,我们预计将在接下来的几周内发布,以填补现在和最终 4.8 版本之间的空白年。这样做的原因是为了向大家保证,我们非常清楚您所面临的问题,虽然 4.7 版本本身不包含大量工具来解决规避问题,但我们已经认真对待这一点在后台处理这个。感谢大家的耐心等待,因为我们的研究团队已经站稳脚跟,研究工作也在加紧。
现在,回到 4.7 版本的细节。毕竟,这就是你来这里的目的。
SOCKS5 代理服务器支持
此版本实现了一个流行的功能请求——对 SOCKS5 的支持。与其完全替换 SOCKS4a,不如在启动 SOCKS 时选择是使用 SOCKS4a 还是 SOCKS5。进行了许多更改,包括更新“启动 SOCKS”对话框以使您能够在 SOCKS4a 和 SOCKS5 之间进行选择(以及如果选择了 SOCKS5,则输入所需的参数),更新代理枢轴表以显示是否正在使用 SOCKS4a 或 SOCKS5,更新了 Beacon 控制台中启动和停止 SOCKS 的命令,以及更新了bsocks Aggressor脚本命令。有关新命令行选项的详细信息,请在 Beacon 控制台中运行help socks 。有关更改的一般详细信息,请参阅文档。
需要注意的是,这些更改目前仅添加了对 DNS 解析和 UDP 的支持。在此版本中,我们没有添加对 IPv6 或 GSSAPI 身份验证的支持,因为我们从您那里得到的反馈是这些功能并不重要。当然,我们将继续监控反馈,并在您指出添加这些功能很重要时添加对这些功能的支持。我们还打算在未来的版本中进行其他更改,包括将 SOCKS5 与 Beacon 分离,这将提高速度和可靠性。不过,这是一个更大的变化,我们在此版本中的首要任务是添加此初始支持。
增加 BOF 如何在内存中存在的灵活性
Beacon 对象文件是 Cobalt Strike 的一个关键特性。我们增加了关于 Beacon 对象文件如何在内存中存在的更多可塑性,这应该使它们更难被指纹识别。为此,添加了两个新的 Malleable C2 配置文件设置:
bof_allocator
控制如何为 BOF 分配内存。支持的设置是VirtualAlloc、MapViewOfFile和HeapAlloc。
bof_reuse_memory
确定是否释放内存。如果此设置为“true”,则内存被清除,然后重新用于下一次 BOF 执行;如果此设置为“false”,则根据 bof_allocator 设置释放内存并使用适当的内存释放功能。
内存权限(RWX/RX 或 RW/RX)根据上述新的 Malleable C2 配置文件设置中设置的值进行设置。HeapAlloc 是个例外,它始终是 RWX。
回顾 VirtualAlloc RWX/RX 内存的 BOF 使用情况
增加 BOF 如何在内存中存在的灵活性为我们提供了解决我们积压的另一个项目的方法。我们添加了对 BOF 的其他重定位类型的支持,特别是 .xdata、.pdata 和 .bss 部分。这一变化首先意味着解决了一个问题,即 BOF 有时无法运行,因为地址偏移量大于 4GB。其次,可用动态函数的数量从 32 个增加到 64 个。
Sleep更新
睡眠面罩套件和一般睡眠方面已进行了更改。
主要变化是您现在可以覆盖 Beacon 进入睡眠状态时调用的方法。从 4.4 到 4.6,Beacon 将调用修补到 .text 部分的睡眠掩码函数。这有一些缺点,因为您受限于如何将代码写入用于编写 BOF 的 sleep_mask.c 文件中,并且还有一个与大小限制相关的问题。在此版本中,Beacon 已经过重新设计,以添加对您在 BOF 中可以在睡眠中执行的所有操作的支持。您现在不仅可以使用自己的 sleep 函数,还可以调用动态函数 (LIBRARY$function) 和 Beacon API 函数(当 Beacon 代码未被屏蔽时)。
此更改还有两个其他好处值得强调:
可执行代码现在不再位于 Beacon 的 .text 部分,而是移至不同的内存区域。
睡眠掩码 BOF 大小限制已从 769 字节增加到 8192 字节。
与此相关的是,虽然阿森纳套件仍支持旧版本的睡眠面罩,但此版本增加了对将睡眠面罩实现为真正的 BOF 的支持。您需要提取更新后的阿森纳套件才能使用此功能。
窃取令牌(Token)更新
steal_token函数已更新,使其能够从以前无法访问的进程中窃取令牌。一位用户报告说,当 Beacon 使用 OpenProcessToken 请求TOKEN_ALL_ACCESS时,在某些情况下这会返回拒绝访问错误。当 Beacon 调用 OpenProcessToken 时,手动调整权限足以让他们让窃取令牌成功。
我们采纳了此反馈,您现在可以在调用steal_token时自定义访问掩码。为了促进这一点,已经进行了许多更改:
一个steal_token_access_mask选项已添加到Malleable C2 配置文件中。这是可选的,允许您设置用于Steal_token和bsteal_token的默认访问掩码。
添加了支持以允许您在从命令行调用steal_token和bsteal_token时设置访问掩码(并覆盖默认值) 。
Steal Token 对话框已更新,允许您设置访问掩码(并覆盖默认值)。这适用于在打开对话框之前同时选择了单个进程和多个进程的情况。
请注意,如果没有提供访问掩码的默认值(通过新的 Malleable C2 配置文件选项、对话框选项或命令行选项),steal_token 将默认为 TOKEN_ALL_ACCESS 的当前访问掩码。
模块踩踏(Module Stomping )更新
根据用户反馈,对模块踩踏进行了小幅改动。在某些情况下,尽管模块已加载,但实际踩踏失败,因为 Beacon 仍保留在虚拟内存中。这是因为除非导出函数的序数值介于 1 和 15 之间,否则 Beacon 将默认使用 VirtualAlloc。现在,通过在设置中添加可选语法以在搜索导出函数时指定起始序数,此限制已得到解决。
剪贴板窃取者(Clipboard Stealer)
您现在可以通过命令 ( clipboard ) 或 Aggressor 脚本命令 ( bclipboard ) 窃取目标系统上 Windows 剪贴板的内容),但需要注意的是:此功能仅在剪贴板包含文本(例如凭证材料)时才有用。这是一个快速更改,预期用例适用于使用密码管理器(或类似工具)观察到目标以获取密码的情况;然后,您就可以从剪贴板复制该密码(或其他相关材料)以供使用。如果剪贴板上有文本,则返回并显示;如果没有,将显示一个错误,通知您剪贴板内容不是基于文本的。例外情况是,如果剪贴板内容超过 204800 字节,则会返回错误。
虽然这是一个范围有限的快速更改,但我们可能会在未来的版本中增强此功能。我们可以采用许多有趣的方向,我们很想听听您的反馈。
用户界面/默认攻击者脚本更新
此版本对客户端 UI 的外观和感觉进行了更新(尽管不是我们仍在为未来版本考虑的全面大修),同时对默认攻击者脚本进行了一些更改,从而引入了一些可用性改进。您可能会认出一些默认的 Aggressor 脚本更改,因为其中一些更改是受到mgeeky 的“cobalt-arsenal” Aggressor 脚本的启发(偶然可以在Cobalt Strike 社区工具包中找到)。虽然我们也添加了我们自己的更改并以我们自己的方式实现了一些东西,但我们非常感谢 mgeeky 允许将其中一些功能带入 Cobalt Strike 本身。
我们在这方面做了一些改变。以下是一些亮点:
黑暗模式
最引人注目的变化(也是最需要的变化之一)是增加了暗模式。这可以通过新的菜单选项进行切换。
Sleep Time 跟踪
睡眠时间跟踪通过记录每个 Beacon 的睡眠时间并将其显示在 Beacon 表视图的新列中来工作。此信息在团队服务器重新启动之间保留,因此它应该始终可用。
信标健康(Beacon Health)跟踪
与睡眠时间跟踪相关的是新的 Beacon Health 跟踪功能。此功能使用睡眠时间并将其与上次签入时间交叉引用,以确定信标是处于活动状态、断开连接还是死亡。此信息显示在 Beacon 表视图中并反映在 Beacon 的图标中。可以通过首选项对话框上的新选项启用或禁用此功能。
图标(Icon)更新
说到图标,我们更新了透视图和 Beacon 表视图中使用的图标,以表示 Beacon 状态和操作系统类型。
工具栏和菜单更新
我们还更新了客户端工具栏上的图标,并删除了一些不太受欢迎的功能的工具栏按钮。与此更改相关的是,主菜单已重新组织,将菜单扁平化并将一些选项移动到更有用和更直观的位置。
批量有效负载(Bulk Payload)生成
与菜单重组相关,我们添加了一个新菜单项,允许您一次为所有可用的有效负载变体生成 x86 和 x64 无阶段有效负载。还添加了一个新的睡眠函数all_payloads以允许您从命令行执行此操作。
具有退出选项的无阶段有效负载(Stageless Payload)生成器
我们添加了一个无阶段有效负载生成器对话框,允许您将“线程”或“进程”设置为退出选项。
Windows 错误代码解决方案
Windows 错误代码现在可以自动解析和解决,因此您不再需要记住每个 Windows 错误代码或在 Beacon 刚刚返回错误代码时去查找它。相关的错误消息现在显示在错误代码旁边。我们还添加了一个新的 Beacon 控制台命令 ( windows_error_code ) 和一个 Aggressor 脚本函数 ( windows_error_code ),可用于按需将错误代码转换为消息。
进程列表显示更新
ps命令的输出已得到增强,以解决父/子关系并将进程列表显示为树视图,而不是旧的平面版本。Beacon 进程显示为黄色。我们还计划在未来的版本中通过更多颜色编码来增强这一点。
还实现了许多其他 UI 更改,包括在信标和事件状态栏中显示更多信息、显示时间戳、更容易与信标交互、新的“导入凭据”选项等等。
要查看 Cobalt Strike 4.7 新功能的完整列表,请查看发行说明。获得许可的用户可以 运行更新程序以获取最新版本,或从网站 从头下载 4.7 版本。如需购买 Cobalt Strike 或了解更多信息,请 联系我们。