[問題文・解答]
平成27年度4月に実施された情報セキュリティスペシャリスト試験の午後1試験の問題・解答はIPA公式ページからダウンロード出来ます。(以下リンク)
[H27春 午後1 問題文] [H27春 午後1 解答]
[問題概要]
題材は、Webサイトの脆弱性と対策についてです。脆弱性検査サービス会社の社内技能試験で、受験者が試験用Webサイトを操作後、HTTPヘッダインジェクションやセッションフィクセーションなどのWebサイトが持つ脆弱性を指摘し、対策を提案するという内容です。
HTMLやHTTPヘッダインジェクション等の知識が必要とされ、難易度はやや高めです。
[設問1]
HTTPS通信でセッションIDが漏れるケース
- 1つのホストの中でHTTPとHTTPSのページ間を行き来する。
- ログイン前のHTTPのページで既にセッションIDを発行しており、ログイン後も同じセッションIDを使用する。
ケース1への対策は、HTTPSのCookieにsecure属性をつける方法があります。secure属性が付けられたCookieは、HTTPのコンテンツ宛には送られなくなります。
ケース2への対策は、ログインまでのHTTPのページではセッションIDを発行しないか、もしくはログイン時に新たにセッションIDを発行するという方法があります。
(1)
図1より、画面BのみHTTPとなっています。また、図3より、「画面Bへのアクセス時にはセッションIDは更新されない」とあります。このことから画面Bに遷移する際にセッションIDが盗聴されるリスクがあることが分かります。
[答] B
(2)
HTTPSのセッションIDが漏れるケース1の対策にあるようにsecure属性をつけることで暗号化されないHTTPにはセッションIDが送られなくなります。
[答] 暗号化されないHTTP通信において、セッションIDが送信されるから。
[設問2]
HTTPヘッダインジェクション
HTTPのリクエストボディ内の値をレスポンスヘッダ内で使用する場合に、その値が改行文字を2つ以上含むと、その改行文字以降の部分がレスポンスボディとして扱われ、意図しないページが表示されてしまう攻撃です。
対策としては、以下の方法があります。
・リクエストボディの値をレスポンスヘッダで使用しない。
・改行コードをエスケープする。(他の文字に置換もしくは削除)
(1)
問題の画面Cでは、検索フィールドの文字列を結果表示の際にSet-Cookieヘッダで使用しています(図4より)。そのため、改行コードを2つ入れた後に警告ダイアログ表示のHTMLコードを入力すれば、HTTPヘッダインジェクションの検証が出来ます。図8のASCII文字コード一覧より、入力する検査コードは以下となります。
改行改行<html><body><script>alert("1")</script></body></html>
→ %0d%0a%0d%0a以下図7の内容
改行コードは、Unix系は%0a、Windows系は%0d%0aらしいけど、今回はWindows系というのはどこで判断すればよいのかな?
[答] %0d%0a%0d%0a
(2)
消去法でも答えが導けそうですが、P.7上部の「攻撃者が指定した任意のスクリプトをクライアント側で実行出来る」との記述からもクロスサイトスクリプティングと推測出来ます。
[答] ウ クロスサイトスクリプティング
[答] ウ クロスサイトスクリプティング
(3)
HTTPヘッダインジェクションの説明に書いたように改行コードのエスケープを行うことで対策となります。
[答] ・出力文字列に改行コードがあるとエラー画面を出力
・出力文字列の改行コード以降の文字列を削除
・出力文字列の改行コード以降の文字列を削除
[設問3]
セッションフィクセーション
攻撃者があるWebサイトで取得したセッションIDをWebサイトの利用者に強制的に使用させる攻撃。
対策として毎回新しいセッションIDを使用する方法があります。
(1)
P.7中段でT君が指摘していますが、図6のHTTP通信であるレスポンスXやリクエストY内のCookieで指定されているセッションIDとHTTPS通信であるリクエストZ内のセッションIDが同じIDが使用されている点がサーバ側のセッション管理の不備となります。
従って、eとfには行09(又は17)と行27が該当します。
従って、eとfには行09(又は17)と行27が該当します。
[答] d) 09 又は 17 e) 27
(2)
攻撃者Jは利用者の情報にアクセス出来るように自分の取得したセッションID(01234)を利用者Kのセッションにも指定します。よって、攻撃用クエリ文字列は以下になります。
Set-Cookie: SESSIONID=01234; Expires=....
[答] 01234
Set-Cookie: SESSIONID=01234; Expires=....
[答] 01234
(3)
[設問3](2)に記載したように攻撃者Jは攻撃用クエリ文字列を用いて、自身の取得したセッションIDを利用者Kに利用させています。この状態で利用者Kがログインすると、攻撃者Jからも利用者Kの情報にアクセス可能となります。
[答] 攻撃者Jが取得したセッションIDで利用者Kにログインさせているから。
[答] 攻撃者Jが取得したセッションIDで利用者Kにログインさせているから。
(4)
セッションフィクセーションの対策の通りです。
[答] 新しいセッションIDによるセッションを開始する。
平成27年度春のSC午後1試験の他の問題の解説は下記投稿で行っています。
また、オススメ問題について下記投稿に記載しています。
上記の解説は問題と解答を元に自分なりの考え方を記述しており、間違っている部分もあるかと思いますので、ご了承願います。また、誤りについては正しい考え方をご指摘・ご教授頂けると助かります。
0 件のコメント:
コメントを投稿