NETWORK ENGINEER BLOG

Tips and Reviews for Engineers

OWASP ZAP による脆弱性診断について

OWAP ZAP とは

無料で Web アプリケーションの脆弱性をチェックできるセキュリティ診断ツール「OWASP ZAP」は、The Open Web Application Security Project(通称 OWASP、オワスプ)という国際的なコミュニティがつくりました。OWASP を運営しているのはアメリカの The OWASP Foundation(OWASP 財団)という団体で、2001年に設立されています。
出典:CyberSecurityTIMES

OWASP ZAP インストール

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

OWASP ZAP は Java 1.8 以上が必要なのでこちらから最新版をダウンロードしてインストールしておきます。

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

こちらからインストーラーをダウンロードして実行します。
本例では、WIndows 64bit 版を使用しています。
インストーラーを実行すると JRE を「配置する」ボタンがでてきますので、事前にインストールした「java.exe」を指定します。
f:id:FriendsNow:20200322171041p:plain

あとは、「次へ」ボタンをクリックして完了です。

OWASP ZAP 設定

セッションの保持方法を指定します。本例では、「現在のタイムスタンプでファイル名を付けてセッションを保存」を選択します。
f:id:FriendsNow:20200322171220p:plain

必ず「プロテクトモード」を指定します。詳細は後述します。
f:id:FriendsNow:20200322171233p:plain

「ツール」->「オプション」からローカルプロキシを設定します。ポートは本例では「18080」を指定します。
f:id:FriendsNow:20200322171302p:plain

次に、対象サイトから各ページの URL 情報を取得するスパイダー機能を設定します。
本例では、以下のとおり設定します。

  • クロールする最大の深さ(対象サイトをどこまで深く検索するか):19
  • 並列スキャンスレッド数(並列処理数):2
  • 新しい URI の SVN のメタデータを解析(診断対象ファイルの指定):ON
  • 新しい UR Iの Git のメタデータを解析(診断対象ファイルの指定):ON
  • OData 固有のパラメータを処理(診断対象ファイルの指定):ON

f:id:FriendsNow:20200322201348p:plain

次に、対象サイトの診断を行う動的スキャンを設定します。
本例では、以下のとおり設定します。

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

f:id:FriendsNow:20200322201406p:plain

「OK」をクリックします。

「ポリシー」->「スキャンポリシー」を選択し、「追加」をクリックします。
任意のポリシー名を設定し、適用を「Off」「低」を選択してから「開始」をそれぞれクリックします。*1
f:id:FriendsNow:20200322201557p:plain

左ペインの「インジェクション」を選択し、テストのしきい値と強度を変更します。
本例では、以下のポリシーを設定します。

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

f:id:FriendsNow:20200322201844p:plain
しきい値はアラートをあげる判定値で、”Low” ではあいまい、"Hign" では完全に NG の場合にアラートをあげます。強度はテストの精度で、"High" はより細かなテストを行ってくれます。

ブラウザ設定

ブラウザから OWASP をプロキシとして経由して、対象サイトへアクセスすることで診断します。
本例では、Firefox を使用して OWASP を指定します。
f:id:FriendsNow:20200322190535p:plain

WebGoat とは

ブラウザの設定が終わったら、診断テストが可能となります。
診断テストするために、WebGoat というわざと脆弱性を持たせた Web アプリケーションがありますので、あわせて紹介します。

WebGoat ダウンロード・インストール

本例では、CentOS 6.3(GUI)にインストールします。

Java のインストール

# Download JDK 11
cd /tmp && wget https://download.java.net/java/ga/jdk11/openjdk-11_linux-x64_bin.tar.gz

# Switch to the root user, type root password
su

# Create the folder /usr/lib/jvm
mkdir /usr/lib/jvm

# Extract the downloaded archive
tar xzvf /tmp/openjdk-11_linux-x64_bin.tar.gz --directory /usr/lib/jvm

# Create a symlink to the java binary 
ln -s  /usr/lib/jvm/jdk-11/bin/java /usr/bin/java

# exit from root user
exit

# Verify that you have the right version running
java -version

# Remove the downloaded archive
rm /tmp/openjdk-11_linux-x64_bin.tar.gz

WebGoat のダウンロードと実行

# Download the latest WebGoat release jar
wget https://github.com/WebGoat/WebGoat/releases/download/v8.0.0.M26/webgoat-server-8.0.0.M26.jar

# Run WebGoat using java
java -jar webgoat-server-8.0.0.M26.jar --server.address=0.0.0.0

出典:thehackerish

診断テスト

本例では、以下の環境でテストします。
リバースプロキシの構築例は後述しますので、興味があればご参照ください。

f:id:FriendsNow:20200322190628p:plain

ブラウザで対象サイトへアクセス

本例ではリバースプロキシがありますので、以下の URL へアクセスします。

http://10.1.12.252/WebGoat

アクセスした後、OWASP ZAP の左ペインに対象サイトが追加されます。
f:id:FriendsNow:20200322202428p:plain

サイトを右クリックして、「コンテキストに含める」->「既定のコンテキスト」を選択し、対象サイトを選択します。
f:id:FriendsNow:20200322204108p:plain

「認証」をクリックして、認証方法、およびログインユーザーの情報を入力します。
これは、WebGoat のログイン画面の先へクロールするために必要となります。
本例では、Form-based Auhentication を使用し、以下のパラメータを指定します。

http://10.1.12.252/WebGoat
username={%username%}&password={%password%}
\Q/WebGoat/login\E

「\Q/WebGoat/login\E」は、ログアウト状態を判定するために必要なパラメータです。
f:id:FriendsNow:20200322202717p:plain

次に「ユーザー」をクリックして、ログイン可能なユーザー登録します。
f:id:FriendsNow:20200322202734p:plain

スパイダー実行

対象サイト内の各ページの URL 情報を収集するためにスパイダーを実行します。
対象サイトを右クリックして、「攻撃」->「スパイダー」をクリックし、作成した「ユーザー」を選択します。
その後、「スキャンを開始」をクリックします。
※前述の「プロテクトモード」は、対象サイトのみを診断対象とします。
スパイダータブに結果が表示されます。緑は対象、赤は対象外の URL を示します。
f:id:FriendsNow:20200322203831p:plain

動的スキャン

対象サイトに対して、様々なパターンの攻撃コードを仕掛けます。
対象サイトを右クリックして、「攻撃」->「動的スキャン」をクリックし、「ポリシー」「ユーザー」で作成したユーザーを選択します。その後、「スキャンを開始」をクリックします。
f:id:FriendsNow:20200322204021p:plain

結果は「アラート」タブに表示されます。
「赤」は危険度高、「オレンジ」は危険度中、「黄色」は危険度低を示します。
f:id:FriendsNow:20200322203839p:plain

参考:リバースプロキシ設定

squid.conf 設定

# 59 行目追記
http_access allow all

#60 行目コメントアウト
# http_access deny all

# 64行目追記(転送元サーバーの IP アドレスを指定)
http_port 80 accel ignore-cc defaultsite=10.1.12.252

# 最終行に追記(転送先 Web サーバーの IP アドレスを指定)
cache_peer 10.1.23.253 parent 8080 0 no-query originserver

# 最終行に追記(メモリキャッシュサイズ)
cache_mem 256 MB

# 最終行に追記(ホスト名定義)
visible_hostname prox.srv.world

squid 再起動

# /etc/rc.d/init.d/squid restart

以上

*1:全ての診断を無効化します。