🕵️‍♀️

API vulnerability scan I'm working on

2024/10/02に公開

Web App の脆弱性テストについて。

前職で ZAP の Baseline Scan [1] を流したことはある。

しかし、ZAP API [2] について詳しく学ぶことはなかった。今回、改めて ZAP API について学んだため、覚え書きとして残す。

zaproxy を起動

  • 今回は dind で起動している。Network はホスト側のネットワークを使用する。
docker run --name zap -u zap -p 8090:8090 --network="host"  -i zaproxy/zap-stable zap.sh -daemon -port 8090 -config api.addrs.addr.name=.* -config api.addrs.addr.regex=true -config api.disablekey=true

コンテキストの作成

  • スキャンする URL をコンテキストと言う。
  • コンテキストを作成し、そのコンテキストに対して特定の URL パターンを含めて、セキュリティ スキャンなどに適用する準備を整える。
export MY_CONTEXT=hoge
echo $MY_CONTEXT

curl -X GET "http://localhost:8090/JSON/context/action/newContext/?contextName=$MY_CONTEXT"
curl -X GET "http://localhost:8090/JSON/context/action/includeInContext/?contextName=$MY_CONTEXT&regex=http%3A%2F%2Flocalhost%3A3000%2F.*"

スパイダリング (Spider)

  • http://localhost:3000/ 以下のページを自動でクローリングし、リンクを辿って探索する。
curl -X GET "http://localhost:8090/JSON/spider/action/scan/?url=http://localhost:3000/&contextName=$MY_CONTEXT"

アクティブスキャン (Active Scan)

  • http://localhost:3000/ 以下のURLに対して、脆弱性を検出するためのセキュリティ テストを実施する。
curl -X GET "http://localhost:8090/JSON/ascan/action/scan/?url=http://localhost:3000/&recurse=true&inScopeOnly=true&contextName=$MY_CONTEXT"

アラートの要約を取得

  • http://localhost:3000/ に対するセキュリティ アラートの要約。アラートのレベル( High Low Medium Informational)が含まれる。
curl -X GET "http://localhost:8090/JSON/core/view/alertsSummary/?baseurl=http://localhost:3000/"

詳細なアラート情報を取得

  • http://localhost:3000/ に関連するアラート情報を最大 N 件取得。
  • JSON を DuckDB [3] などで参照すると、必要なアラート レベルごとの調査ができる。件数をカウントしたり、条件で絞ったり。
curl -X GET "http://localhost:8090/JSON/core/view/alerts/?baseurl=http://localhost:3000/&start=0&count=100" | jq > zap.json

Quick Note

10月は、久しぶりに Rust をやってみる予定。

https://gihyo.jp/book/2024/978-4-297-14413-5

しかし、今のところ、職場で Rust が役立つ予定は無い。

脚注
  1. https://www.zaproxy.org/docs/docker/baseline-scan/ ↩︎

  2. https://www.zaproxy.org/docs/api/ ↩︎

  3. https://duckdb.org/docs/ ↩︎

GitHubで編集を提案

Discussion