平成23年秋期試験午後問題 問9

問9 情報セキュリティ

⇱問題PDF
Webアプリケーションのセキュリティ対策に関する次の記述を読んで,設問1~4に答えよ。
 W社は,インターネット上で日用雑貨品の会員制通信販売システムを運営する会社である。この通信販売システム(以下,本システムという)は,商品検索,注文,会員管理,会員掲示板などの機能を提供する。
 本システムの機能を利用するには,あらかじめ会員管理機能を使って,会員登録しなければならない。
 図1は,会員掲示板機能を使った会員掲示板画面の例である。
pm09_1.png
 ある日,会員情報が知らぬ間に書き換わっていたり,覚えの無い商品が届いたりしたとのクレームが複数の会員から寄せられた。情報システム部門で本システムを調べたところ,クレームに該当する登録情報の変更処理や商品の注文処理が確認された。
 情報システム部門の責任者であるA部長は,セキュリティ事故が発生したと判断して,本システムの利用を直ちに停止し,外部のセキュリティ専門会社の支援を受けながら対策をとることを指示した。
 後日,外部のセキュリティ専門会社から,今回のセキュリティ事故に関する調査報告書が届けられた。調査報告書に記載された内容は,次のとおりである。

〔セキュリティ事故の経過〕
  • 会員Xは,本システムのトップ画面から,会員ログインページへのボタンを押した。
  • 本システムは,ログイン画面を表示した。
  • 会員Xは,ログイン画面で,自身のアカウント名とパスワードを入力した。
  • 本システムは,アカウント名とパスワードを確認して,セッションIDを発行し,cookieを利用して会員のブラウザに戻した。
  • 会員Xは,会員メニュー画面で,会員掲示板機能を選択した。
  • 本システムは,会員掲示板画面を表示した。
  • 会員Xが,特定の会員掲示板ページを参照したときに,悪意のあるコードが自動的に実行され,会員Xの登録情報を書き換える処理と,注文処理が行われた。
〔想定される原因〕
  • 会員掲示板ページを出力する処理に問題があり,この問題を悪用した<script>タグを用いた悪意のあるコードが,会員掲示板ページに埋め込まれた形跡があった。
  • ログインした会員が,この悪意のあるコードが埋め込まれた会員掲示板ページを参照すると,そのコードが自動的に実行され,会員の登録情報を書き換える処理や特定の商品の注文処理が行われるようになっていた。
〔原因から想定される脅威〕
  • 登録情報や会員掲示板情報に対して,ログインした会員が予期しない処理を勝手に実行させられることによって起こる情報の改ざん
  • ログインした会員が予期しない注文処理を勝手に実行させられることによって起こるサービスの悪用
〔対策の提言〕
  • 入力された文字列は,そのままではなく,エスケープ処理を適切に施してからブラウザに表示する。入力データに"<",">","&"などのHTMLの特別な記号文字が存在した場合,その記号文字が有する特別な働きを無効にする文字や文字列に置き換える。例えば,">"は"&gt;","<"は"&lt;","&"は"&amp;"とする。これによって,タグの文字列" <script>" は,文字列"&lt;script&gt;"に置き換わる。
  • 特に,会員情報の登録処理や注文処理のような重要な処理を実行するページにはaメソッドでアクセスするようにし,そのhiddenパラメータに秘密情報(ページトークン)が挿入されるように,前のページを自動生成する。実行ページでは,その値が正しい場合だけ処理を行う。もしaメソッドの代わりにbメソッドでアクセスすると,秘密情報をURLに付加して送信することになるので,ここでは利用を避けるべきである。また,HTMLフォームで<form>タグを用いる場合,メソッド属性の指定を省略するとbメソッドと解釈されるので,適切に指定する必要がある。
 今回のように,ログインした会員だけが,予期しない処理を実行させられてしまうセキュリティ攻撃は,クロスサイトリクエストフォージェリーと呼ばれている。
 この攻撃が成功する主たる要因は,会員の正しい要求と悪意のあるコードの要求を区別できないことである。
 この後,A部長は,外部のセキュリティ専門会社の提言に従い,今回のセキュリティ攻撃の根本的な原因を解消すべく,本システムの改善を行うことにした。
 提言された対策(1)を本システムの全てのプログラムに適用し,その上で重要な処理を行う注文機能と会員管理機能に対して,提言された対策(2)を適用した。会員登録時における本システムと会員のブラウザとの間の情報の流れは,図2のとおりである。
pm09_2.png

設問1

本文中のabに入れる適切な字句を解答群の中から選び,記号で答えよ。
a,b に関する解答群
  • GET
  • HEAD
  • OPTION
  • POST
  • PUT
  • RESET

解答例・解答の要点

a:
b:

解説

HTTPではサーバにデータの処理方法を伝えるための文字列をHTTPリクエスト内で指定します。これをHTTPリクエストメソッドといい、HTTP1.1では次の8つが規定されています。
GET
最も基本的なメソッドで、URLの指定先がファイルであればその内容、プログラムであればその出力を返す。パラメータは、○○.php?mode=new&uid=34632847 というようにURLの後ろに付加して送信される。
POST
クライアントからサーバに対してデータを送り、サーバはそのデータを処理した結果を返す。GETメソッドと異なり、パラメータはHTTPリクエストのメッセージボディ部に格納された状態で送信される。HTMLフォームへの入力データなどのURLに収まりきらない大きいデータを送信することが可能。
HEAD
GETと同じだが、HTTPレスポンスのヘッダー部のみを返す。
PUT
URLで指定したファイルを作成・置換する。
DELETE
URLで指定したファイルを削除する。
OPTIONS
利用できるメソッドの一覧を返す。
CONNECT
HTTPS通信を中継するプロキシに対して暗号化されたデータをそのまま転送するように求める。
TRACE
HTTPリクエストの内容をそのまま返す
なお、通常使用する分にはGETとPOSTの違いだけ知っていれば問題ありません。

