こんにちは。QAエンジニアのTWです。
普段はソフトウェアのシステムテストを行っています。脆弱性診断について業務で触れる機会があり、脆弱性診断に興味を持ちました。この記事では自分で勉強した内容を共有したいと思います。簡単な内容ですが参考になればと思います。
※本記事の内容は以下の書籍を参考にしています
Webセキュリティ担当者のための脆弱性診断スタートガイド (第2版)
脆弱性診断とは
脆弱性とはプログラムの中に作りこまれたバグのなかでデータを書き換えたり、盗み取られることによって悪用されてしまうバグを指します。 これらの脆弱性を発見するためのテスト手法が脆弱性診断となります。代表的な脆弱性としてSQLインジェクション、クロスサイトスクリプティング(XSS)があります。
SQLインジェクションは悪用されるコードを含んだSQL文が実行されることによってデータベースを不正に操作される脆弱性です。この場合、アプリケーションに実装されたSQLの呼び出し方に不備があることが脆弱性であり、データベースを不正に操作されることで機密情報の漏洩やデータを改ざんされる恐れがあります。
クロスサイトスクリプティング(XSS)はWebサイトに設置されたユーザー入力フォームに攻撃用scriptが埋め込まれたままWebページが出力され、そのページを善意のユーザーが閲覧することで偽のページを閲覧させられたり、cookieの情報を取得されたりする脆弱性です。
脆弱性診断はOSやミドルウェアに対して行う 「プラットフォーム脆弱性診断」とWebアプリケーションに対して行う 「Webアプリケーション脆弱性診断」 がありますが 、今回は「Webアプリケーション脆弱性診断」を実行します。
OWASP ZAPとは
OWASP(The Open Web Application Security Project) という国際的な団体によって作成されたセキュリティ診断ツール(プロキシツール)です。 無料で使用でき、 Webアプリケーション脆弱性診断が可能です。
Badstoreとは
わざと脆弱性を持たせたWebアプリケーション(ショッピングサイト)で脆弱性診断のトレーニングを行うことができます。 通称「やられWebアプリケーション」と呼ばれます。Badstore以外にも 「やられWebアプリケーション」は存在します。
OWASP ZAPのインストールとセットアップ
OWASP ZAPのインストールとセットアップについて説明します。
1.OWASP ZAPのダウンロードページから使用する環境に対応したインストーラーをダウンロードします。(今回はWindows 64bit版をインストールしました)
2.インストーラーを起動し、インストールウィザードを進めてインストールを完了させます。
3.OWASP ZAPを起動します。
以下のダイアログが表示されたら「開始」ボタンを押下します。
4.「ツール」メニューから「オプション」を選択後、「Network」-「Server Certificates」を選択。
ルート証明書が選択されていることを確認し、「保存」ボタンから証明書をエクスポートします。これは次項で説明するブラウザのセットアップで使用します。
ブラウザのセットアップ
今回脆弱性診断で使用するブラウザですが、EdgeやChromeはセキュリティ機能が診断に影響を与えることがあるためFirefoxを使用します。
1.ブラウザを起動後、「設定」メニュー -「一般」 – 「ネットワーク設定」 – 「接続設定」ボタンから以下画面の通りにプロキシ設定を行い、OKボタンで保存します。
2.「設定」メニュー – 「プライバシーとセキュリティ」 – 「証明書」 – 「証明書を表示」ボタンから先ほどOWASP ZAPでエクスポートした証明書をインポートします。インポート時「この認証局によるウェブサイトの識別を信頼する」にチェックをいれます。
Badstoreのインストールとセットアップ
Badstoreの正規のサイトでは配布が終了しており、はじめに紹介した参考書籍にて二次配布のリンクが共有されています。
Badstoreはisoイメージとなっており、今回は仮想環境にインストールして使用します。今回は仮想環境としてVMware Workstation Playerを使用します。
1.VMware Workstation PlayerをVMware Workstation Player のダウンロードからダウンロードします。
2.インストーラーを起動し、インストールウィザードを進めてインストールを完了させます。
3.VMware Workstation Playerを起動し、「新規仮想マシンの作成」を選択します
4.「インストーラディスクイメージファイル」にダウンロードしたBadStoreのisoイメージを選択し、仮想マシンの作成を完了します。
5.仮想マシンを作成後、「仮想マシンの再生」から仮想マシンを起動します。
6.仮想マシンが起動したら「ifconfig」コマンドでBadstoreのipアドレスを調べます。
7.BadStoreのFQDNである「www.badstore.net」とIPアドレスを紐づけるためにhostsファイル(C:¥Windows¥System32¥drivers¥etc¥hosts)を以下のように編集します。
192.168.222.128 www.badstore.net
8.FirefoxでBadStoreのURLにアクセスし、サイトが表示されればセットアップ完了です。
脆弱性診断の実行
まず自動スキャン機能として静的スキャンを実行してみます。
静的スキャンは攻撃用リクエストを送ることなくクロールのリクエスト/レスポンスだけで診断します。
診断対象のWebサイトはいくつかのWebページやリクエスト内容を持っており、診断対象のページが明確ではないですが、診断対象のページを自動的にクロールして、記録してくれるスパイダーという機能があります。
こちらの機能を実行することで自動的にクロールで発見されたページに対して静的スキャンを実行してくれます。自動で遷移できないページに対しては手動で記録する必要があります。
1.標準モードになっていることを確認し、OWASP ZAPのサイト欄からBadStoreを選択し、「攻撃」-「スパイダー」を選択します。
2.「スキャンを開始」ボタンで実行します。
コンテキストを登録していると診断対象としたくないページを設定することができますが今回は説明を省略します。
3.診断対象が自動的に記録され、静的スキャンが実行されます。
下部のMessagesタブを選択後、診断対象のURLを右クリック-「このノードのアラート」を選択すると各URLに対しての検出アラートを確認することができます。
次に、手動スキャンを実行してみます。
手動スキャンを実行するにあたっては最低限必要な診断項目や手順を定義することで、一定レベルの手動診断による脆弱性診断を行うことができる「Webアプリケーション脆弱性診断ガイドライン」を参考にして手動スキャンを実行します。
「Webアプリケーション脆弱性診断ガイドライン」はこちらのサイトから入手できます。
クロスサイトスクリプティング(XSS)が存在するか確認する
今回は前述の代表的な脆弱性であるクロスサイトスクリプティング(XSS)が存在するかどうか確認してみます。
「Webアプリケーション脆弱性診断ガイドライン」のNo.19である検出パターン「<script>alert(1)</script>」を挿入してリクエストを送信します。
- まずFirefoxでBadstoreに接続し、商品検索のテキスト入力欄に「1000」を入力し、商品検索します。
2.商品検索時のURLを確認し、OWASP ZAPの履歴から同じURLを探します
3.対象の履歴を選択後、右クリックメニューの「再送信」を選択します。
4.リクエストの「searchquery=1000」部分を以下に書き換えます
searchquery=1000<script>alert(1)</script>
5.レスポンスタブを選択し、「送信」ボタンを押下します。
その後レスポンスのBodyからHTMLのBODY部分を確認すると挿入した検出パターン文字列がそのまま表示されていることが分かりました。
埋め込んだ脆弱性が実行されるか確認してみる
今度は実際にブラウザのURLから直接編集したURLを入力してスクリプトが実行されるか確認してみます。
先ほどと同じようにOWASP ZAPの履歴からURLを書き換えて送信したURLをコピーし、ブラウザで接続します。するとスクリプト(<script>alert(1)</script>)が実行され、ダイアログが表示されました。
ちなみに脆弱性の対策としては、以下のように適切にエスケープ文字に置き換えることによってスクリプトの実行を防ぐことができます。
💡対策⇒「<」と「>」をエスケープ文字に置き換え
実行前:<script>alert(1)</script>
実行後:<script> alert(1) </script>
まとめ
自身の勉強として脆弱性診断を行ってみましたが、以下理由によりそこそこハードルが高いと感じました。
⚠️・HTML等のWebの知識が必要
・検出される脆弱性の種類は様々で、脆弱性の内容や対策方法を理解するのが大変
・自動スキャンで全ての脆弱性を検出することはできず、Webサイトに応じた手動スキャンのスキルが必要
ですが、紹介したトレーニングサイトや脆弱性診断ツールが無償で公開されているため、勉強する環境は整っています。また、ハードルが低くないが故に奥が深く、やりがいのある分野だと思います。
機会を作って、プラットフォーム脆弱性診断についても勉強してみようと思っています。
さいごに
さいごに注意事項ですが、脆弱性診断は他人、他社のWebサイトやWebアプリケーションに対して実行してはいけません。
脆弱性診断はWebアプリケーションに対して攻撃を行うことで脆弱性を発見する性質もあり、法的措置を取られる可能性があります。
トレーニングはBadStoreのようなやられWebアプリケーションに対して行うようにしましょう。
さいごまで読んでいただき、ありがとうございました!