mcpField
C
c2-beacon-analysis

c2-beacon-analysis

github.com/wgpsec安全1.8k43 次安装4 天前更新
代码仓库

关于 c2-beacon-analysis

面向红队和防御分析人员的 C2 Beacon 配置提取与分析方法,涵盖样本识别、配置解析、内存扫描和流量特征推导,并给出检测签名示例及 OPSEC 反思要点。

主要功能

  1. 01识别多种 C2 框架样本
  2. 02提取 Cobalt Strike 配置
  3. 03扫描内存中的 Beacon
  4. 04分析 Beacon 网络流量特征
  5. 05生成 Suricata 检测签名参考
  6. 06梳理配置暴露与 OPSEC 要点

适用场景

  1. 01分析捕获的 Beacon 文件或内存转储
  2. 02从网络流量推导 C2 特征
  3. 03为 Suricata 规则编写提供线索
  4. 04审视 C2 配置中的可识别特征

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/wgpsec/aboutsecurity --skill c2-beacon-analysis

安装后在 Claude Code 中输入/c2-beacon-analysis确认已加载。

附带文件references/cs-beacon-decrypt.mdreferences/modern-c2-analysis.md

详细介绍

来自项目 README

C2 Beacon 配置提取与分析

红队价值:了解 Beacon 泄露哪些配置信息 → 定制 Malleable Profile → 加强 C2 OPSEC

⛔ 深入参考


Phase 1: Beacon 类型识别

捕获的样本类型?
├─ PE/DLL 文件 → Phase 2(配置提取)
├─ Shellcode → Phase 2(需先识别 stage)
├─ 内存 dump → Phase 3(内存扫描)
├─ PCAP 流量 → Phase 4(流量解码)
└─ 进程 dump(MiniDump)→ Phase 3

快速识别 C2 框架:

# YARA 扫描识别框架
yara -r c2_rules.yar sample.bin

# 字符串特征
strings sample.bin | grep -iE "(beacon|sleeptime|jitter|watermark|pipe)"   # CS
strings sample.bin | grep -iE "(sliver|implant|mtls|wg)"                   # Sliver
strings sample.bin | grep -iE "(havoc|demon|teamserver)"                   # Havoc

Phase 2: Cobalt Strike Beacon 配置提取

自动提取(首选)
from dissect.cobaltstrike.beacon import BeaconConfig
import json

configs = list(BeaconConfig.from_path("beacon.bin"))
for cfg in configs:
    settings = cfg.as_dict()
    # 关键字段
    print(f"C2 Server:   {settings.get('SETTING_DOMAINS')}")
    print(f"Port:        {settings.get('SETTING_PORT')}")
    print(f"Sleep:       {settings.get('SETTING_SLEEPTIME')}ms")
    print(f"Jitter:      {settings.get('SETTING_JITTER')}%")
    print(f"User-Agent:  {settings.get('SETTING_USERAGENT')}")
    print(f"Watermark:   {settings.get('SETTING_WATERMARK')}")
    print(f"SpawnTo x64: {settings.get('SETTING_SPAWNTO_X64')}")
    print(f"PipeName:    {settings.get('SETTING_PIPENAME')}")
    print(f"BeaconType:  {settings.get('SETTING_BEACONTYPE')}")  # 0=HTTP,1=HTTPS,8=DNS
手动解密(自动工具失败时)
import struct

def decrypt_cs_config(data):
    """手动 XOR 解密 CS Beacon 配置"""
    # CS4: XOR key 0x2e, CS3: XOR key 0x69
    for xor_key in [0x2e, 0x69]:
        # 搜索加密后的 magic: 0x0001 0x0002 (BeaconType, Short)
        magic = bytes([0x00 ^ xor_key, 0x01 ^ xor_key,
                       0x00 ^ xor_key, 0x02 ^ xor_key])
        offset = data.find(magic)
        if offset != -1:
            config_blob = bytes([b ^ xor_key for b in data[offset:offset+4096]])
            return parse_tlv(config_blob)
    return None

def parse_tlv(data):
    """解析 TLV 格式配置"""
    FIELDS = {1:"BeaconType", 2:"Port", 3:"SleepTime", 5:"Jitter",
              8:"C2Server", 9:"UserAgent", 10:"PostURI", 26:"Watermark",
              36:"PipeName", 54:"SpawnTo_x64", 55:"SpawnTo_x86"}
    results = {}
    pos = 0
    while pos + 6 <= len(data):
        ftype = struct.unpack(">H", data[pos:pos+2])[0]
        dtype = struct.unpack(">H", data[pos+2:pos+4])[0]
        flen = struct.unpack(">H", data[pos+4:pos+6])[0]
        if ftype == 0: break
        val = data[pos+6:pos+6+flen]
        name = FIELDS.get(ftype, f"0x{ftype:04x}")
        if dtype == 3:  # string
            results[name] = val.rstrip(b'\x00').decode(errors='replace')
        elif dtype == 2:  # int
            results[name] = struct.unpack(">I", val[:4])[0]
        elif dtype == 1:  # short
            results[name] = struct.unpack(">H", val[:2])[0]
        pos += 6 + flen
    return results

Phase 3: 内存扫描提取

# Volatility3 扫描进程内存
vol3 -f memory.dmp windows.memmap --pid <PID> --dump
# 对 dump 出的文件用 Phase 2 方法提取

# 1768.py (JPCERT) — 专门的 CS config 扫描
python3 1768.py -f memory.dmp

# CobaltStrikeParser 扫描内存
python3 parse_beacon_config.py memory.dmp

Phase 4: 网络流量分析

从 Beacon 配置推导网络签名:
├─ HTTP(S) Beacon → URI 路径 + UA + Host Header + 心跳间隔
├─ DNS Beacon → DNS 查询模式 + 子域名编码方式
├─ SMB Beacon → Named Pipe 名称
└─ TCP Beacon → 端口 + 协议特征

生成检测签名示例:

# Suricata
alert http any any -> any any (msg:"CS Beacon URI";
  content:"/api/v1/check"; http_uri;
  content:"Mozilla/5.0"; http_user_agent;
  threshold:type both, track by_src, count 5, seconds 300;
  sid:1000001; rev:1;)

Phase 5: 红队 OPSEC 反思

分析结果 → 你的 C2 应该避免以下暴露:

暴露点对策
默认 Watermark用合法 license 或 patch 掉
固定 User-AgentMalleable Profile 随机化
固定 URI 路径模仿真实业务 API
默认 Named Pipe \\.\pipe\msagent_*自定义管道名
默认 SpawnTo rundll32.exe改为 svchost.exe 或其他合法进程
固定 Sleep+Jitter增加 Jitter 到 30%+
XOR key 已知(0x2e/0x69)使用 Sleep Mask + 堆加密

工具速查

工具用途
dissect.cobaltstrikePython CS 配置解析
CobaltStrikeParser (S1)CS Beacon 配置提取
1768.py (JPCERT)CS 扫描器
BeaconEye内存实时扫描 CS Beacon
Volatility3内存取证
YARA签名匹配

评论

支持 Markdown