セキュリティ脆弱性試験をすることのできるOWASP ZAPです。
思っていたよりもいろいろできます。
できること
- 静的スキャン
- 動的スキャン
- スパイダー(Ajaxも対応)
- 自動認証
- ファジング
- CSRFトークン生成
- マルチブラウザ(JxBrowser/Firefox/Chrome)
- WebSocke対応
- アドオンによる拡張
- HTMLやJSONなどのレポート
※ 参考:https://www.pupha.net/archives/1358/#Ajax
インストール
https://github.com/zaproxy/zaproxy/wiki/Downloads から
Linux Installerをダウンロード
GUI上で下記を実行
$ sudo sh ./ZAP_2_7_0_unix.sh
起動
GUI
[Applications]-[Other]-[OWASP ZAP]
または
$ zap.sh
デーモン起動
$ zap.sh -daemon
その他の起動オプションは下記
https://github.com/zaproxy/zap-core-help/wiki/HelpCmdline
診断実行
GUI
- 実行中(running-1.png)
-
実行結果(running-2.png)
-
HTMLでExport(result.html)
CUI
-
ZAP CLI
https://pypi.org/project/zapcli/ -
ZAP Python client
https://github.com/zaproxy/zaproxy/wiki/ApiPython下記でインストール
$ sudo yum install python $ sudo yum -y install python-pip $ sudo pip install python-owasp-zap-v2.4
サンプルを作成
$ vi test.py 下記の通り編集 #!/usr/bin/env python import time from pprint import pprint from zapv2 import ZAPv2 target = 'http://172.17.1.31/redmine' apikey = None # Change to match the API key set in ZAP, or use None if the API key is disabled # By default ZAP API client will connect to port 8080 zap = ZAPv2(apikey=apikey) # Use the line below if ZAP is not listening on port 8080, for example, if listening on port 8090 # zap = ZAPv2(apikey=apikey, proxies={'http': 'http://127.0.0.1:8090', 'https': 'http://127.0.0.1:8090'}) # do stuff print 'Accessing target %s' % target # try have a unique enough session... zap.urlopen(target) # Give the sites tree a chance to get updated time.sleep(2) print 'Spidering target %s' % target scanid = zap.spider.scan(target) # Give the Spider a chance to start time.sleep(2) while (int(zap.spider.status(scanid)) < 100): print 'Spider progress %: ' + zap.spider.status(scanid) time.sleep(2) print 'Spider completed' # Give the passive scanner a chance to finish time.sleep(5) print 'Scanning target %s' % target scanid = zap.ascan.scan(target) while (int(zap.ascan.status(scanid)) < 100): print 'Scan progress %: ' + zap.ascan.status(scanid) time.sleep(5) print 'Scan completed' # Report the results print 'Hosts: ' + ', '.join(zap.core.hosts) print 'Alerts: ' pprint (zap.core.alerts())
サンプルを実行
$ python test.py
Jenkins 連携
- Official ZAP Plugin
https://wiki.jenkins.io/display/JENKINS/zap+plugin