abについて〕
サーバにリクエストを送信し、結果ページを得るために使用されるメソッドはGETとPOSTのみです。したがってabにはGET又はPOSTが入ります。

ヒントとなる字句は幾つかあるのですが、最もわかりやすいのは本文中の「bメソッドでアクセスすると,秘密情報をURLに付加して送信することになるので…」という部分です。前述したように、GETとPOSTではパラメータの格納方法に違いがあります。URLに付加する方法でパラメータを送信するのはGETメソッドであるため、bGETと判断できます。
さらにaメソッドは、GETの代わりとしても使用でき、パラメータがURLに付加されないという特徴からPOSTと判断できます。

a=エ:POST
 b=ア:GET

サーバへの入力データを送信するのにGETメソッドを使用した場合、URL上のパラメータが丸見え状態になるため秘密情報の不正取得、URLパラメータの改ざんといったことが行われる可能性が高まります。このためサーバへ重要データを送信する際にはPOSTメソッドを使用すべきです。またHTMLではユーザからの入力データを<form>タグを用いてサーバに送信することができますが、<form>タグは明示しない限りGETメソッドで送信してしまうので、POSTで送信する場合は<form>タグに適切な属性値(method="POST")を設定する必要があります。

設問2

〔対策の提言〕(1)について,今回の場合,<script>タグを用いたコードにエスケープ処理を適切に施す目的は何か。20字以内で述べよ。

解答例・解答の要点

・scriptタグを無効にする (14文字)
・悪意のあるコードを実行させない (15文字)

解説

HTMLでは<script>タグ内の文字列はプログラムと認識され自動的に実行される仕組みになっています。

攻撃者が掲示板の投稿として<script>タグと不正コードを入力し、出力時に何の措置も行われなかった場合、その投稿が表示されるページを閲覧した利用者のブラウザ上で不正コードが実行され被害が発生します。これを防ぐにはページの出力時に幾つかのHTML特殊文字(<,>,',",&など)を実体参照文字(&lt;,&gt;,&apos;,&quot;,&amp;など)に置き換え、ブラウザがHTMLタグだと解釈しないように変換する必要があります。この処理をエスケープ又はサニタイジングといいます。
この処理を行うことでたとえ入力データに悪意のあるコードが含まれていても、ブラウザ上では単に文字列と認識されるようになるため、スクリプトとして実行されることはなくなります。

∴scriptタグを無効にする
 悪意のあるコードを実行させない
pm09_3.png

設問3

図2において,秘密情報(ページトークン)を送受信する適切な箇所の組合せを解答群の中から選び,記号で答えよ。
解答群
  • ①,②,③
  • ②,③,④
  • ③,④
  • ④,⑤
  • ⑤,⑥

解答例・解答の要点


解説

クロスサイトリクエストフォージェリ(CSRF)は、会員制サイトなどのログインやセッション管理を伴うWebアプリケーションの不備をつく攻撃手法で、会員がログイン状態であるときに会員情報の変更や商品の注文画面へのハイパーリンクをクリックさせる(またはスクリプトでリダイレクトする)ことで意図しない不正な処理要求を行わせる行為をいいます。

本文中にも

「会員情報の登録処理や注文処理のような重要な処理をするページには…,そのhiddenパラメータに秘密情報が挿入されるように,前のページを自動生成する。実行ページでは,その値が正しい場合だけ処理を行う」

と対処法が記述されているように、CSRF被害を回避するには不正なリクエストを退ける次のような手順を処理確定前に組み込むことが求められます。
  • 秘密情報(ページトークン)による認証
  • パスワードの再入力
  • 参照元情報(Referrer:リファラ)の検証
本文中の手順では、処理実行のリクエストが行われる1つ前は確認画面になります。つまり確認画面と共にページトークンをクライアントに送り、クライアントにはそのページトークンを実行リクエストと共にサーバに送り返してもらう流れになります。したがってページトークンが送受信される通信は「④,⑤」の2つです。

∴④,⑤
pm09_4.png

設問4

今回のセキュリティ攻撃を防ぐ対策として〔対策の提言〕(1),(2)を実施した上で,この攻撃を検出する対策をとることにした。この攻撃を検出するために有効な対策として適切なものを解答群の中から選び,記号で答えよ。
解答群
  • 悪意のあるコードを埋め込まれた特定の会員掲示板ページを直ちに削除する。
  • 会員情報の登録や変更,注文処理などの重要な処理を行うページでは,HTTPSによって,途中経路を暗号化する。
  • 会員情報の登録や変更,注文処理などの重要な処理については,必ずログを記録する。
  • 本システムで利用するセッションIDとして会員ごとに一意の固定値を割り当て,常にそれを利用する。

解答例・解答の要点


解説

  • 被害の再発生を防止する効果が期待できますが、攻撃を検出することはできません。
  • ページトークンやパスワードを盗聴されることで発生するリプレイアタック、セッションハイジャックなどの被害を未然に防ぐ効果がありますが、攻撃を検出することはできません。
  • 正しい。記録されたログを解析することで攻撃の痕跡や兆候を発見できるようになります。
  • セッションIDに固定値を使用するとセッションハイジャックの被害に遭う可能性が高まります。また攻撃を検出する効果も望めません。
模範解答

Pagetop