ghost-proxy について
ghost-proxy は、アプリケーションのセキュリティテストに Reaper を使うコマンドラインスキルです。Reaper は HTTP/HTTPS 通信を傍受し、リクエストとレスポンスの検索や確認を行えます。
主な機能
- 01範囲を指定した HTTPS 通信の傍受
- 02通信の記録と検索
- 03生のリクエストとレスポンスの確認
- 04プロキシの起動と停止
活用シーン
- 01セキュリティテスト中のアプリケーション通信の取得
- 02セキュリティ指摘の検証に向けたリクエストの確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ ghostsecurity/ skills --skill ghost-proxyインストール後、Claude Code で/ghost-proxyを入力して読み込まれたか確認します。
詳細
Reaper MITM プロキシ
Reaper は、アプリケーションセキュリティテスト用の CLI ベースの MITM HTTPS プロキシです。通過する HTTP/HTTPS トラフィックを傍受、記録し、検査できます。セキュリティ検証のため、実際のリクエストとレスポンスのペアを取得するのに使用します。
前提条件
reaper コマンドを使用する前に、バイナリが最新バージョンでインストールされていることを確認してください。
curl -sfL https://raw.githubusercontent.com/ghostsecurity/reaper/main/scripts/install.sh | bash
~/.ghost/bin が PATH に含まれていない場合、このドキュメント内のすべての reaper コマンドは ~/.ghost/bin/reaper として実行してください。
クイックリファレンス
| コマンド | 目的 |
|---|---|
reaper start --domains example.com | プロキシを起動(フォアグラウンド) |
reaper start --domains example.com -d | プロキシを起動(デーモン) |
reaper logs | 最近取得したエントリを表示 |
reaper search --method POST --path /api/* | 取得したトラフィックを検索 |
reaper get <id> | リクエストとレスポンス全体を表示 |
reaper req <id> | 生の HTTP リクエストのみを表示 |
reaper res <id> | 生の HTTP レスポンスのみを表示 |
reaper stop | デーモンを停止 |
プロキシの起動
対象のドメインを指定して reaper を起動します。--domains または --hosts フラグを少なくとも 1 つ指定する必要があります。
# Intercept all traffic to example.com and its subdomains
reaper start --domains example.com
# Multiple domains
reaper start --domains example.com,api.internal.co
# Exact hostname matching
reaper start --hosts api.example.com
# Both domain suffix and exact host matching
reaper start --domains example.com --hosts special.internal.co
# Custom port (default: 8443)
reaper start --domains example.com --port 9090
# Run as background daemon
reaper start --domains example.com -d
スコープの動作:
--domains:サフィックス一致です。example.comはexample.com、api.example.com、sub.api.example.comに一致します--hosts:完全一致です。api.example.comはapi.example.comのみに一致します- スコープ外のトラフィックは、記録されずに透過的に通過します
プロキシ経由でのトラフィックのルーティング
HTTP クライアントがプロキシを使用するよう設定します。デフォルトのリッスンアドレスは localhost:8443 です。
# curl
curl -x http://localhost:8443 -k https://api.example.com/endpoint
# Environment variables (works with many tools)
export http_proxy=http://localhost:8443
export https_proxy=http://localhost:8443
# Python requests
import requests
requests.get("https://api.example.com/endpoint",
proxies={"http": "http://localhost:8443", "https": "http://localhost:8443"},
verify=False)
MITM TLS 傍受用に reaper が起動時に独自の CA 証明書を生成するため、-k / verify=False フラグが必要です。
取得したトラフィックの表示
最近のエントリ
# Show last 50 entries (default)
reaper logs
# Show last 200 entries
reaper logs -n 200
出力列:ID、METHOD、HOST、PATH、STATUS、MS、REQ(リクエストボディのサイズ)、RES(レスポンスボディのサイズ)。
検索
# By HTTP method
reaper search --method POST
# By host (supports * wildcard)
reaper search --host *.api.example.com
# By domain suffix
reaper search --domains example.com
# By path prefix (supports * wildcard)
reaper search --path /api/v3/transfer
# By status code
reaper search --status 200
# Combined filters
reaper search --method POST --path /api/v3/* --status 200 -n 50
個別エントリの検査
# Full request and response (raw HTTP)
reaper get 42
# Request only
reaper req 42
# Response only
reaper res 42
出力はヘッダーとボディを含む生の HTTP/1.1 形式で、分析や再送に適しています。
プロキシの停止
reaper stop
よくあるワークフロー
セキュリティ上の指摘事項の検証
validate スキルと併用する場合(テスト環境の設定についてユーザーとの連携が必要になることがあります):
- アプリケーションのドメインを指定して reaper を起動します
reaper logsを実行してトラフィックが取得されていることを確認します。テストリクエストをプロキシ経由で送信すると、少なくとも 1 件のエントリが表示されるはずです- エントリが表示されない場合は、プロキシの設定とドメインのスコープが対象と一致していることを確認します
- 一般ユーザーとして認証する(またはユーザーに認証してもらう)とともに、脆弱なエンドポイントを正規の方法で操作します
- 取得したリクエストを検索し、想定されるリクエスト形式を把握します
- 指摘事項に記載されたエクスプロイトを実行する、悪意のあるリクエストを作成して送信します
- レスポンスを検査し、エクスプロイトが成功したかどうかを判断します
reaper get <id>を使用して、証拠としてリクエストとレスポンス全体を取得します
データの保存
すべてのデータは ~/.ghost/reaper/ に保存されます:
reaper.db- 取得したエントリを格納する SQLite データベースreaper.sock- CLI とデーモン間の IPC に使用する Unix ソケットreaper.pid- デーモンのプロセス ID
CA 証明書は起動するたびにメモリ上で新たに生成され、永続化されません。