🕵️♀️
API vulnerability scan I'm working on
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®ex=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 をやってみる予定。
しかし、今のところ、職場で Rust が役立つ予定は無い。
Discussion