OWASP ZAP APIを使って脆弱性診断

こんにちは。システム本部の山田です。

(この記事はmediba Advent Calendar 2016の19日目です)

弊社では機械的に実施する脆弱性診断はOWASP ZAPを利用しており、アプリを立ち上げGUIから脆弱性診断を実施しています。ただ継続的に実施していくには面倒でつい後回しになるため、自動化して開発プロセスに組み込む検討を始めました。 調査の際に作ったOWASP ZAP APIを使ったサンプルの紹介をします。

サンプルコード

こちら

利用技術

動作環境

筆者が動作検証した環境は以下になります。

  • 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

概要

image

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

image

まとめ

APIを利用することで効率化、faradayに流し込むことで可視化が出来ることがわかりました。なお、Jenkinsには既にプラグインがありCIに組み込むことはすぐにでも可能です。

今後は品質管理部隊とも連携して導入の仕方を検討していく予定です。

参考

Jenkins と owasp zap で自動診断 - SlideShare

Jenkins と OWASP ZAP で自動診断 - Qiita

OWASP ZAP の PHP client API を作りました - yukisovのメモ帳