OWASP ZAP で脆弱性診断 ~Webアプリケーションの守りを固めよう~

こんにちは。システムソリューション営業本部の吾妻です。
システムを開発・運用していると、「バグ」の存在が明らかになることがよくあります。
プログラムの実装とバグの発生は不可分であり、
もしも「真にバグが0件のシステム」が存在したとしても、それを証明することは困難だといえます。
バグの中でも、外部ユーザーが悪用できてしまうようなものは、特に「脆弱性」と呼ばれます。
Webアプリケーションの場合、サービスがインターネットに向けて公開されているために、
こうした脆弱性を悪用されると、個人情報を盗み見られたり、コンテンツを書き換えられたり、
サービスが停止させられたりといった損失につながることもあります。
そこで、Webアプリケーションの脆弱性をあらかじめ可能な限り発見して、
損失が生じるのを防ぐために利用されるサービス・ツールが、脆弱性診断です。
具体的には、Webアプリケーションに対して脆弱性診断ツールからリクエストを送り、
SQLインジェクションやクロスサイト・スクリプティングのような脆弱性が存在していないか確認します。
今回は、脆弱性診断ツールとして、オープンソースソフトウェアとして公開されている OWASP ZAP を利用していきます。
使用するツール
OWASP ZAP とは?

Open Web Application Security Project によって公開されている
Zed Attack Proxy という名前のペネトレーションテストツールを指します。
OWASP ZAP は、対象の Web アプリケーションに対してリクエストを送信し、
返ってきたレスポンスの内容から脆弱性の有無を判定します。
OWASP ZAP で実行できるスキャンには、以下の種類があります。
- 自動スキャン: 入力されたURLから自動的なクロールを開始し、見つかったページに対して「攻撃(スキャン)」を行う
- 静的スキャン: ユーザーが(モンキーテストのようにランダムに)操作した際のレスポンスをもとに脆弱性の有無を判定する
- 動的スキャン: 静的スキャンの際に操作した内容を、自動的にリクエスト内容を変えて再実行する
また、スキャンした結果は、HTML形式やMarkdown形式でエクスポートすることができます。
環境構築
構成
今回は、 Windows 上の WSL (Windows Subsystem for Linux) に OWASP ZAP をインストールして、Windows 上で起動したWebサービスに対して脆弱性診断を行うこととします。
※ OWASP ZAP のインストール先について OWASP ZAPには、Windows (64bit) 用のインストーラーも用意されているので、 もちろん直接 Windows 上にインストールしても構いません。 (公式サイトからインストーラーをダウンロードすることが可能です) また、 Docker 版も用意されているので、これを使用すれば Java 実行環境すら用意する必要がなくなります。 このあたりは、好みに応じて使い分けると良いと思います。 今回どうして敢えてWSL上にOWASP ZAPをインストールしているかというと、 WSL上でGUIアプリケーションを動かして、Windowsアプリケーションと同じように 操作する手順の検証を兼ねているためです。 |
手順
①WSLが有効化されていない場合は、「 Windows の機能」から有効化するか、以下の PowerShell コマンドを管理者権限で実行します。
$ Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux |
②Ubuntu がインストールされていない場合は、 Windows ストアから入手するか、以下の PowerShell コマンドを管理者権限で実行します。
ディストリビューション パッケージの URL (
https://aka.ms/wslubuntu2004
の部分 ) は、https://docs.microsoft.com/ja-jp/windows/wsl/install-manual で確認できます。
$ Invoke-WebRequest -Uri https://aka.ms/wslubuntu2004 -OutFile .\Ubuntu.appx -UseBasicParsing |
③VcXsrv をインストールします。インストールが完了したら、 VcXsrvw を起動しておきます。
④WSL の Ubuntu を開いて、以下のコマンドを実行して OWASP ZAP をインストールします。
# 必要なパッケージをインストール |

⑤WSL の Ubuntu を開き直して、 ~/.bashrc
の末尾に以下の内容を追記します ( echo "export DISPLAY=:0.0" >> ~/.profile
のように実行しても可) 。
# WSL1の場合: |
WSL 1 と WSL 2 で追記内容が違うため、注意が必要です。
※現在どちらが使用されているか確認するためには、 PowerShell で wsl --list --verbose
を実行します。
⑤WSL の Ubuntu を開き直して、 xeyes を試しに実行してみて、
エラー「Can't open display」が表示されずに目玉のウィンドウが表示されることを確認します。
※ここでエラーが表示される場合は、④の追記内容を変更します。
$ xeyes & |
⑥以下のコマンドを実行して、 OWASP ZAP を開きます。
$ zap.sh |
OWASP ZAPが起動すると、画像のようにスプラッシュウィンドウが表示されます。
初回起動時は、 Windows 側で、ファイアウォールのダイアログが表示されることがあります。必要に応じて許可してください。
⑦Windows 上で、適当な Web アプリケーションを実行します。今回は、以下のような Python のコードを用意して実行しました。
この通りでなくても、 Node.js などでスクリプトを用意しても、 XAMPP を利用しても大丈夫です。
# serve.py import http.server import socketserver PORT = 8000 Handler = http.server.SimpleHTTPRequestHandler with socketserver.TCPServer(("", PORT), Handler) as httpd: print("serving at port", PORT) httpd.serve_forever() |
# PowerShell で実行 |
⑧OWASP ZAP で Automated Scan
をクリックし、 URL to attack
(攻撃対象の URL )に http://localhost:8000
を入力して Attack
をクリックします。
※この時、外部の実在する URL を入力しないようにしてください!!(本当に攻撃してしまいます)
⑨画面下部のパネルに結果が順次出力されることが確認できれば完成です。
※ Docker を使用する場合 前述の通り、 OWASP ZAPには、Docker コンテナも用意されており、 JDK などのツールを用意することなく実行することができます。 デスクトップ版と同じような UI で OWASP ZAP を実行するには、 以下のコマンドを実行し、 http://localhost:8080/zap にアクセスします。 $ docker run -u zap -p 8080:8080 -p 8090:8090 -i owasp/zap2docker-stable zap-webswing.sh GUI が必要なければ、以下のコマンドを実行します。 $ docker run -t owasp/zap2docker-stable zap-baseline.py -t <URL to attack> |
まとめ
本記事では、OWASP ZAPを利用した、脆弱性診断実施環境を速やかに立ち上げる手順について簡単にご紹介しました。
次回以降、 診断結果の見方や、Webアプリケーションへ脆弱性対策を施す方法について、ご紹介できればと考えています。
関連記事はこちら
このブログで参照されている、OWASPは、米国およびその他の国におけるOWASP Foundation, Inc.の商標または登録商標です。
このブログで参照されている、Ubuntuは、米国およびその他の国におけるCanonical Ltd.の商標または登録商標です。
このブログで参照されている、Microsoft、Windows、その他のマイクロソフト製品およびサービスは、米国およびその他の国におけるマイクロソフトの商標または登録商標です。