B社は,セキュリティ診断サービスを提供している会社である。このたび,転職支援サービスを提供しているM社から,転職支援Webサイト(以下,Mサイトという)のセキュリティ診断を受注した。
Mサイトを利用する求職者は,氏名,自宅住所,電話番号,勤務先などの求職者属性情報と,希望職種,希望条件などの求職情報を入力する。求人企業は,会社情報,求人情報,求人担当者の氏名,所属部署などの情報を入力する。
Mサイトは,機能を追加した新しいバージョンのWebアプリケーションプログラム(以下,MサイトのWebアプリケーションプログラムをWebアプリという)の開発が完了したところであり,リリース前である。
〔セキュリティ診断の診断対象と診断方法〕
今回のセキュリティ診断の診断対象と診断方法は,図1のとおりである。
【診断対象】
- Mサイトには本番用サイトと検証用サイトがあり,診断対象はMサイトの検証用サイトとする。検証用サイトには,開発が完了した新しいバージョンのWebアプリが導入されている。なお,本番用サイトと検証用サイトは,同一の構成である。
- 検証用サイトでは,アクセス元のIPアドレスを制限している。診断に当たり,B社からも検証用サイトにアクセスできるように,検証用サイトの設定を変更する。
- 検証用サイトには,テスト用疑似データが投入されている。
【診断方法】
- B社の社内にある診断用PCからインターネットを経由して診断を行う。
- Webアプリの脆弱性の検出を行う。
- Webアプリの脆弱性の検出は,診断ツールと診断員の手作業で行う。
- 診断に当たり,必要に応じてMサイトの設計書を参照する。
図1 診断対象と診断方法
診断の際に参照した,Mサイトの設計書中の画面遷移図を図2に,各画面のURLを表1に示す。
図2 画面遷移図(抜粋。本アプリでは画面と遷移の一覧に書き換えている)
| 画面番号 | 画面名 | 画面上の入力項目・ボタン |
|---|
| 01 | ログイン | 利用者ID,PW,PW再設定ボタン,ログインボタン |
| 02 | 求人企業トップ | 求人情報登録,応募者確認,問合せ確認,マイページの各ボタン |
| 03 | 求人企業マイページ | PW変更ボタン |
| 04 | PW変更 | 旧PW,新PW,新PW(確認用),変更ボタン |
| 05 | PW変更完了 | “PWを変更しました”,OKボタン |
| 06 | PW再設定(1) | 利用者ID,メール送信ボタン |
| 07 | メール送信完了 | “メールを送信しました メール中のリンクから処理を継続してください” |
| 08 | PW再設定(2) | 新PW,新PW(確認用),PW再設定ボタン |
| 09 | PW再設定完了 | “PWを再設定しました”,OKボタン |
| 画面遷移 | 遷移元(操作) | 遷移先 | CSRF対策 |
|---|
| (ア) | 01のログインボタン | 01 | 施されていない |
| (イ) | 01のログインボタン | 02 | 施されていない |
| (ウ) | 01のPW再設定ボタン | 06 | 施されていない |
| (エ) | 02のマイページボタン | 03 | 施されていない |
| (オ) | 03のPW変更ボタン | 04 | 施されていない |
| (カ) | 04の変更ボタン | 05 | 施されている |
| (キ) | 05のOKボタン | 03 | 施されていない |
| (ク)¹⁾ | 06のメール送信ボタン | 07 | 施されている |
| (ケ) | 08のPW再設定ボタン | 09 | 施されている |
| (コ) | 09のOKボタン | 01 | 施されていない |
PW:パスワード メール:電子メール
注記1 ログインしていない状態で,02〜05の画面にアクセスした場合,エラー画面が表示される。
注記2 設問に関係しない画面,ボタン及び画面遷移は省略している。
注¹⁾ 画面遷移の際,Mサイトから,登録しているメールアドレスに,PW再設定用URLが記載されたメール(あ)を送信する。利用者がメール(あ)に記載されたPW再設定用URLにアクセスすると,画面08を表示する。
表1 各画面のURL
注¹⁾ xは,PW再設定を行う都度生成されるランダムな英数字32字の文字列である。
〔セキュリティ診断報告書〕
B社は,セキュリティ診断を実施し,図3の診断報告書を作成した。
診断報告書
1章 診断結果概要
(省略)
2章 Webアプリケーションプログラムの診断結果
2.1 検出した脆弱性の概要
検出した脆弱性は,表Aのとおりである。
表A 検出したWebアプリケーションプログラムの脆弱性の一覧
| 項番 | 重要度 | 脆弱性の種類 | 検出箇所 |
|---|
| 1 | (省略) | セッションフィクセーション | 画面遷移【 a1 】 |
| 2 | (省略) | メールヘッダーインジェクション | (省略) |
| 3 | (省略) | HTTPヘッダーの不備 | 全ての画面遷移 |
2.2 検出した脆弱性の説明
2.2.1 セッションフィクセーション
(1) 脆弱性の内容
Mサイトではform内のhiddenフィールドであるsessionIDの値だけでセッション管理を実施していた。しかし,表Bのいずれの画面遷移においても,HTTPレスポンス中のsessionIDの値が同一であった。
表B セッションフィクセーション脆弱性の確認
| 画面遷移 | HTTPレスポンス中のsessionID |
|---|
| Webブラウザに直接URLを入力して,画面01を表示したとき | <input type="hidden" id="sessionID" name="sessionID" value="764b2ac2-0452-49e4-92a7-0914fa005011"> |
| 画面遷移(ア) | <input type="hidden" id="sessionID" name="sessionID" value="764b2ac2-0452-49e4-92a7-0914fa005011"> |
| 画面遷移(イ) | <input type="hidden" id="sessionID" name="sessionID" value="764b2ac2-0452-49e4-92a7-0914fa005011"> |
| 画面遷移(エ) | <input type="hidden" id="sessionID" name="sessionID" value="764b2ac2-0452-49e4-92a7-0914fa005011"> |
攻撃者が図Aの手順でこの脆弱性を悪用すると,Mサイトに不正にログインすることができる。
手順1:求人企業への問合せ先として登録したメールアドレスを,何らかの方法で入手する。
手順2:URL“【 a2 】”にアクセスして,sessionIDを入手する。
手順3:次の二つの要素を含むHTMLを作成する。
- 手順2で入手したsessionIDを記述したフォーム
- 当該HTMLがWebブラウザに読み込まれた直後に,上記のフォームをURL“【 a2 】”にPOSTメソッドで送信するスクリプト
手順4:手順3で作成したHTMLを,罠サイトに置く。
手順5:手順4のHTMLへのリンクを含むメールを作成し,手順1で入手したメールアドレスに送信する。
手順6:手順5のメールがメール受信者に届き,罠サイトにアクセスするのを待つ。
手順7:罠サイトへのアクセスを検知後,【 b 】が完了することを期待して数分間待ち,手順2で入手したsessionIDを指定した状態で,URL“【 a2 】”にアクセスする。
図A セッションフィクセーション脆弱性を悪用して不正ログインする手順
攻撃者が,セッションフィクセーション脆弱性を悪用して不正ログインに成功し,画面02で応募者確認ボタンをクリックして,当該企業の求人に応募した求職者の求職者属性情報と求職情報を閲覧できる。また,同じ画面02で問合せ確認ボタンをクリックして,当該企業に問合せを行った求職者の求職者属性情報と問合せ内容を閲覧できる。
(2) 脆弱性の修正方法
【 a1 】の画面遷移の際に実行されるコードにおいて,【 c 】ことを推奨する。
(省略)
図3 診断報告書
B社は,M社に診断報告書を提出し,セキュリティ診断を完了した。