OWASP ZAP APIを使って脆弱性診断
こんにちは。システム本部の山田です。
(この記事はmediba Advent Calendar 2016の19日目です)
弊社では機械的に実施する脆弱性診断はOWASP ZAPを利用しており、アプリを立ち上げGUIから脆弱性診断を実施しています。ただ継続的に実施していくには面倒でつい後回しになるため、自動化して開発プロセスに組み込む検討を始めました。 調査の際に作ったOWASP ZAP APIを使ったサンプルの紹介をします。
サンプルコード
利用技術
- Docker
- OWASP ZAP
- php-owasp-zap-v2
- faraday
動作環境
筆者が動作検証した環境は以下になります。
- OS X 10.11.6
- Docker 1.12.3
構成
security_testing_by_zap-api/
├── RAEADME.md
├── attack #php-owasp-zap-v2でZAP APIを介して脆弱性診断
│ ├── Dockerfile
│ ├── attack.php
│ ├── composer.json
│ ├── composer.lock
│ └── composer.phar
├── docker-compose.yml
├── faraday #脆弱性監査レポート
│ ├── Dockerfile
│ └── docker-compose.yml
├── php7fpm #診断対象用テストサイト(XSSがあるくそサイト)
│ ├── Dockerfile
│ ├── index.php
│ └── printpost.php
├── report #診断後に出力され、faradayが参照するxml置き場
│ └── workspace
│ ├── process
│ └── unprocessed
└── testsite #診断対象用テストサイトのnginx
├── Dockerfile
└── server.conf
概要

1. attackからzapを経由してtarget siteに対して脆弱性診断を実施
2. 診断結果xmlをreport/workspaceに格納
3. faradayで結果を閲覧
手順
Docker起動
$cd security_testing_by_zap-api
$docker-compose build #初回のみ
$docker-compose up -d
脆弱性診断実行
$docker run -it --rm --link=zap2 --link=testsite -v $PWD/report:/home/attacker/report -u attacker securitytestingbyzapapi_attack php ./attack.php
レポート閲覧
faradayの起動
$docker run -it -p 5984:5984 -v $PWD/report/workspace/:/root/.faraday/report/workspace/ infobyte/faraday /root/run.sh
レポートイメージ
http://127.0.0.1:5984/_ui/#/dashboard/ws/workspace

まとめ
APIを利用することで効率化、faradayに流し込むことで可視化が出来ることがわかりました。なお、Jenkinsには既にプラグインがありCIに組み込むことはすぐにでも可能です。
今後は品質管理部隊とも連携して導入の仕方を検討していく予定です。
参考
Jenkins と owasp zap で自動診断 - SlideShare
