OWASP ZAPというWebアプリの脆弱性診断ツールの使い方(入門編)

今回は、フリーのWebアプリケーションの脆弱性診断ツールであるOWASP ZAPの使い方について説明します。

XSS(クロスサイトスクリプティング)やSQLインジェクションといったテストならわりと簡単に診断できます。

実行環境はWindows 10 です。

脆弱性診断というのは、実際には攻撃を仕掛けることなので、管理外のサイトを診断することはやめましょう。

OWASP ZAPのインストール

Javaのダウンロード・インストール

OWASP ZAPを起動するためにJava1.8以上が必要となりますので、最新版であるJava1.9をダウンロードします。

※すでに1.8以上のJavaがインストールされていれば不要です。

Java SE Runtime Environment 9のダウンロード

「Accept License Agreement」をチェックし、お使いのPCのOSとbit数を選びます。

ちなみに筆者はWindows10 64bitですので、「jre-9.0.4_windows-x64_bin.exe」を選びます。

Java1.9

Java1.9

ダウンロードが終わったらexeを実行しJavaをインストールします。

 

OWASP ZAPのダウンロード・インストール

次に、以下からOWASP ZAPをインストールします。

OWASP Zed Attack Proxy Project

「Download ZAP」をクリックします。

OWASP Zed Attack Proxy Project

OWASP Zed Attack Proxy Project

お使いのPCの環境に合わせてダウンロードします。

筆者の場合は「Windows (64) Installer」行の「Download now」です。

OWASP ZAP ダウンロード

OWASP ZAP ダウンロード

ダウンロードが完了したら、exeを実行します。

すると以下の画面が表示され、JREが見つからないと言われます。

「配置する」ボタンから先ほどインストールしたJavaを指定してあげます。

OWASP ZAP インストールエラー

OWASP ZAP インストールエラー

インストール先を変更してなければ以下の画像のパスに「java.exe」があるのでこれを選択します。

するとインストール画面が表示されます。

OWASP ZAPインストール画面

OWASP ZAPインストール画面

「次へ」で進んでいきインストールします(標準インストール)。

OWASP ZAPインストール完了画面

OWASP ZAPインストール完了画面

これでインストールは完了です。

 

OWASP ZAPの設定

Windowsファイアウォール設定

インストールしたOWASP ZAPを実行すると、最初にWindowsファイアウォール画面が表示されますが、そのまま「許可」を押します。

※スクショ撮り忘れました。

 

ZAPセッションの保持方法

次に以下のような画面が表示されます。

ZAPセッションとは診断結果を格納するためのZAPのデータベースのことです。

どれでもいいですが、ひとまず一番上の「現在のタイムスタンプでファイル名を付けてセッションを保存」を選択し「開始」ボタンを押します。

ZAPセッション保持方法設定

ZAPセッション保持方法設定

 

モード切替

画面が開いたら、まずは実行モードの切り替えを行います。

誤って意図しない診断(攻撃)を実行しないために、画面左上のプルダウンを「プロテクトモード」にします。

とても重要です!!

モード切替

モード切替

 

ローカル・プロキシ設定

次に各種設定を行っていきます。

「ツール」→「オプション」からオプション画面を開きます。

オプション画面

オプション画面

ローカル・プロキシの設定を行います。

「オプション」→「Local Proxies」→「ポート」を”55555″に変更します。UIがイケてないので、少し変更しにくいです。

※デフォルトの8080でも大丈夫ですが、ポートの競合が起きやすいためです。

ローカル・プロキシ画面

ローカル・プロキシ画面

 

スパイダー設定

次は、対象のサイトから各ページのURL情報を取得するスパイダー機能の設定です。

「オプション」→「スパイダー」を選択し、以下のように変更します。

  • 「クロールする最大の深さ」:15~19程度
  • 「並列スキャンスレッド数」:1
  • 「新しいURIのSVNのメタデータを解析」:ON
  • 「新しいURIのGitのメタデータを解析」:ON
  • 「OData固有のパラメータを処理」:ON

