
Cobalt StrikeまたはSliver C2プロファイルからCaddyリダイレクタ設定を生成します。
CaddySmithは、Cobalt StrikeまたはSliverのC2プロファイルを読み取り、Caddyウェブサーバの設定を生成する小さなPythonスクリプトです。生成されたCaddyfileを使用すると、通常のLinuxボックスをリダイレクターに変えることができます。正規のビーコントラフィックはチームサーバーにリバースプロキシされ、それ以外のトラフィック(スキャナー、検索ボット、ブルーチームのプローブ、ランダムなcurlリクエスト)はデコイURLに転送されます。
CaddyはApacheよりも迅速に立ち上げられるフレンドリーなウェブサーバーであり、単一の静的バイナリ、自動Let's Encrypt証明書、a2enmodの手間が不要であるため、このツールを作成しました。
許可されたエンゲージメントのみ。 これは攻撃的セキュリティツールです。テストする書面による許可がある環境に対してのみ実行してください。
CaddySmithはファイルの内容からフォーマットを自動検出します。
set uri "/foo" ディレクティブを含む古典的なテキスト形式。各HTTP-GET / HTTP-POST URIは、プロファイルのクライアントヘッダーが適用された独自の完全一致パスルートになります。path /api* /static* /resources*)し、UA内のChromeビルド番号の部分文字列一致を行います(SliverのプラットフォームごとのUA書き換え後も維持されます)。また、--profile-type cobaltstrikeまたは--profile-type sliverで特定のパーサーを強制することもできます。
プロファイルファイルを指定すると、スクリプトは以下を抽出します。
--server-nameを指定しない場合、リダイレクターのドメイン名として使用されます)set host_stage)次に、以下のようなCaddyfileを生成します。
.env、/wp-admin、.phpなど)をブロックpip installは不要)python3 caddysmith.py my.profile \
--backend https://teamserver.internal:443 \
--decoy https://www.example.com/ \
--server-name redirector.example.com \
--email [email protected] \
--forbid-http \
-o redirector.caddy
生成された設定がredirector.caddyに書き込まれ、標準エラー出力に処理内容のサマリーが表示されます。
生成されたファイルをリダイレクターにコピーし、Caddyに対して実行します。CaddyはデフォルトでJSON設定を使用するため、--adapter caddyfileフラグが必要です。
caddy run --config /etc/caddy/redirector.caddy --adapter caddyfile
実行中のインスタンスに更新された設定を再読み込みするには:
caddy reload --config /etc/caddy/redirector.caddy --adapter caddyfile
Caddyがフォーマットの不一致について警告した場合は、以下で修正します。
caddy fmt --overwrite /etc/caddy/redirector.caddy
ファイルを/etc/caddy/に配置し、メインのCaddyfileからインポートします。
# /etc/caddy/Caddyfile
import /etc/caddy/redirector.caddy
--emailを指定した場合(推奨)、生成されたスニペットにはグローバルオプションブロックが既に含まれているので、メインのCaddyfileにはimport行のみで十分です。指定しなかった場合は、importの上に{ }ブロックでメールを手動で追加してください。
その後、検証と再読み込みを行います。
sudo caddy validate --config /etc/caddy/Caddyfile
sudo systemctl reload caddy
--server-nameで指定したドメインのAレコードがリダイレクターを指している限り、Caddyは自動的にLet's Encrypt証明書をプロビジョニングします。
通常はstrictが適切です。laxは、実際のビーコンが接続できない原因をデバッグする場合に便利です。
Amazonのエンドポイントを模倣したプロファイルがあり、redirector.0xtb.shにデプロイしたいとします。
python3 caddysmith.py amazon.profile \
--backend https://10.1.1.10:443 \
--decoy https://www.amazon.com/ \
--server-name redirector.0xtb.sh \
--forbid-http \
--policy strict \
-o /etc/caddy/redirector.caddy
サマリーには、構築されたルートが正確に表示されます。
Routes built: 2
- [profile-get] /broadcast
- [profile-post] /1/events/com.amazon.csm.csa.prod
再生成したときにルートが何も表示されない場合は、プロファイルの解析に失敗した可能性があります。標準エラー出力の警告を確認してください。
Sliverのインプラント設定(JSON)の場合:
python3 caddysmith.py sliver-implant.json \
--backend https://10.1.1.10:443 \
--decoy https://www.amazon.com/ \
--server-name redirector.0xtb.sh \
--email [email protected] \
--forbid-http \
--policy strict \
-o /etc/caddy/redirector.caddy
サマリーではSliverが検出されたことが示され、接頭辞ルートが表示されます。
Profile type: sliver
Routes built: 1
- [sliver] /api /public /resources /services /static (prefix)
Sliverはpath × file × extensionの組み合わせからランダムにURIを生成するため、生成されるpathマッチャーは完全一致パスではなく、接頭辞globを使用します(path /api* /public* /resources* /services* /static*)。User-AgentマッチャーはChromeビルド番号の部分文字列(例:3921.146)を使用します。これはSliverがプラットフォームごとのUA書き換え後も保持する値です。
# プレーンHTTPは403になるはず(--forbid-httpを使用した場合)
curl -I http://redirector.0xtb.sh/
# ベアホスト名はデコイにリダイレクトされるはず
curl -kI https://redirector.0xtb.sh/
# 悪意のあるUAもリダイレクトされるはず
curl -kI -A "curl/8.4.0" https://redirector.0xtb.sh/broadcast
# 正しいUA + パスを持つリクエストはプロキシされて200になるはず
# strictモードでは、プロファイルのすべてのクライアントヘッダーも送信する必要があります。
set host_stage "true"がある場合(または設定がない場合)、スクリプトは警告を表示し、ステージャーURIをスキップします。プロファイルにset host_stage "false";を追加するか、--extra-uriでステージャーURIを明示的に渡してください。/api、/staticなどで始まるすべてのURLを対象とします。たまたまこれらの接頭辞を使用するスキャナープローブ(例:/api/.env)はローカルでブロックされずにチームサーバーに送信されますが、Sliver自身のHTTPトランスポートはインプラントIDで認証するため、不正なリクエストはC2レイヤーで拒否されます。UAによるゲートでほとんどのスキャナーは除外されます。--backendにプロキシされます。複数のチームサーバーが必要な場合は、スクリプトを複数回実行し、手動でマージしてください。set uri "/path1 /path2";(1行に複数のパス)は機能しますが、珍しいフォーマットはパーサーで問題を起こす可能性があります。サマリーのルートリストを確認して、正しく解析されたか確認してください。tls_insecure_skip_verifyが含まれます。バックエンドが正規の証明書を使用している場合は、生成されたファイルからその行を削除してください。ApacheベースのMalleable-Redirectorは、このスクリプトが生成するものの出発点であり、同じ3トラックのURIモデル(プロファイルURI / 追加URI / 緩和URI)、同じポリシーモード、同じ一般的なレイアウトを持っています。CaddySmithは出力をApacheの.htaccessではなくCaddyの構文に変換するだけです。
MIT
| フラグ | デフォルト | 説明 |
|---|
profile | (必須) | .profileファイルへのパス |
--backend | https://teamserver.local:443 | マッチしたトラフィックのプロキシ先 |
--decoy | https://www.example.com/ | マッチしなかったトラフィックのリダイレクト先 |
--server-name | c2.example.com | リダイレクターのドメイン名 |
--policy | strict | strict、lax、またはnone |
--profile-type | auto | 強制的にcobaltstrikeまたはsliver(デフォルトは自動検出) |
--extra-uri PATH | — | プロキシする追加のURI(UAチェックあり)。繰り返し可能。 |
--lax-uri PATH | — | プロキシする追加のURI(チェックなし)。繰り返し可能。 |
--allow-ua STRING | — | --extra-uriルートで許可する追加のUA。繰り返し可能。 |
--forbid-http | off | プレーンHTTPに403を返す |
--email EMAIL | — | Let's Encrypt登録および更新通知用のメールアドレス |
-o, --output FILE | stdout | 設定をファイルに書き込む |