今天看到 cobaltstrike 官网3月7号更新到了 Cobaltstrike 4.8
这是一个新的版本,看下都更新了什么内容,以下为机器+人工翻译:
Cobalt Strike 4.8 现在已经发布。该版本支持系统调用、指定有效载荷防护的选项、新的令牌存储等等。
我们原本计划在 2022 年年底发布这个版本,但由于我们必须发布 4.7.1 和 4.7.2 补丁,以修复 4.7 版本中报告的漏洞,因此进展受阻。我们花了几个开发周期对代码进行了安全审查,并处理了一些技术问题,然后就到了假日季节。虽然现在已经到了,但迟到总比不到好!
在讨论这个版本的细节之前,我只想说,您现在应该能看到我们的更多内容来补充主要产品发布的信息。William Burgess最近发布了他加入Cobalt Strike团队后的第一篇博文,他将在为产品的未来方向提供技术指导方面发挥关键作用。在接下来的几周和几个月里,我们会有更多的博文和工具,首先是关于 UDRL 开发的系列文章(其中第一篇应在下周发布)。今年晚些时候,Cobalt Strike 本身将发生一些巨大的变化。更多细节将在不久后的后续博文中公布。我们知道,我们的用户正在为躲避问题而挣扎,并报告了其他痛点。正如我在去年的路线图更新中提到的那样,我们一直在积极地建立我们的研发团队,虽然花了一些时间来做这件事,并把所有的事情都安排好,但你现在会真正开始看到这些幕后变化的好处。
现在,回到4.8版本。
系统调用支持
这个版本增加了对直接和间接系统调用的支持。我们增加了对多个系统调用的支持,具体包括:
-
CloseHandle -
CreateFileMapping -
CreateRemoteThread -
CreateThread -
GetThreadContext -
MapViewOfFile -
OpenProcess -
OpenThread -
ResumeThread -
SetThreadContext -
UnmapViewOfFile -
VirtualAlloc -
VirtualAllocEx -
VirtualFree -
VirtualProtect -
VirtualProtectEx -
VirtualQuery
将无阶段的 Beacon 负载生成对话框进行了更新,以便您在执行时指定所要使用的系统调用方法。可用的选项包括:
None: 使用标准的 Windows API 函数
Direct: 使用 Nt*版本的函数
Indirect: 跳转到 Nt* 版本函数中的适当指令
-
elevate -
inject -
jump -
spawn -
spawnas -
spawnu -
teamserver 响应无阶段载荷请求 -
teamserver 响应外部C2载荷请求
-
IP address: 这可以是一个单一的 IP 地址,也可以是一个使用通配符来替换最右边的八位数的范围,例如: 123.123.123.123 、 123.123.123.* 、 123.123.*.* 和 123.*.* 都是有效输入。而 123.*.123.* 则不是 -
Username: 这可以是一个特定的用户名,或者你可以加前缀/后缀一个通配符(即 *user 或 user* ),用户名字段是不分大小写的 -
Server name: 同样,这可以是一个特定的服务器名称,或者你可以在前缀/后缀一个通配符(即 *server 或 server* ),服务器名称字段是不分大小写的 -
Domain: 与用户名和服务器名称一样,域名字段既可以是一个特定的域,也可以是前缀/后缀一个通配符(即 *domain 或 domain* ),域名字段也是不分大小写的。
用于混淆Beacon的反射式DLL导入表的多字节支持
这个过程的一部分涉及从固定的单字节 XOR 密钥转移到随机生成的多字节 XOR 密钥。使用单字节 XOR 掩码容易被 YARA 等工具识别和捕获。转向随机生成的多字节 XOR 密钥应该有助于解决这些问题。
-
支持使用具有 MASK_TEXT_SECTION 功能的系统调用 -
更新还为 Windows API 函数增加了定义标签,以消除需要使用 LIBRARY$Function 语法的需求。 -
通过堆栈欺骗实现迴避性睡眠(只适用于 x64 )。相关变化包括增加了控制流保护( CFG )的 Bypass ,以及增加了一个辅助工具( getFunctionOffset )
token-store steal [pid,…] <OpenProcessToken access mask>
token-store use [id]
token-store steal-and-use [pid] <OpenProcessToken access mask>
token-store show
token-store remove [id,…]
token-store remove-all
-
btoken_store_remove -
btoken_store_show -
btoken_store_steal_and_use -
btoken_store_steal -
btoken_store_remove_all -
btoken_store_use
ETW Blinding
execute-assembly "[PATCHES: [patch-rule] [patch-rule] [patch-rule] [patch-rule]]" [/path/to/file.exe] [arguments]
powerpick "[PATCHES: [patch-rule] [patch-rule] [patch-rule] [patch-rule]]" [commandlet] [arguments]
-
library 可以是 1 - 260 个字符 -
function 可以是 1-256 个字符 -
offset 是指从可执行函数的起始位置开始的偏移量,可以是 0-65535 -
hex-patch-value 可以是 2-200 个十六进制字符( 0-9 , A-F ),长度必须是偶数(十六进制对)
与产品安全相关的一个重要更新是改变了许可证到期日的处理方式。以前,在Teamerver 启动时检查过期日期,如果有效,Teamerver 就能启动,不会执行任何其他检查。并且仅有操作员关闭后,teamserver 才会停止运行。
我们已经加强了这一处理,以便每天检查许可证的过期日期。以前的行为背后的原因是,在某次任务进行中更新(以获取更新后的授权文件)并重新启动 teamserver并不总是方便的,或者在逻辑上不可能。在这种情况下,在更新后重新启动团队服务器也不方便。我们在新的处理中增加了对这些情况的缓解措施,这意味着在刷新授权文件时不会对操作产生任何影响。如果您需要在任务运行中更新许可证,请参阅文档以获取如何执行此操作的信息。但是,我们建议您在开始新任务之前考虑您的许可证过期日期,并尽可能避免出现这种情况。
为了确保您不会因为许可证到期而受到影响,我们已经在客户端UI中添加了几个新的标语。
在距离许可证到期还有 45 天时,客户端将出现警告标语,提示您的许可证即将到期以及到期时间。这条警告信息可以被忽略,但在每天检查到期日时将重新出现。这应该提供足够的时间来更新你的许可证密钥,如果这还没有被处理的话:
如果在许可证到期之前没有完成许可证续订,您将有 14 天的宽限期来完成续订。在这段宽限期内,您将看到一个无法取消的错误标语:
在宽限期结束后,如果您的许可证没有被续订并且授权文件也没有被刷新,teamserver将会关闭,并且您将无法在未续订许可证的情况下重新启动它,直到你更新了你的许可证。
便利性改进
除了已经提到的功能之外,我们还添加了许多小的改进,这些改进主要是根据用户的要求而进行的,具体如下:
增加了指定睡眠时间的灵活性
用户提出的一项小更改是使睡眠时间更容易设置。现在,你不再只能以秒为单位指定睡眠时间,而是可以分别以 "d"、"h"和 "m"为后缀来指定天、小时和分钟。
一个用法示例是:sleep 2d 13h 45m 8s 30j,它的意思是"睡眠2天13小时45分钟8秒,带有30%的抖动"
我们还增加了一个新的侵略者功能,bsleepu,其工作方式与此相同
在用户界面中显示当前的令牌
另一个用户的要求是在客户端用户界面上显示当前令牌。这与新的令牌存储很好地结合在一起,现在你可以在表视图和状态栏中看到当前的令牌(在用户名称旁边用括号括起来)
与此更改相关的是,我们还解决了 make_token 报告错误用户名称的问题(即当前 Beacon 进程的用户名称),这是由于 Windows API 限制引起的。这个问题已经解决,正确的用户名现在将出现在括号中。
从 Beacon 输出窗格复制/粘贴
我们已经添加了从 Beacon 输出窗格复制和粘贴命令的支持。
CTRL+C 复制和 CTRL+X 剪切输出窗格或命令行中的选定文本。文本只能在输出窗格或命令行中选择,两者不能同时选择。CTRL+V 将剪贴板上的文本粘贴到命令行上。这适用于任何控制台窗口(例如:Beacon控制台、SSH控制台、脚本控制台、事件日志和Web日志)
在一个Mimikatz调用中链接多个命令
mimikatz 命令已更新,支持在单个操作中链接多个命令。这也适用于bmimikatz 和 bmimikatz_small扩展功能(虽然 bmimikatz_small 仅限于lsadump::dcsync、sekurlsa::logonpasswords和sekurlsa::pth)
命令可以通过在命令之间添加分号作为分隔符来链接,例如:
mimikatz standard::coffee;standard::coffee
请注意,如果命令中需要分号,则仍然可以使用反斜杠进行转义(即";")。另外,命令的长度被限制为511个字符,以确保字符串中的最后一个字符是EOS(
评论