自動脆弱性診断を実行するまでの手順まとめ

業務で自動脆弱性診断を試す機会があったので、その際の手順をまとめてみました。
今回は OWASP ZAPを使って自動スキャンを実行する流れ を紹介します。
GUI を開かなくても、コマンド1本で診断できるので、自動化や定期実行にとても便利です。

OWASP ZAP とは?

OWASP が提供する無料の Web 脆弱性診断ツールで、
以下のような一般的なセキュリティ診断を自動で行えます。

  • クロール(Spider)
  • パッシブスキャン(ヘッダーや設定のチェック)
  • アクティブスキャン(疑似攻撃による脆弱性検査)

実行方法は、ブラウザ経由で行えるGUI 版と、CLI 版があります。
今回は、CLI版の手順になります。

事前準備

CLI スキャンは Docker を使うと環境構築が圧倒的に簡単です。

まずは ZAP の Docker イメージを取得します。

docker pull owasp/zap2docker-stable

続いて、レポートを保存するためのローカルディレクトリも作成します。

mkdir reports

ZAPのフルスキャンを実行する

CLI では主に次の 2 つを使います。

スクリプト内容
zap-baseline.py攻撃なし(パッシブ)+簡易スパイダー
zap-full-scan.py攻撃あり(アクティブ)+スパイダー

今回はzap-full-scan.pyを使ってサイト全体をスキャンします。

docker run --rm \
  -v $(pwd)/reports:/zap/reports \
  -e JAVA_OPTS="-Xmx4G" \
  owasp/zap2docker-stable \
  zap-full-scan.py \
    -t 【スキャンしたいサイトのURL】 \
    -r /zap/reports/fullscan.html

スキャンが完了すると、reportsフォルダにレポートが作成されます。

ブラウザで開くだけで、以下の情報が一覧で確認できます。

  • 脆弱性の重大度(High / Medium / Low / Info)
  • 問題のある URL と詳細
  • 診断に使われたリクエスト / レスポンス
  • 改善推奨事項

後は診断結果を確認して、各自で判断の上修正を行っていきます。

注意点として、サイトの規模によってはメモリ不足に陥りCLIがエラー終了してしまう可能性があるため、
実行の際にはリソースにゆとりを持たせた方が良いです。

例えば1000ページ程だと、最低でも4コア16GBメモリほどのスペックがあると良いそうです。