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, 后渗透框架, 命令工具, 安全测试, 安全防御评估, 开源安全工具, 攻击性安全, 攻击诱捕, 无后门, 流量伪装, 网络隐蔽, 证书生成, 请求拦截, 逆向工具, 逆向工程平台, 随机化