ファイナンス、情報通信技術のスキル・アグリゲーション・サイト
情報処理推進機構(IPA)が実施する情報処理技術者試験の「情報セキュリティスペシャリスト試験」(SC)午後Ⅰ試験・午後Ⅱ試験の過去の出題から、情報セキュリティへの考えを深めていきます。
過去の試験問題の全文と解答例、講評が、 https://www.jitec.ipa.go.jp
試験対策以外にも、情報セキュリティ学習をさらに進めるためのきっかけとなれば、と思います。
図1 試験用サイトの画面構成と面面の遷移
図2 画面 C の概要
- ・ Web ブラウザ起動後,試験用サイトの面面の中で最初にアクセスできるのは,面面 A,B だけであり, 画面 C~E の URL を指定してアクセスしても,あらかじめ画面 A にアクセスしていないと,面面 A にリダイレクトされる。
- ・ 画面 A にアクセスがあると,セッション ID を格納する Cookie(名前を SESSIONID とする)の有無を調べ,ない場合には,試験用サイトが動作するサーバで,セッション ID の値をキーとしたログイン状態を保持するセッションオブジェクトを新規に生成する。その後,サーバは,名前を SESSIONID とする Set-Cookie ヘッダを Web ブラウザに返信する。以後,同一のセッション ID によるアクセスには,同一のセッションオプジェクトが利用され,サーバでセッションが管理される。
- ・ 画面 B へのアクセスによってセッション ID が更新されることはない。
図3 セッション管理機能の仕組み
図4 検索文字列の引継機能の仕組み
図5 検査シナリオ
図6 検査シナリオを実行した際の HTTP ヘッダ(抜粋)
次は,図6に関する U 主任と T 君のディスカッションである。
U 主 任 : 図6中のレスポンス X について,セキュリティ上,気になる点があれば指摘してください。 T 君 : Set-Cookie へッダに,① secure 属性が設定されていません。secure 属性を設定しないと,セッション ID を第三者に盗聴されるリスクがあり,セッションハイジャックなどにつながると思います。 U 主 任 : 他に,図6全体を通して,気になる点はありますか。 T 君 : HTTP へッダインジェクションの脆弱性が存在する可能性があります。図7の検査コードをリクエス卜のクエリ文字列のパラメタの値にセットし,スクリプトの実行ができるかどうか,確認してみます。
a $ %3chtml%3e
%3cbody%3e %3cscript %3ealert %28%221%22%29%3c%2f script%3e Y%3c%2fbody%3e%3c%2fhtml%3e 注記1 図中の文宇列は URL エンコード済みの形式である。
注記2 ASCII 文字コード一覧を図に示す。
図7 クエリ文字列のパラメタの値にセットする検査コ一ド
図8 ASCII 文字コ一ド一覧(抜粋)
T 君が,図7のコードを用いてしたところ,予想どおり,警告ダイアログが表示された。T 君は,HTTP へッダインジェクションの脆弱性が存在することを指摘した。
T 君 : サーバ側での HTTP レスポンスヘッダの出力処理に問題があり,HTTP へッダインジェクションの脆弱性が存在すると思います。具体的には,入力された検索文字列を適切に処理せずに Set-Cookie へッダの値にセットしているものと思われます。この脆弱性を突いた攻撃では, b 攻撃と同様に,攻撃者が指定した任意のスクリプトをクライアント側で実行できます。 U 主 任 : 仮に問題があるとした場合,Set-Cookie へッダの値をセットするサーバ側の処理において,どのような対策が考えられますか。 T 君 : 幾つかの対策があります。例えば,HTTP レスボンスへッダを適切に出カするために,Web アプリの実行環境やプログラム言語が用意している,へッダ出力用の関数や API を使用する方法が考えられます。それが使用できない場合は, c するといった処理を開発者が自身で実装する方法も考えられます。 U 主 任 : その他に気になる点はありますか。 T 君 : はい。図6の一連の HTTP へッダのうち,例えば,行番号 d と行番号 e を見比べると,サーバ側のセッション管理に問題があり,セッションフィクセーションの脆弱性が存在する可能性があります。攻撃者が Cookie Monster Bug を突く攻撃や,前述した HTTP へッダインジェクション攻撃を組み合わせることによって,セッションフィクセーションを成功させる可能性があります。図9に攻撃手順の一例を示します。
- 1. 攻撃者 J が,試験用サイトの画面 A にアクセスし,セッション ID を取得する。このときの,セッション ID を “01234” とする。
- 2. 攻撃者 J が,攻撃対象の利用者 K に HTML メールを送信する。この HTML メールには URL リンクがあり,攻撃用のクエリ文宇列を含む画面 C の URL が記載されている。
- 3. 利用者 K が,試験用サイトの画面 A にアクセスし,セッション ID を取得する。このときの,セッション ID を “56789” とする。その後,HTML メールの URL リンクをクリックする。その際に送信される HTTP リクエストには,攻撃者 J が用意した攻撃用クエリ文字列が含まれており,検索文字列の値は次のとおりである。
%0d%aset
%2dcookie %3a%20SESSIONId %3d f %3b%20Expires%3d(省略)domain %3dexample %2eco%2ejp%3b(省略) - 4. 利用者 K がログインする。 5. 攻撃者 J は,利用者 K になりすまし,本来はアクセス権限がない画面にアクセスできるようになる。
図9 攻撃手順の一例
U 主 任 : セッションフィクセーションの脆弱性について,どのような対策が考えられますか。 T 君 : 例えば,サーバ側の処理を変更する方法があります。検査シナリオの画面遷移でいえば,ログイン後の,画面 E から画面 C に遷移する際の,サーバ側の処理において, g といった対策を行うことによって,この脆弱性を確実に防ぐことができます。
設問1 本文中の 下線① について,(1),(2) に答えよ。
«ワンポイント»
図1における『画面 B』の URL に着目します。『http://…』と暗号化されていません。
(1) secure 属性が設定されていないと,どの画面に遷移するときにセッション ID を盗聴されるリスクがあるか。遷移直後の画面を,画面 A~E の中から一つ選ぴ,答えよ。
設問 | 解答例・解答の要点 | |
設問1 | (1) | 画面 B |
(2) secure 属性が設定されていないと,セッション ID を盗聴されるリスクがある理由を,40 字以内で述ベよ。
設問 | 解答例・解答の要点 | |
設問1 | (2) | 暗号化されない HTTP 通信において,セッション ID が送信されるから |
設問2 HTTP へッダインジェクションの脆弱性について,(1)~(3) に答えよ。
«ワンポイント»
「HTTP ヘッダインジェクション」は、 HTTP において改行が2回続いた場合、それ以降をボディとして解釈することを利用した攻撃です。
(1) 図7 中の a に入れる適切な文字列を URL エンコード済の形式で答えよ。
設問 | 解答例・解答の要点 | ||
設問2 | (1) | a | %0d%0a%0d%0a |
(2) 本文中の b に入れる適切な字句を解答群の中から選ぴ,記号で答 えよ。解答群
- ア SQL インジェクション
- イ TCP SYN Flood
- ウ クロスサイトスクリプティング
- エ ディレクトリトラパーサル
設問 | 解答例・解答の要点 | ||
設問2 | (2) | b | ウ |
(3) 本文中の c に入れる適切な処理を,30 字以内で具体的に述ベよ。
設問 | 解答例・解答の要点 | ||
設問2 | (3) | c |
・ 出力文字列に改行コードがあるとエラー画面を出力 ・ 出力文字列の改行コード以降の文字列を削除 |
設問3 セッション管理の脆弱性について,(1)~(4) に答えよ。
«ワンポイント»
図3によれば、画面 A に新規にアクセスがあると、ログイン状態を保持するセッションオブジェクトを生成し、『以後,同一のセッション ID によるアクセスには,同一のセッションオプジェクトが利用される』、とあります。
(1) 本文中の d , e に入れる適切な行番号を答えよ。
設問 | 解答例・解答の要点 | 備考 | ||
設問3 | (1) | d | 09 又は 17 | 順不同 |
e | 27 |
(2) 図9 中の f に入れる適切な字句を答えよ。
設問 | 解答例・解答の要点 | ||
設問3 | (2) | f | 01234 |
(3) 図9 中の手順4及び5について,利用者 K がログインした後,攻撃者 J が利用者 K になりすますことができるのはなぜか。“セッション ID” という字句を含めて 40 宇以内で述ベよ。
設問 | 解答例・解答の要点 | |
設問3 | (3) | 攻撃者 J が取得したセッション ID で利用者 K にログインさせているから |
(4) 本文中の g に入れる適切な対策を,30 字以内で述べよ。
設問 | 解答例・解答の要点 | ||
設問3 | (4) | g | 新しいセッション ID によるセッションを開始する |