クロールする最大の深さは、サイト内のリンクをどこまで深く探しにいくかという設定です。少ないと取得できないページが出てくる可能性があるので、ある程度大きな数字にします。

並列スキャンスレッド数は、いくつのスレッド数でスキャンするかという設定です。PCスペックにもよりますが基本”1″でいいと思います。

チェックボックス3つについては.svnなどのファイルも診断対象にするためのオプションです。

スパイダー設定画面

スパイダー設定画面

 

動的スキャン設定

次は、診断を行う動的スキャンの設定です。

「オプション」→「動的スキャン」を選択し、以下のように変更します。

  • 並列スキャンするホスト数:1
  • 並列スキャンスレッド数:1
  • スキャン中にミリ秒単位の遅延:1000

「並列スキャンするホスト数」はサブドメインがあった場合にそのドメインも診断対象にするか、という設定ですが診断結果レポートに混在して出力されるので”1″が推奨です。

複数ドメインある場合はドメイン毎に診断しましょう。

「並列スキャンスレッド数」は”1″が推奨です。並列に実施することで本来前後関係を守らなければならないような処理があった場合に、正しい診断結果とならない可能性があるためです。

「スキャン中にミリ秒単位の遅延」は診断用のリクエストを投げる間隔です。本番稼働中の診断の場合は稼働に影響が無いように1000にしましょう。だれも利用者がいない状態であれば低くてもかまいません。

動的スキャン設定画面

動的スキャン設定画面

ここまできたら、「OK」を押して設定を保存します。

 

アドオンのアップデートチェック

Active scanner rules

今回診断に使うActive scanner rulesが最新になっているかチェックします。

「ヘルプ」→「アップデートのチェック」を選択し、以下の画面で「Active scanner rules」の「更新」が”100%”になっていればOKです。

なっていない場合はチェックボックスをONにし、「選択済みを更新」を押して更新を行います。

 

スキャンポリシーの設定

ポリシーの追加

動的スキャンのポリシーを設定します。

「ポリシー」→「スキャンポリシー」を選択し、スキャンポリシー管理画面を開きます。

「追加」ボタンを押します。

スキャンポリシー管理画面

スキャンポリシー管理画面

スキャンポリシー画面が開いたら、以下のように入力し、一旦すべての診断を無効にします。

  • ポリシー:任意の名前
  • 上の方の「適用」:”off”を選択し、「開始」ボタン押下
  • 下の方の「適用」:”低”を選択し、「開始」ボタン押下
スキャンポリシー画面

スキャンポリシー画面

左ペインの「インジェクション」を選択し、以下のテストのしきい値と強度を変更します。

  • SQLインジェクション-しきい値:Low
  • SQLインジェクション-強度:Low
  • クロスサイト・スクリプティング(反射型)-しきい値:Low
  • クロスサイト・スクリプティング(反射型)-強度:Low

しきい値はアラートをあげる判定値のことです。”Low”だとNGかOKかあいまいな場合でもアラートを起こします。”High”だと完全にNGの場合だけアラートがあがります。

強度はテストの精度のことで、Highはより細かなテストを行ってくれます。

インジェクションテスト設定

インジェクションテスト設定

 

「スキャンポリシー」に戻ると以下のようになっているはずです。

インジェクションのしきい値が空欄、クライアント・ブラウザのしきい値と強度が空欄になっていればOKです。

確認できたら「OK」ボタンを押しましょう。

スキャンポリシー(変更後)

スキャンポリシー(変更後)

「テストポリシー」が追加されてます。確認したら閉じましょう。

テストポリシー追加

テストポリシー追加

 

ブラウザの設定

 プロキシ設定

次はブラウザの設定です。

OWASP ZAPの診断は、ブラウザから対象のサイトへアクセスする際にプロキシとしてOWASP ZAPを経由することで診断を実行します。

そのため、ブラウザのプロキシを設定を行います。

使用するブラウザは何でも大丈夫ですが、Firefoxが推奨です。

