mcpField
G
ghost-proxy

ghost-proxy

github.com/ghostsecurityセキュリティ4274.0k 回インストール4 週間前に更新
リポジトリ

ghost-proxy について

ghost-proxy は、アプリケーションのセキュリティテストに Reaper を使うコマンドラインスキルです。Reaper は HTTP/HTTPS 通信を傍受し、リクエストとレスポンスの検索や確認を行えます。

主な機能

  1. 01範囲を指定した HTTPS 通信の傍受
  2. 02通信の記録と検索
  3. 03生のリクエストとレスポンスの確認
  4. 04プロキシの起動と停止

活用シーン

  1. 01セキュリティテスト中のアプリケーション通信の取得
  2. 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 スキルと併用する場合(テスト環境の設定についてユーザーとの連携が必要になることがあります):

  1. アプリケーションのドメインを指定して reaper を起動します
  2. reaper logs を実行してトラフィックが取得されていることを確認します。テストリクエストをプロキシ経由で送信すると、少なくとも 1 件のエントリが表示されるはずです
  3. エントリが表示されない場合は、プロキシの設定とドメインのスコープが対象と一致していることを確認します
  4. 一般ユーザーとして認証する(またはユーザーに認証してもらう)とともに、脆弱なエンドポイントを正規の方法で操作します
  5. 取得したリクエストを検索し、想定されるリクエスト形式を把握します
  6. 指摘事項に記載されたエクスプロイトを実行する、悪意のあるリクエストを作成して送信します
  7. レスポンスを検査し、エクスプロイトが成功したかどうかを判断します
  8. reaper get <id> を使用して、証拠としてリクエストとレスポンス全体を取得します

データの保存

すべてのデータは ~/.ghost/reaper/ に保存されます:

  • reaper.db - 取得したエントリを格納する SQLite データベース
  • reaper.sock - CLI とデーモン間の IPC に使用する Unix ソケット
  • reaper.pid - デーモンのプロセス ID

CA 証明書は起動するたびにメモリ上で新たに生成され、永続化されません。

コメント