OWASP ZAP(Zed Attack Proxy)

投稿者: | 2024年2月10日

セキュリティ脆弱性試験をすることのできる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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です