Firefoxはプロキシの設定がOSの設定と切り離してできるので、診断後にプロキシの設定を戻し忘れてインターネットに繋がらない…みたいなことが発生するのを防ぎます。

ということで、Firefoxがインストールされていなければインストールしておきましょう。

 

Firefoxを起動したら、右上のハンバーガーメニューから「オプション」選択します。

Firefox設定画面

Firefox設定画面

スクロールして一番下の「ネットワークプロキシ」の「接続設定」を押して、インターネット接続画面を表示します。

画面が表示されたら、以下のように入力し、OKを押します。

  • 手動でプロキシを設定する:ON
  • HTTPプロキシ:localhost
  • ポート:55555
  • すべてのプロトコルでこのプロキシを使用する:ON
  • プロキシなしで接続:入力値を空にする



 

診断実行

診断対象サイトを診断(攻撃)可能にする

Firefoxから診断対象のサイトを開きます。

筆者は自身が作ったk-shopというサイトで実施しています。

診断対象サイト

診断対象サイト

サイトを開いた後、OWASP ZAPを確認すると、左ペインの「サイト」に開いたサイトが追加されています。

サイト追加

サイト追加

この段階では、右クリックし「攻撃」を選択してもすべてグレーアウトされていて診断ができません。

そこで、サイトを右クリック→「コンテキストに含める」→「規定のコンテキスト」を選択し、セッション・プロパティ画面を開きます。

開いたサイトのURLを選択し、「OK」を押します。

コンテキストに含める

コンテキストに含める

すると、サイトを右クリック→「攻撃」の中身全て選択可能になります。

 

スパイダー実行

まずは対象サイト内の各ページのURL情報を収集するためにスパイダーを実行します。

対象サイトを右クリック→「攻撃」→「スパイダー」を選択し、スパイダー画面を開きます。

開いたらそのまま「スキャンを開始」を押します。

スパイダー実行画面

スパイダー実行画面

すると、画面下の「スパイダー」タブにスキャンの結果がずらりと表示されます。

緑マークは診断対象のURL、赤マークは診断対象外のURLという意味です。

※プロテクトモードは対象のサイト内(192.168.0.101)のみを診断対象とします。

スパイダー実行結果

スパイダー実行結果

 

動的スキャン実行

そしていよいよ動的スキャンを実行し、脆弱性診断を行います。

対象サイトを右クリック→「攻撃」→「動的スキャン」を押し、動的スキャン画面を表示し、以下のように入力します。

  • ポリシー:作成したポリシーを選択

※「詳細オプションを表示」をONにすると、「ポリシー」タブが出現しポリシーの内容を確認できます。

問題なければ「スキャンを開始」を押して実行します。

動的スキャン実行画面

動的スキャン実行画面

 

ページ数にもよりますが、なかなか時間がかかります。

スキャンの進行状況は「動的スキャン」タブのすぐ下のバーにパーセンテージが表示されています。

動的スキャン進行状況画面

動的スキャン進行状況画面

 

診断結果

スキャンの結果アラートが上がった場合は、「アラート」タブに表示されます。

少しわかりにくいですが、旗の色が危険度を表しています。

  • 赤:危険度高
  • オレンジ:危険度中
  • クリーム:危険度低

気を付けていたつもりでしたが、SQLインジェクションのリスクがありました…。

これは急いで修正しなければいけませんね。

画面右上の「攻撃」とある所に右に「’」と書いてあります。このシングルコーテンションをリクエストしたということです。

↓はアラートが上がった実際のページです。数値しか入力できないプルダウンになっていますが、リクエストの中身をいじって送ればどんな文字列も送れてしまいますもんね…。

OWASP ZAPに関する書籍がありますので、こちらを参考にすると良いと思います。

以上となります。

投稿者プロフィール

koki kamagata
koki kamagata
「kamaの技術ブログ」を管理しているkorns solution(コルンズソリューション) の鎌形と申します。

フリーランスのSEとして活動中です。

Javaの開発がメインですが、インフラも守備範囲ですので、幅広く投稿していきます!!!

コメントを残す

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