概要
まず、ZAPのGUI(Windows)を使用してコンテキストファイルを作成する。
(zap2.7で作ったコンテキストをweekly版でも使用可能だった)
その後zap-cliにコンテキストの設定情報を読み込ましScanを実行する。
1.contextの作成準備(zapのGUIを使用)
ブラウザにプロキシとして設定する
OWASP ZAPを起動させ、設定済みのプロキシ用アドレス(127.0.0.1)とポートを入力します。
Scan用サイトへアクセス(ZAP Proxy機能を経由)
履歴タブにURLが記録するためScan用Webサイトにアクセスする。
Scan用サイトへログイン(Authentication設定用)
ついでに、wordPressのログイン認証を実施する。
ログイン後画面
2.ZAP(GUI)でcontext作成
※おそらく下記の全設定は不要だが、最低限必要な設定は絞り込めていない※
アクセス履歴確認
Scan対象URLをコンテキストへ追加
コンテキスト内の認証設定
①左のアクセス履歴からPOSTの履歴を選択
②リクエストタブを選択し、表示されるPOSTデータにログインユーザ名/Passwordが記載されていることを確認
③ユーザ名とパスワードに紐づくパラメータを確認
log : ユーザ名 pwd : Password という変数に紐づくパラメータであることがわかる。
認証設定へ追加
"Flag as Context" から URLを登録したコンテキストを選択
認証用パラメータを入力 
【自動入力】
・Authentication Method (認証方法の種類)
・Login Form Target URL (ログインするURL)
・Login Request POST Data (ログイン時に送信するデータ)
【手動入力】
・Username Parameter (ユーザ名)
・Password Parameter (パスワード)
・Logged In Indicator Pattern / Logged Out Indicator Pattern ※どちらか片方で良い
⇒とりあえずログインを示す文字を入力(今回はlogoutという文字を選択※適当)
ユーザ登録
ログインする時に使用するユーザ名とパスワードを入力して[追加]ボタンを押します。
Forced Userの登録
自動認証で使用するユーザ選択
Session Management設定
3.contextのエクスポート
保存先とファイル名を指定し保存する。
設定情報をメモする
コンテキストファイルをメモ帳で開き、コンテキスト名と認証用のUser名を控える。
後述のzap-cliのオプション機能で使用する。
■コンテキスト名
<context>
<name>context</name>
<desc/>
<inscope>true</inscope>
<incregexes>http://192.168.20.161.*
<tech>
■USER
ユーザ登録で追加した名前
※実際にLoginのPOSTリクエストを再送信してみる
再送信を選択
POSTデータの確認
レスポンス情報の確認
logoutに関する情報が読み取れるため、この時点では問題なく使えるLOGIN情報ということがわかる。
※パスワードを変更してログイン不可のデータを再送信
リクエストデータの修正
レスポンス確認
正常の場合と異なるレスポンスが帰ってきていることがわかる。
4.contextのインポート設定追加
contextファイルを Docker(ZAP)が動作するサーバへファイル転送を実施
[root@sv01 contexts]# ls
contexts.context
root@a2ede6b7ad63:/zap# zap-cli context --help
Usage: zap-cli context [OPTIONS] COMMAND [ARGS]...
Group of commands to manage the contexts for the current session.
Options:
--help Show this message and exit.
Commands:
exclude Exclude a pattern from a given context.
export Export a given context to a file.
import Import a saved context file.
include Include a pattern in a given context.
info Get info about the given context.
list List the available contexts.
new Create a new context.
users List the users available for a given context.
root@a2ede6b7ad63:/zap#
5.Scanの実行結果
■Scan実施用シェル
※contextのインポートを9行目(status -t 120)の前で実施すると、なぜかエラーで実施できなかったので open-url確認後に実施するようにしている。
spiderとactive-scanは、前手順でメモした名前を指定する。
#!/bin/sh
CONTAINER_ID=$(docker run -v $(pwd):/zap/wrk/:rw -u root -p 8080:8080 -i -d owasp/zap2docker-weekly zap.sh -daemon -host 0.0.0.0 -port 8080 -config api.disablekey=true -config api.addrs.addr.name=.* -config api.addrs.addr.regex=true)
#target
TARGET_URL=$1
#SCAN start
docker exec $CONTAINER_ID zap-cli -p 8080 status -t 120
docker exec $CONTAINER_ID zap-cli -p 8080 open-url $TARGET_URL
docker exec $CONTAINER_ID zap-cli context import /zap/contexts/contexts.context
docker exec $CONTAINER_ID zap-cli -p 8080 spider -c context -u user01 /zap/contexts/contexts.context -u user01 $TARGET_URL
docker exec $CONTAINER_ID zap-cli -p 8080 active-scan active-scan -c context -u user01 -r $TARGET_URL
#Output
docker exec $CONTAINER_ID zap-cli -p 8080 alerts
docker exec $CONTAINER_ID zap-cli report -f xml -o /zap/wrk/testreport_$(date +%Y%m%d).xml
#docker削除
docker logs $CONTAINER_ID
docker stop $CONTAINER_ID
docker rm -f $CONTAINER_ID
※CONTAINER_IDの取得で、参考にしたサイトの実施コマンドでも取得できるがコンテナが起動し
zap-cli確認
contextのユーザ設定は反映されたScanとなっていそうだった。
が、計測結果が分かるのが半日以上の時間かかりdocker logの結果もタイムアウト、いろいろとエラーが出ているので正確なデータとなるのかは微妙かも。
spiderやActiveScanで継続時間や調査対象の階層の指定方法が不明なので指定方法があればいいのだが。。
[root@sv01 ~]# ./test.sh http://192.168.20.161 ※ここでスキャン対象を入力
[INFO] ZAP is running
[INFO] Accessing URL http://192.168.20.161
[INFO] Imported context from /zap/contexts/contexts.context
[INFO] Running spider...
[INFO] Running an active scan...
[INFO] Issues found: 41
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Alert | Risk | CWE ID | URL |
+==============================+========+==========+===================================================================================================+
| Source Code Disclosure - SVN | High | 541 | http://192.168.20.161/search/feed |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/account |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/archives |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/archives/1 |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/archives/author |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/archives/author/user |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/archives/category |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/archives/category/%e6%9c%aa%e5%88%86%e9%a1%9e |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/archives/date |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/archives/date/2017 |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/archives/date/2017/10 |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/comments |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/logout |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/members |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/membership-join |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/membership-join/membership-registration |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/membership-login |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/membership-login |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/membership-login/membership-profile |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/membership-login/password-reset |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/membership-login/password-reset |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/membership-login |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/membership-login/password-reset |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/membership-login |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/membership-login/password-reset |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/page |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/page/2?s |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/password-reset |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/register |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/sample-page |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/search |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/search/feed |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/user |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/sitemap.xml |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/wp-login.php |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/wp-login.php?action=lostpassword |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/wp-login.php?action=lostpassword |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/wp-login.php |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/wp-login.php?redirect_to=http%3A%2F%2F192.168.20.161%2Farchives%2F1 |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/wp-login.php?reauth=1&redirect_to=http%3A%2F%2F192.168.20.161%2Fwp-admin%2F |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
| Anti CSRF Tokens Scanner | High | 352 | http://192.168.20.161/%e3%82%a2%e3%82%af%e3%83%86%e3%82%a3%e3%83%93%e3%83%86%e3%82%a3 |
+------------------------------+--------+----------+---------------------------------------------------------------------------------------------------+
[INFO] Report saved to "/zap/wrk/testreport_20171226.xml"