はじめに
OWASP ZAPを使用して、Webの脆弱性診断を行ってみます。OWASP ZAPはオープンソースで無料で使うことができます。
Webアプリケーションのすべての画面を手動でチェック、または、不正パラメータを手動で送信して確認というのは難しいですが、このツールを使うと、自動で様々なパターンの検証を行い診断を行うことができます。
脆弱性診断を行う専門の業者がありますが、費用が高いです。
作成したアプリケーションに対し、「取り敢えず診断してみたい」という場合にはとても便利です。
アプリケーションに脆弱性があると以下のような被害に遭い、運営者やそれを利用するユーザにまで影響が及びます。
- 不正にアクセスされる(情報流出)
- データを不正に書き換えられる
Webアプリケーションは、場合によっては不特定多数のユーザがアクセスするため、脆弱性がある状態での公開は非常に危険です。(特に個人情報を扱うようなアプリなど)
脆弱性の危険性を試した記事を以前まとめましたので、ご覧ください。
本記事はWindowsで解説していますが、Mac版については以下の記事をご覧ください。
それではOWASP ZAPをインストールしていきましょう。
他にも私のブログで、ツールについて解説している記事がありますのでご覧ください。
最新のバージョンのOWASP ZAPを試した記事もご覧ください。
Javaのインストール
OWASP ZAPのインストール前に、JREをインストールします。
JREがインストールされていない状態で、OWASP ZAPをインストールしようとすると、以下のエラーが表示されます。

インストール4jウィザードは、システム上にJava(TM)ランタイム環境を見つけることができませんでした。適切な64-bitのJREを検索してください。(最小バージョン: 1.8)
以下のページより、64bit版のJREをダウンロードします。
ライセンスを確認し、ダウンロードします。
現時点で、Version 8 Update 311でした。

インストーラを起動し、インストールを実行します。

しばらくすると、インストールが完了しました。

OWASP ZAPインストール
以下のページより、OWASP ZAPのインストーラをダウンロードします。
Windowsの64bitインストーラを選択しました。
ファイルサイズが大きいので、少し時間がかかりました。

ダウンロードしたインストーラを起動します。
次へ進みます。

ライセンスを確認し、次へ進みます。

ここでは標準インストールを選択しました。
インストール先を変更したい場合は、カスタムインストールを選択します。

インストールを開始します。

インストールが完了しました。

旧バージョンのダウンロード
古いバージョン(例えばv2.10.0)をダウンロードしたい場合は、GitHubのリポジトリにありました。
さらに古いバージョンも探せばあります。
OWASP ZAP起動
早速起動してみましょう。

セッションの保持方法を任意で選択します。

プロテクトモードになっていることを確認しましょう。
これが選択されていることにより、コンテキストに登録されたサイトのみが診断対象となります。

OWASP ZAP設定
OWASP ZAPのオプションを開きます。

ローカル・プロキシから、ポートを確認します。
デフォルトで18080になっていましたが、必要に応じて変更してください。

Firefoxを開き、設定を変更します。
ネットワークの設定の接続設定を開きます。

OWASP ZAPの設定と同じく、プロキシとポートを指定します。

今回は、ローカル(自分のPC)に作成したWebアプリケーションを対象にしてみます。
Laravelで作成したサイトを表示しました。

OWASP ZAP上で認識されました。

OWASP ZAPの基本的な使い方
このサイトを対象とするために、コンテキストへ登録します。
サイトを右クリックし、規定のコンテキストへ追加しました。

サイトがコンテキストに追加されました。

これでサイトへの攻撃ができるようになりました。

スパイダー
スパイダーとは、サイトに含まれるページを自動的に検知します。
スパイダーを選択します。

スコープを確認し、スキャンを開始します。

対象サイトがLaravelのスタートページであり、それほどリンクがないのですが、一部のファイルを認識しました。

ちなみにこのページには、外部のURLが含まれていますが、コンテキストに含まれないページは追加されませんでした。

動的スキャン
それでは実際に脆弱性の診断を行いましょう。
動的スキャンを選択します。

設定はそのままでスキャンを開始しました。

ページ数やスキャンの設定によりますが、時間がかかります。
スキャンが完了しました。

アラートタブを確認すると、スキャンした結果が表示されます。
リスクというのが危険度です。リスクが高いものは対応したほうが良いと思いますが、必要に応じて対応可否を検討すると良いでしょう。

レポートの出力
どうやら2.11.0でレポートの出力が変わったようです。
レポートのGenerate Reportを選択します。

なにやら文字化けしているようですが・・

以前とは違うレポート結果が出力できました。

セッションの保存
今回行った作業を、セッションとして保存しておきましょう。
次回、OWASP ZAPを起動後に、同じ状態に読み込むことができます。(セッションデータファイルを開く)

後処理
一通り作業が終わったら、Firefoxの設定を戻しておきましょう。

さいごに
今回はツールを使用して、脆弱性診断を行ってみました。
脆弱性はなかなか見つけにくいため、コーディング時に気をつけるのはもちろんですが、こういったツールで確認するのも効果的です。
作成したWebアプリケーションには、是非利用しましょう。
他にも私のブログで、ツールについて解説している記事がありますのでご覧ください。
コメント