Help us understand the problem. What is going on with this article?

脆弱性診断ツール OWASP ZAP vs 脆弱性だらけのWebアプリケーションEasyBuggy

More than 1 year has passed since last update.

脆弱性診断ツール「OWASP ZAP」は、脆弱性だらけのWebアプリケーション「EasyBuggy」の脆弱性をどの程度検出できるでしょうか?

VS.png

今回は次の基本的な機能で検証してみました。

  • 簡易スキャン:WebアプリケーションのルートのURLを入力すると、OWASP ZAPがその配下をクロールして脆弱性があるか診断する。
  • 静的スキャン:ブラウザ上でWebアプリケーションの基本的な機能を一通り手作業で動かすと、OWASP ZAPがレスポンスの内容などを検査する。
  • 動的スキャン:静的スキャンで行った操作を、OWASP ZAPがリクエストパラメータを変えるなどして再実行し、診断する。

なお、検証で行った作業内容もこのページ載せていますので、OWASP ZAPを試してみたい方は参考にしてみて下さい。

はじめに

OWASP ZAPとは

その前にOWASP ZAPについて簡単に説明しておきます。「OWASP ZAP (OWASP Zed Attack Proxy)」は、オープンソースのWebアプリケーション脆弱性診断ツールで、Webアプリケーションのセキュリティに関するガイドやツールを公開している「OWASP (The Open Web Application Security Project)」が開発しています。

EasyBuggyとは

脆弱性やリソースリークなどを含む、バグだらけのWebアプリケーションです。現時点では、20種類の脆弱性を実装しています。詳しくはこのページを参照下さい。

OWASP ZAPのインストールと初期設定

OWASP ZAPのインストール

このページからインストーラをダウンロードします。インストールは、デフォルトのまま「次へ」をクリックしていけば完了します。インストールに関しては、Java 7が必要ということを除けば、特筆すべき点は無いので省略します。インストールが完了したら、起動します。Windowsの場合、ファイアウォールの警告が出るので、「アクセスを許可する」をクリックして下さい。

WS000008.JPG

初回起動時は次のようなダイアログが表示されます。

Screenshot from 2017-09-09 21-50-15.png

どれを選んでも構いませんが、ここでは「継続的に保存せず、必要に応じてセッションを保存」を選択しました。その後、以下のようなメイン画面が表示されます。

Screenshot from 2017-09-09 21-57-35.png

OWASP ZAPのプロキシ設定

次に、OWASP ZAP経由でEasyBuggyへリクエストが送信されるように、ローカルプロキシを設定します。

proxysettings.png

ツール > オプション > ローカル・プロキシ をクリックして、 ポートを8080以外(EasyBuggyと重複ないポート)に変更します。

Screenshot from 2017-09-09 21-59-13.png

ブラウザのプロキシ設定

EasyBuggyにアクセスするブラウザのプロキシ設定を変更します。Firefoxを使用している場合は、「設定」 > 「ネットワーク」 > 「接続設定」 で以下のようにプロキシ設定を変更します。

ffproxy.png

EasyBuggyの起動

脆弱性だらけのWebアプリケーションはこのページからダウンロードして、次のコマンドで起動します。

java -Deasybuggy.mode=only-vulnerabilities -jar easybuggy.jar

※EasyBuggyを起動するにはJavaが必要です。-Deasybuggy.mode=only-vulnerabilitiesを付加することで、脆弱性以外の問題を発生させるページへのリンクが表示されなくなります。EasyBuggyはOutOfMemoryErrorやJVMクラッシュを引き起こすようなリンクが多数あり、これらにOWASP ZAPのクローラーがアクセスすると、EasyBuggyが停止してしまいます。

OWASP ZAPによる脆弱性診断

簡易スキャン

OWASP ZAPのショートカットをクリックして起動します。起動したら、クイックスタート画面の攻撃対象URLにhttp://localhost:8080を入力します。

Screenshot from 2017-09-09 22-21-17.png

「攻撃」ボタンをクリックすると、簡易スキャンが開始されます。アプリケーションの規模によりますが、この操作には数分~数時間の時間がかかります。

Screenshot from 2017-09-10 12-47-45.png

簡易スキャンにより大量のリクエストが送信されます。上の画面キャプチャのURLを見て分かるように、クエリストリングなどに不正な文字列を付加して、診断しています。

Screenshot from 2017-09-09 22-17-51.png

簡易スキャンが完了すると、結果が「アラート」のタブに表示されます。ここでは、パストラバーサル、リモートファイルインクルージョン、XSSの3種類の脆弱性が見つかりました。

静的スキャン

次に静的スキャンを行います。静的スキャンは、ブラウザ上でWebアプリケーションの基本的な機能を手動で一通り動かすこと(手動クロール)で行います。これにより、OWASP ZAPがレスポンスの内容などを検査してくれます。この手動クロールを行うことで、後述する動的スキャンの検査対象のURLが登録されます。

ということで、EasyBuggyのトップページ(http://localhost:8080)にアクセスします。

Screenshot from 2017-09-10 13-11-29.png

一番上のXSSの機能から順にリンクをクリックし、機能を実行していきます。全てが完了してからアラートタブをクリックします。静的スキャンでは、クリックジャッキングとXSSの2種類の脆弱性が見つかりました。

Screenshot from 2017-09-10 11-34-17.png

動的スキャン

最後に動的スキャンをします。静的スキャンで登録された検査対象に対して、パラメータを変えたりしながらリクエストを送信します。サイトのURL(http://localhost:8080)を右クリックして、「攻撃」 > 「動的スキャン」を選択すると、次のようなダイアログが表示され、「スキャン開始」をクリックすると動的スキャンが開始されます。

Screenshot from 2017-09-10 11-36-16.png

簡易スキャンの時と同様に動的スキャンにより大量のリクエストが送信されます。

Screenshot from 2017-09-10 12-40-33.png

さらに追加でSQLインジェクションが検出できました。

Screenshot from 2017-09-10 11-42-56.png

結果

ということで、結果は以下のようになりました。

脆弱性 簡易スキャン 静的スキャン 動的スキャン
XSS (クロスサイトスクリプティング)
SQLインジェクション × ×
LDAPインジェクション × × ×
コードインジェクション × × ×
OSコマンドインジェクション × × ×
メールヘッダーインジェクション × × ×
Nullバイトインジェクション × × ×
サイズ制限の無いファイルアップロード × × ×
拡張子制限の無いファイルアップロード × × ×
オープンリダイレクト可能なログイン画面 × × ×
ブルートフォース攻撃可能なログイン画面 × × ×
セッション固定攻撃可能なログイン画面 × × ×
親切過ぎる認証エラーメッセージ × × ×
危険なファイルインクルード ×
パストラバーサル ×
意図しないファイル公開 × × ×
CSRF (クロスサイトリクエストフォージェリ) × × ×
クリックジャッキング ×
XEE (XMLエンティティ拡張) × × ×
XXE (XML外部エンティティ) × × ×

脆弱性20件のうち、検出できたのは5件でした。今回は、OWASP ZAPの基本的な機能を使用した検証を行いましたが、OWASP ZAPの機能はこれだけではなく、使い方を学習すれば、さらに多くの脆弱性を検出することができます。脆弱性やOWASP ZAPの学習のために、是非EasyBuggyも使ってみて下さい。

ちなみにEasyBuggyのSpring Bootクローンもあります。warファイルをダウンロードして、次のコマンドで起動できます。

java -Deasybuggy.mode=only-vulnerabilities -jar ROOT.war

参考資料

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした