Zed Attack Proxy (ZAP) との統合¶
OWASP Zed Attack Proxy (ZAP) は、オープンソースの Web アプリケーション スキャナーであり、Web アプリケーションの自動セキュリティ スキャン分野では、事実上の業界標準です。
ZAP の優先することとアプローチは、Mayhem とは大幅に異なります。Mayhem と ZAP は相互を補完するものと考えられます。API に対してすでに ZAP を実行しているなら、Mayhem を使えばより高いカバレッジを得られますし、すでに Mayhem を使用しているなら、ZAP は多数の潜在的問題、特に構成や運用上の問題をレポートするでしょう。
2 つのツールは互いをよく補完するため、Mayhem の API テストと並行して ZAP の API Scanを実行する非常に簡単な方法が用意されています。既存の呼び出しに --zap
を追加するだけです。
mapi run [...] --zap
すると、次のように、Mayhem API テストの問題とともに ZAP の問題レポートが表示されます。
技術的な詳細を知りたい場合、またはより高度なオプションを知りたい場合はこの先を読んでください。しかし実際のところ、必要なことはこれですべてです。実際に試してみてください。
詳細¶
ZAP と ZAP API Scan の違い¶
統合されている ZAP API Scan は完全な ZAP スイートではありません。ZAP スイートのサブセットであり、Mayhem と同様に API 仕様を基に動作します。完全な ZAP スイートは、Web アプリケーションを全体として検査します。ZAP API Scan および Mayhem はより狭い範囲にフォーカスし、API バックエンドを対象とします。
Docker が必要¶
ZAP との統合は動作する Docker 環境を前提としています (単純に、Docker は ZAP ツールチェーンのすべての推移的依存関係を管理するとびぬけて簡単な方法だからです)。これらの依存関係は --zap
フラグ固有の要件であり、Mayhem を実行するための全般的な要件ではありません。
OpenAPI 3.1 未サポート¶
ZAP はまだ OpenAPI 3.1 サポートを実装していません。
Mayhem で許容される他の仕様フォーマット (OpenAPI 2.x、OpenAPI 3.0、Postman および HAR) は動作するはずですが、仕様が OAS 3.1 機能を使用している場合、ZAP のサポートが更新されるまで、ZAP は動作しません。
ヘッダー認証のみサポート¶
Mayhem はいくつかの認証方法をサポートしていますが、現時点では --header-auth
だけが正常に ZAP に伝搬されます。
ZAP の生の結果の変換¶
Mayhem のデータ モデルに合わせるため、生の ZAP の結果はいくつかの点で変更され、フィルタリングされます。
まず、ZAP の問題の構成は Mayhem とは異なります。アラート (おおよそ Mayhem の「ルール」に相当します) があり、各アラートに 1 つまたはそれ以上の「インスタンス」があります。API 指向の Mayhem は、課題をエンドポイントごとに分類します。ZAP の結果を Mayhem のモデルにマッピングするため、各 ZAP アラートの「インスタンス」ごとにエンドポイントに関連する問題を作成します。
次に、私たちの経験上、最低リスクの ZAP アラートは、特に API に適用した場合、ノイズの割合が非常に高くなります。そのため、デフォルトでは最低リスクの ZAP アラートはフィルタリングされます。この動作が望ましくない場合、--zap_min_risk_code
フラグを使用してデフォルトの設定を調整できます。
--zap
がデフォルトではない理由¶
私たちは、Mayhem を特別な設定なしに API 開発者が毎日使えて、CI/CD パイプラインのゲート ステップとして追加できるツールにすることに尽力しています。そのため、実際に問題であり、解決可能であることが確実な問題だけをレポートするよう最大限に努力しています。
いっぽう、ZAP は問題の可能性があるあらゆる事項をレポートします。ZAP の結果は、注目すべきものであり有用でもありますが、開発者による選別を必要とするため、(通常は) CI/CD ゲートとしては利用できません。
そのため、デフォルトでは ZAP の結果は含まれませんが、定期的に結果を取得するのが容易であるようにしています。
独自の結果の取り込み¶
すでに ZAP を実行しており、ZAP と Mayhem API テストの問題レポートを統合したい場合、Mayhem から ZAP を呼び出すのではなく、ZAP の結果 JSON ファイルをランに取り込むことができます。それには、--zap-import-json-results
コマンドライン フラグを使用します。