C2concealer是一个命令行工具,用于生成随机的C2可塑配置文件,以在Cobalt Strike中使用
作者:Sec-Labs | 发布时间:
项目地址
https://github.com/RedSiege/C2concealer
小编推荐:C2concealer项目简介
相关技术点
- Cobalt Strike:一款流行的渗透测试工具,提供了丰富的攻击手段和C2框架,可用于模拟APT攻击和red team行动。
- Malleable C2 profiles:Cobalt Strike中的一项特性,允许使用者自定义C2通信流量,包括HTTP头、URI、参数等,使得C2流量更难被网络防御设备识别和检测。
- Docker:一种轻量级容器化技术,可将应用程序及其依赖项打包为一个独立的容器,在不同的环境中运行。
项目用途
C2concealer是一个命令行工具,可用于生成随机的Cobalt Strike Malleable C2 profiles,从而在Cobalt Strike中使用。通过C2concealer生成的C2 profiles可以使C2流量更难被网络防御设备检测和识别,提高攻击成功率。
项目特点
- 自定义SSL证书:支持自签名SSL证书、Let's Encrypt证书、已有keystore证书和无SSL四种选项,用户可根据需求选择使用。
- 多种HTTP变种:支持生成多个HTTP变种,以增加C2流量的多样性和难以被检测的性质。
- 可定制性强:用户可自行修改C2concealer中的数据源,从而生成符合个性化需求的C2 profiles。
- Docker支持:支持在Docker容器中运行,方便使用者在不同的环境中运行和部署。
C2concealer
C2concealer是一个命令行工具,用于在Cobalt Strike中生成随机的C2可塑配置文件。
安装
chmod u+x install.sh
./install.sh
构建Docker镜像
docker build -t C2concealer .
使用Docker运行
docker container run -it -v <cobalt_strike_location>:/usr/share/cobaltstrike/ C2concealer --hostname google.com --variant 3
示例用法
Usage:
$ C2concealer --hostname google.com --variant 3
Flags:
(可选)
--hostname
在HTTP客户端和服务器端设置中使用的主机名。默认为无。
--variant
定义要生成的HTTP客户端/服务器变体数量的整数。建议在1到5之间。最多10个。
示例控制台输出
root@kali:~# C2concealer --variant 1 --hostname google.com
[i] 在您的系统上搜索c2lint工具(Cobalt Strike的一部分)。可能需要10-20秒钟。
[i] 在/opt/cobaltstrike/c2lint目录中找到c2lint。
选择SSL选项:
1. 自签名SSL证书(只需输入几个详细信息)
2. LetsEncrypt SSL证书(需要将相关域的临时A记录指向此计算机)
3. 现有密钥库
4. 无SSL
[?] 选项 [1/2/3/4]:
提示:始终使用SSL证书。最好使用来自LetsEncrypt或类似服务的证书。
提示:HTTP变体允许您在不同的beacon上为http流量选择不同的IOC。建议至少设置为1。
工作原理
我们深入研究了Cobalt Strike文档,并定义了每个配置文件属性的合理值范围。有时数据只是在某个范围内的随机整数,而其他时候我们需要从Python字典中选择随机值。无论哪种方式,我们始终从定义使配置文件有效所需的数据开始工具创建。
然后,我们将每个可塑剖面部分(或块)分成单独的.py文件,其中包含为每个属性绘制随机适当值的逻辑,然后输出该剖面块的格式化字符串。我们将所有配置文件块连接在一起,运行一些快速的一致性检查,然后通过Cobalt Strike linter(c2lint)运行配置文件。输出是一份应该适用于您的任务的配置文件。我们始终建议在运行活动之前测试配置文件(包括进程注入和生成)。
如果您正在查看代码,我们建议从这两个文件开始:/C2concealer/main.py和/C2concealer/profile.py。在查看注释之后,请查看文件夹/C2concealer/components中的单个配置文件块生成器。
自定义工具
这是至关重要的。这是我们私下使用了约一年的工具的开源版本。我们的私人存储库有几个其他IOCs和完全不同的数据集。虽然运行工具为构建Cobalt Strike可塑剖面提供了一个很好的开始,但我们建议深入研究以下领域,以自定义随机填充工具的数据:
/C2concealer/data/
- dns.py(自定义dns子域)
- file_type_prepend.py(自定义http-get-server响应的方式…即c2控制指令)
- params.py(包含常见参数名称和通用单词表的两个字典)
- post_ex.py(spawn_to进程列表…一定要更改此项)
- reg_headers.py(常见http头,如用户代理和服务器)
- smb.py(smb管道名称,用于通信时走smb)
- stage.py(更改与分段器相关的IOC的数据)
- transform.py(有效负载数据变换…无需更改此项)
- urls.py(用于构建遍布整个工具的URI的文件类型和URL路径组件…一定要更改此项)
另外,您可以自定义配置文件生成过程中的各种属性。例如,在文件“/C2concealer/components/stageblock.py”中,您可以更改PE映像大小值的取值范围(接近第73-74行)。请查看组件目录中的所有不同文件。
如果您一直看到这里,那么我们知道您将充分利用这个工具。我们推荐将此工具视为我们已经构建了自动生成这些配置文件的骨架代码,现在轮到您考虑哪些值对于您的任务中每个属性是有意义的,然后更新数据源。## 致谢
特别感谢 Raphael Mudge 不断改进可塑的个人资料功能集和相关文档。还要特别感谢 @killswitch-GUI 的脚本,自动化生成 CS 团队服务器的 LetsEncrypt 证书。最后,两篇博客让我们的生活变得更加轻松:@bluescreenofjeff 的文章 (https://bluescreenofjeff.com/2017-01-24-how-to-write-malleable-c2-profiles-for-cobalt-strike/) 和 Joe Vest 的文章 (https://posts.specterops.io/a-deep-dive-into-cobalt-strike-malleable-c2-6660e33b0e0b)。
版本更新
版本 1.0
- FortyNorth Security 内部工具的公共版本。
- 增加对 CS 4.0 的支持(特别是多个 HTTP 变体)。
- 更新 README.md。