RedSiege/C2concealer
GitHub: RedSiege/C2concealer
C2concealer 是一个命令行工具,通过随机化生成 Cobalt Strike 的可变 C2 配置文件,帮助安全研究人员与红队规避静态特征检测。
Stars: 1096 | Forks: 175
# C2concealer
C2concealer 是一个命令行工具,用于生成用于 Cobalt Strike 的随机化 C2 可变配置文件。
## 安装
```
git clone https://github.com/RedSiege/C2concealer.git
cd C2concealer
python3 -m venv .venv
source .venv/bin/activate
pip3 install -e .
```
## Docker 安装
请参考 [Docker 安装说明](https://github.com/RedSiege/C2concealer/DOCKER.md)
## 示例用法
```
Usage:
$ C2concealer --hostname google.com --variant 3
Flags:
(optional)
--hostname
The hostname used in HTTP client and server side settings. Default is None.
--variant
An integer defining the number of HTTP client/server variants to generate.
Recommend between 1 and 5. Max 10.
```
## 示例控制台输出
```
root@kali:~# C2concealer --variant 1 --hostname google.com
[i] Searching for the c2lint tool on your system (part of Cobalt Strike). Might take 10-20 seconds.
[i] Found c2lint in the /opt/cobaltstrike/c2lint directory.
Choose an SSL option:
1. Self-signed SSL cert (just input a few details)
2. LetsEncrypt SSL cert (requies a temporary A record for the relevant domain to be pointed to this machine)
3. Existing keystore
4. No SSL
[?] Option [1/2/3/4]:
```
## 工作原理
我们仔细研究了 Cobalt Strike 的文档,并为每个配置文件属性定义了合理的取值范围。有时这些数据只是某个范围内的随机整数,有时则需要从 Python 字典中选取随机值。无论如何,我们从定义能够生成有效配置文件的数据开始创建工具。
接着,我们将每个可变配置文件部分(或块)分离到独立的 `.py` 文件中,这些文件包含用于为每个属性抽取合适随机值的逻辑,并输出该配置文件块的格式化字符串。我们将所有配置文件块拼接在一起,运行一些快速一致性检查,然后将配置文件通过 Cobalt Strike 的校验器(c2lint)。输出的配置文件*应该*适用于你的任务。我们始终建议在实际运行活动之前测试该配置文件(包括进程注入和进程创建)。
如果你正在查看代码,我们建议从以下两个文件开始:`/C2concealer/__main__.py` 和 `/C2concealer/profile.py`。阅读完注释后,请查看 `/C2concealer/components` 文件夹中的各个配置文件块生成器。
## 自定义工具
这一点至关重要。这是一个开源工具。供应商可以轻松地为它生成的配置文件编写特征码。在运行该工具为构建 Cobalt Strike 可变配置文件提供一个良好开端的同时,我们建议你深入研究以下领域,以自定义用于生成配置文件的数据:
/C2concealer/data/
- dns.py(自定义 DNS 子域名)
- file_type_prepend.py(自定义 HTTP GET 服务器响应的外观……也就是 C2 控制指令)
- params.py(包含常用参数名称和通用词表的两个字典)
- post_ex.py(spawn_to 进程列表……**请务必修改此项**)
- reg_headers.py(常见的 HTTP 标头,如 User-Agent 和 Server)
- smb.py(用于 SMB 通信的 SMB 管道名称)
- ssh.py(使用 SSH 信标时的 SSH 管道和横幅名称)
- stage.py(用于更改与启动器相关 IOC 的数据)
- transform.py(负载数据转换……无需修改)
- urls.py(用于构建工具各处 URI 的文件类型和 URL 路径组件……**请务必修改此项**)
此外,你可以在整个配置文件生成过程中自定义各种属性。例如,在文件 `/C2concealer/components/stageblock.py` 中,你可以修改从中抽取 PE 图像大小值的范围(大约在第 73-74 行)。请查看 components 目录下的所有不同文件。
如果你已经看到这里,那么我们知道你会从该工具中获得大量用处。我们建议将该工具视为一种骨架代码,用于自动生成这些配置文件。现在取决于你为每个活动的属性思考合理的取值并更新数据源。
## 进一步自定义你的配置文件
虽然我们已经涵盖了许多可变 C2 配置文件语言的可能选项,但仍有大量选项我们未进行设置。我们强烈建议你查阅 [Malleable Command and Control 文档](https://hstechdocs.helpsystems.com/manuals/cobaltstrike/current/userguide/content/topics/malleable-c2_main.htm#_Toc65482834) 并修改你的配置文件。
以下选项未设置,或由 C2concealer 静态设置,你应该考虑修改它们。
### `http-config` 块
| 缺失选项 | 说明 |
|---|---|
| `set block_useragents` | 阻止非信标用户代理模式 |
| `set allow_useragents` | 允许列表用户代理模式(CS 4.3+) |
### `stage` 块
| 缺失选项 | 说明 |
|---|---|
| `set allocator` | 硬编码为 `VirtualAlloc`;缺少 `HeapAlloc`、`MapViewOfFile` 的随机化 |
| `set magic_mz_x86` / `magic_mz_x64` | MZ 头伪造 |
| `set magic_pe` | PE 标记伪造 |
| `set rich_header` | 编译器元数据伪造 |
| `set module_x86` / `module_x64` | 模块植入 |
| `set copy_pe_header` | — |
| `set data_store_size` | — |
| `set eaf_bypass` | EAT 检查绕过 |
| `set syscall_method` | None/Direct/Indirect(CS 4.8+) |
| `set rdll_loader` | PrependLoader/StompLoader |
| `set rdll_use_syscalls` | — |
| `set rdll_use_driploading` | — |
| `set rdll_dripload_delay` | — |
| `transform-obfuscate` 块 | 完全缺失 `base64`、`lznt1`、`rc4`、`xor` 选项 |
| `append` 在 `transform-x86/x64` 中 | 仅使用 `prepend` 和 `strrep` |
### `process-inject` 块
| 缺失选项 | 说明 |
|---|---|
| `set allocator` | 硬编码为 `VirtualAllocEx`;缺少 `NtMapViewOfSection` 的随机化 |
| `set use_driploading` | — |
| `set dripload_delay` | — |
| `append` 在 `transform-x86/x64` 中 | 仅使用 `prepend` |
| 执行:`NtQueueApcThread` | 不在执行块中 |
| 执行:`NtQueueApcThread-s` | 不在执行块中 |
| 执行:`ObfSetThreadContext` | 不在执行块中 |
| 执行:`SetThreadContext` | 不在执行块中 |
| 执行函数伪造 | 不支持 `module!function+0x##` 语法 |
### `post-ex` 块
| 缺失选项 | 说明 |
|---|---|
| `set pipename` | 用于后执行任务的命名管道 |
### `dns-beacon` 块
| 缺失选项 | 说明 |
|---|---|
| `set ns_response` | `drop`/`idle`/`zero` NS 处理。默认为 `drop`(如果未设置) |
| `set dns_stager_prepend` | 在 staged payload 前添加数据 |
### 数据转换(所有转换上下文)
| 缺失转换 | 说明 |
|---|---|
| `lznt1` | 压缩——未在任何编码链中使用 |
| `rc4 "key"` | 加密——未在任何编码链中使用 |
| `xor "key"` | 异或——未在任何编码链中使用 |
| `uri-append` | 终止语句——未实现 |
## 版本变更日志
版本 1.0
- FortyNorth Security 内部工具的公开版本。
- 增加了对 CS 4.0(特别是多种 HTTP 变种)的支持
- 更新 README.md
版本 1.1
- 更新以包含 CS 4.12 支持的配置文件选项
- 更新浏览器用户代理字符串
- 更新 cookie 字符串为现代常用值
- 添加 SSH 横幅和 SSH 管道名称选项
- 更新 Docker 安装说明
- 修复 Let's Encrypt 支持
标签:C2混淆, C2生成, C2通信, Cobalt Strike, Docker, HTTPS流量模拟, Malleable配置文件, Python, 后渗透框架, 命令工具, 安全测试, 安全防御评估, 开源安全工具, 攻击性安全, 攻击诱捕, 无后门, 流量伪装, 网络隐蔽, 证书生成, 请求拦截, 逆向工具, 逆向工程平台, 随机化