AutoswaggerはIntruderが提供するコマンドラインツールで、Swagger/OpenAPI仕様の発見、解析、テストを自動化し、認証されていないエンドポイントやデータ漏洩リスクを明らかにします。仕様ファイルを特定し、パスやメソッドを抽出、大規模にエンドポイントをテストし、個人を特定できる情報や秘密情報を含む出力を検出します。このツールは、複数の発見フェーズと並行テスト、PresidioによるPII検出、正規表現による秘密情報のヒューリスティックを組み合わせ、手動での確認が必要なAPIテレメトリを浮き彫りにします。

主な特徴
- 多段階発見 — 仕様の直接解析、Swagger UIのスクレイピング、一般的な仕様パスのブルートフォース探索によりOpenAPIドキュメントを発見。
- 並列エンドポイントテスト — 設定可能なレート制限付きのマルチスレッドリクエストで、負荷を制御しつつスキャンを拡張。
- オプションのパラメータブルートフォーステスト — テスト値でパラメータを埋めて単純なバリデーションを回避し、隠れたレスポンスを明らかに。
- PresidioによるPII検出 — 名前、メールアドレス、電話番号、住所などのコンテキスト検出で誤検知を低減。
- 秘密情報の正規表現 — TruffleHogのようなパターンでAPIキー、トークン、デバッグ情報をレスポンスから検出。
- 柔軟な出力 — 人間に見やすいリッチテーブル出力や機械可読なJSON、興味深い結果のみをフィルタするプロダクトモード。
インストール
AutoswaggerはPython 3.7+に対応したPythonユーティリティです。インストールは標準的で、リポジトリのクローン、仮想環境の作成、依存関係のインストールを行います。以下の手順はプロジェクトドキュメントから抜粋しています。
|
git clonegit@github.com:intruder–io/autoswagger.git cd autoswagger python3–mvenv venv source venv/bin/activate pip install–rrequirements.txt |
インストールの検証と組み込みヘルプの表示:
|
python3 autoswagger.py–h |
使い方とCLI
このツールはコンパクトながら表現力のあるスイッチ群をサポートしています。リポジトリのヘルプテキストをそのまま掲載し、誤りや架空のフラグを避けています。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
usage:autoswagger.py[-h] [-v] [-risk] [-all] [-product] [-stats] [-rate RATE] [-b] [-json] [urls …] Autoswagger:Swagger/OpenAPI ドキュメントを通じて認証されていないアクセス制御の問題を検出します。 位置引数: urls ターゲットAPIのベースURLまたは仕様URL オプション: –h,—help このヘルプメッセージを表示して終了 –v,—verbose 詳細な出力を有効化 –risk テストに非GETリクエストも含める –all 結果に全HTTPステータスコードを含める(401と403を除く) –product PIIや大きなレスポンスを含むものをフラグしつつ、全エンドポイントをJSONで出力 –stats スキャン統計情報を表示。-productまたは-json使用時はJSONにも含まれる。 –rate RATE 1秒あたりのリクエスト数を設定(デフォルト: 30)。0でレート制限無効。 –b,—brute パラメータ値の網羅的テストを有効化 –json デフォルトモードで結果をJSON形式で出力 使用例: python autoswagger.py https://api.example.com -v |
発見フェーズの解説
Autoswaggerは3つの方法でAPI仕様を発見します。1つ目は.json、.yaml、.ymlで終わる直接仕様URLを指定した場合、そのファイルを解析します。2つ目は既知のSwagger UIの場所を調査し、HTMLやJavaScriptのインクルードから仕様を抽出します。3つ目は、前2つが失敗した場合、/swagger.jsonや/openapi.jsonなど標準的な仕様エンドポイントをブルートフォースします。この多角的なアプローチにより、1つの発見方法では不十分な場合でもカバレッジを高め、見落としを減らします。
エンドポイントテストモデル
デフォルトでは、Autoswaggerは高リスクな操作を避けるためGETエンドポイントのみをテストします。認可されている場合は-riskフラグで非GETメソッドも含められます。ツールはパスやクエリパラメータにデフォルトまたは指定されたテスト値を入力し、仕様にスキーマがある場合はリクエストボディを構築、設定されたリクエスト毎秒制限(-rate)を守りつつ並行してテストを実行します。レスポンスは解析され、PIIや秘密情報、サイズに基づく注目フラグが付与されます。
PIIおよび秘密情報の検出
AutoswaggerはMicrosoft Presidioを統合し、CSVヘッダーやキー・バリューパターンなど構造化された指標を用いてPIIの誤検知を低減します。秘密情報の検出は標準的なトークンやキー形式を模倣した厳選された正規表現に依存します。重要なレスポンスやコレクションもフラグされ、レビュアーが影響度の高い露出を優先できます。
攻撃シナリオ(オフェンシブユースケース)
以下はレッドチーム演習向けの純粋な攻撃シナリオです。許可されたテスト環境でのみ実行してください。
目的: 公開ステージング環境で顧客識別子やAPIキーを漏洩する認証されていないエンドポイントを特定する。
- 偵察: ターゲットのベースURLに対してAutoswaggerを実行し、
/openapi.jsonで公開されているOpenAPI仕様を発見。 - 抽出: Autoswaggerが全ての
/customers/{id}エンドポイントを解析し、クエリパラメータやオプションフィールドを列挙。 - ブルートフォース:
-bを有効にしてクエリやボディパラメータにテスト値を挿入。GET /customers/exportエンドポイントがメールアドレスや電話番号を含むCSVを返すことを発見。 - 認証情報漏洩: レスポンスにトークン正規表現に一致するデバッグフィールドが含まれており、内部キーの漏洩を示す。
-productでこの出力をフラグし、記録。 - ポストエクスプロイトテスト: 発見したパラメータの組み合わせを手動でBurp Suiteでリプレイし、再現性を確認し、報告用に影響度を測定。
防御的ガイダンス
防御側にとって、Autoswaggerは攻撃対象領域の発見と強化に有用です。実践的な対策例:
- 本番環境のOpenAPI仕様を公開しない。公開が必要な場合はアクセス制限や認証を設ける。
- 全APIレスポンスをPIIやトークン・認証情報を含むデバッグ出力がないか監査する。
- 仕様エンドポイントやSwagger UI資産への異常なアクセスパターンを監視。
/swagger.jsonや/openapi.jsonへのプログラム的な取得は、未知のホストからの場合は重要なテレメトリとして扱う。 - スキーマバリデーションやレスポンスフィルタリングで、本番レスポンスからデバッグヘッダーや内部フィールドを除去する。
他ツールとの連携
AutoswaggerはOpenAPIの発見とレスポンス解析の自動化に特化しています。より広範なAPIファジングやCI統合には、API自動セキュリティテスト用のAstraや、DevSecOps指向のAPIチェーン用OWASP APICheckを検討してください。Autoswaggerは、認証されていない仕様駆動エンドポイントを迅速に特定し、手動検証やBurp SuiteやOWASP Zed Attack Proxyなどのプロキシツールでのリプレイに適した出力を生成することで、これらのツールを補完します。
レポートと出力
-productで実行すると、PIIや秘密情報、重要なレスポンスを含むエンドポイントのみをフィルタしたJSONを生成します。-statsフラグでリクエスト数、検出ホスト数、平均リクエスト毎秒などのスキャン指標を表示。JSON出力はバグトラッカーやトリアージパイプラインへの自動取り込みにも利用できます。
注意事項と倫理
明示的な許可があるホストや環境でのみAutoswaggerを実行してください。誤検知の可能性があり、フラグされたエンドポイントは手動で検証する必要があります。初期リリースでは一部の仕様やUI実装に完全対応していない場合がありますので、必要に応じて検出用正規表現やパーサーを拡張してください。
まとめ
Autoswaggerは、OpenAPIやSwaggerドキュメントから直接導き出される認証されていないAPIエンドポイントやレスポンスベースの露出を明らかにする、実用的で特化したユーティリティです。高インパクトなデータ漏洩や秘密情報の発見に必要な労力を削減し、レッドチームの偵察やブルーチームの検証ワークフローに適合します。責任を持って使用し、APIセキュリティのための繰り返し可能な監査パイプラインに統合してください。
詳細やダウンロードはこちら: https://github.com/intruder-io/autoswagger
読者とのやりとり