No245 クロスサイトスクリプティング(XSS)の脅威

前回までに、JavaScriptというプログラム言語について解説をしました。

今回は、前回までの知識を前提に、クロスサイトスクリプティングという攻撃手法について解説をします。

このクロスサイトスクリプティングは、少々複雑な仕組みですので今回はかなり技術寄りの解説となりますので「よくわからないや」となっても良いと思っています。
ただ、そういう攻撃方法があり、サイト管理側なら対処(技術者に対応してもらうこと)が必要だ、という二点はご理解いただければと思います。


1. クロスサイトスクリプティング

クロスサイトスクリプティングというのは、複数のサイトにまたがったスクリプト攻撃という意味で、目的のサイトから不正に情報を入手する攻撃方法です。
英語のCross Site Scripting の略称なので、素直に考えればCSSなのですが、これだと数回前に解説したCSS(こちらはCascaded Style Sheet)と同じ省略形になってしまうため、最初のCrossを"X"に置き換えたXSSという表記に落ち着いたものです。

さて、このクロスサイトスクリプティングですが、名前にJavaScriptと同じ「スクリプト」という言葉を含んでいます。
このスクリプトという言葉は元々は「脚本」の意味ですが、プログラマの間では「ちょっとしたプログラム」の意味でよく使われます。「例の集計スクリプト、さっき作っといたから」てな具合です。

じゃあ、クロスサイトってどういう意味でしょうか?
これがXSSの理解が難しい原因なのですが、XSSでは「ワナを仕掛けるサイト」と「情報を盗みたいサイト」の二つのサイトが登場します。

つまり、二つのサイト間でスクリプトを行き来させ、不正にスクリプトを実行させる方式のことをXSSというわけです。


2. スクリプトを行き来させるって?

スクリプトを行き来させると言いますが、そんなこと可能なんでしょうか?
利用者だって、あからさまに怪しげなスクリプトをダウンロードしろなんて言ったってそうそうやってくれるはずがありません。

ですが、ここで言うスクリプトは「小さなプログラム」で、URL(httpsとかhttpで始まるアレ)の中に埋め込んで(こっそりと)送り込むのです。
利用者にアプリをダウンロードしてもらうまでもないのです。

え?URLってどのサイトのどのページかを示すためのものでしょ?スクリプトなんて組み込めるの?と思われる方も多いでしょうが、これは実に簡単です。

URLは一般的に次のような形式となっています。

 https://www.example.com/yyy?aaa=***&bbb=***

 www.example.com:サイト名やドメイン名の例
 yyy:ディレクトリ名やページ名
 ?aaa=***&bbb=***: パラメタ(入力された内容など)

最後のパラメタ部("?"以降の部分)がポイントです。ここは何でも書けるルールです。検索画面で入力した文字列、ログイン画面で入力したIDやパスワード、SNSのコメントといった情報を次のページに渡す時にこのパラメタを使います。
皆さんは日常的に知らず知らずのうちに、パラメタ付きのURLをたくさん使っているのです。

余談:
 Googleで検索をした結果のURLをよーく見てください。
 あなたの入力内容がURLに埋め込まれていますよね。
 Googleのサイトはこの内容を見て検索結果を表示しているのです。

何を書いてもいいのですから、スクリプトだって書けちゃうのです。

こうして、XSSを仕掛ける側はパラメタ部に悪意のあるスクリプトを埋め込んだURL(以下ではこれを「悪意のスクリプトURL」と書きます)を作るのですが、次は被害者にそれをアクセスさせ、さらに「情報を盗みたいサイト」を騙す必要があります。


3. スクリプトを実行させる必要がある

ここから話が段々とややこしくなります。

この「悪意のスクリプトURL」ですが、効果を発揮(被害者の情報を盗む)するには被害者のパソコン上でスクリプト実行されなければなりません。そのため、悪者側は何とかして被害者を騙して「悪意のスクリプトURL」をクリックさせようとします。

考えてみればあたりまえの話です。
いくら悪意のあるスクリプトでも、情報がなければ盗めるはずがありません。

数回前のメルマガで書きましたが、JavaScriptはChromeやEdge、Safariといったインターネットブラウザの中で動くプログラムです。
サービス提供側のサーバ上ではなく、利用者が使っているパソコン上で動くのです。

XSSのポイントはここにあります。
どんなサービス事業者であっても、サーバ内にあるお客さんの情報はそう簡単には漏洩しなようにかなり強く守られています。
一方で、パソコン上にある利用者のデータはサービス提供側から見て、手の届かないところにあるデータです。本人が扱う限りは何も問題ないのですが、悪意のあるスクリプトをパソコン上で動かせれば、そこにある情報を悪者側に渡すのはいとも簡単な話です。

この「悪意のスクリプトURL」はtwitterやFacebook、LINEなどの多くの人が使うサイトで「○○をご利用の方にお得な情報をご提供」といった宣伝を付けてクリックさせようとします。
このSNSなどの発信場所が最初に書いた「ワナを仕掛けるサイト」になります。

この発信場所に使われるサービスには何の落ち度もありません。


4. 次は「情報を盗みたいサイト」を騙すこと

「悪意のスクリプトURL」を被害者がクリックすると、パソコンはURLに書かれた通り「情報を盗みたいサイト」にアクセスします。

きちんとXSS対策を施しているサイトでは「悪意のスクリプトURL」に騙されることはありません。仮にパラメタにスクリプトを埋め込んであっても、それは無効化されますから、妙な文字が表示される程度で情報漏洩にはなりません。

ですが、XSS対策が取れていない、洩れているサイトでは「悪意のスクリプトURL」のパラメタのうち、スクリプト部分の無効化が行なわれないため、無効化すべきスクリプトが有効な状態のままでパソコンに返してしまいます。
「悪意のスクリプトURL」に騙されると、悪意のスクリプトが有効になってしまうため、利用者の情報漏洩を許すページを返してしまうのです。


5. 何が洩れるのか? その対抗策は?

XSSの攻撃では、クッキー(cookie)が盗まれることが多いようです。

クッキーは、サービスのログイン後などによく使われるデータで、利用者の一時的な識別用などに使われるごく小さなデータ(セッションIDなどと呼ばれる10〜20ケタ程度の数値)です。
ログインIDのように恒久的に使うものではなく、ログアウトすれば消すような一時的なデータ用に使われるものです。

一見たいしたことではないようにも思えますが、クッキーがあれば、恐いことができるのですよ。例えばこんなことができちゃいます。
 1)犯罪者はセッションIDでログインします。
 2)犯罪者は利用者情報を見て、ログインIDを知ります。
 3)犯罪者はパスワード変更機能でパスワード変更します。
   →被害者はこの時点で再ログインできなくなりますが、気付きません。
 4)犯罪者はこの後アカウント使い放題です。
 5)被害者は後日、再ログインできないことに気付きます。
   →既に後の祭です...。

その利用者のフリをしてサービスを利用できます。オンラインバンキングで勝手に送金ができると考えれば十分に危険なのがわかります。

本来、XSS対策はサービス提供側が責任を持って対応すべき話ですが、対応には時間がかかる場合もあります。

では、利用者としてXSS対策はできるものでしょうか?
残念ながら、利用者側で取れる対策はごく限られています。取り得る対策はありきたりな言い方になりますが、怪し気なリンクはクリックしないことです。
最近はあからさまに「怪し気なサイト」は減っていますが、それでも怪しいリンクのクリックを避けるのは良い習慣です。


6. まとめ

クロスサイトスクリプティング(XSS)という攻撃手法があります。

これはサービス提供サイトのバグ(脆弱性)を悪用して、利用者のパソコン上で情報を盗むというものです。

攻撃方法はややこしいのですが、最終的には被害者のパソコン上でプログラム(スクリプト)を動かそうとします。ここでのプログラムは、通常JavaScriptという言語で書かれています。
前回までに解説したように、JavaScriptのプログラムはChromeやEdge、Safariといったインターネットブラウザの中、つまりパソコン上で動作します。
要は被害者のパソコン上にある個人情報などを盗み取ろうとするわけです。

XSSの原因は、サービス提供側のプログラムのバグ(脆弱性)です。依頼元から来たURLを解析処理に穴があり、その穴を突くことで本来は許されないプログラムが実行できてしまうというものです。
XSSへの対策は明解なのですが、対応洩れがあっても気付きにくく、以前からインターネットサイト(Webサイト)での代表的な脆弱性となっています。

このXSSへの対策は基本的には、サービス提供側で行うこととなり、利用者側で取れる自衛手段はあまりありません。逆にサービスを提供する側は、常にXSSの脆弱性がないかどうかを注意しておく必要があります。

今回はXSSについて解説をしました。
今回は少々複雑な内容でしたので、わかりにくいと思われた方も多いと思いますが、「そんな攻撃方法というのがあるんだ」となんとなくでもご理解いただければよいかと思います。

次回もお楽しみに。

番外. Emotet再び

悲報です。

2021年1月末にユーロポールに摘発されたEmotetというマルウェア(ウイルス)配布する犯罪チーム(摘発されたメンバとは別チームか?)が2021年11月頃から活動を開始しているそうです。

特に2022年に入ってからは活動が活発化しており、今も予断を許さない状況が続いています。筆者が把握している範囲では、大きな機能拡張や悪質化は経ていないようですが、もともと拡張が容易な構造になっているとのことですので、皆さんもご注意ください。

Emotetは、既存のメールを流用したマルウェア(ウイルス)付きの返信メールを送り付けるという特徴的な行動を取ります。

実際にやりとりしているメールの返信に見えると、ついついクリックして開いてしまうことになりやすいので、特にご注意ください。

Emotetについてはこのメルマガでも以前に解説をしています。
併せてご覧ください。

 No195 祝!Emotetサーバ摘発
 https://note.com/egao_it/n/n98a17d62552e


(本稿は 2022年2月に作成しました)

このNoteは私が主宰するメルマガ「がんばりすぎないセキュリティ」からの転載です。
誰もが気になるセキュリティに関連するトピックを毎週月曜日の早朝に配信しています。
無料ですので、是非ご登録ください。
https://www.mag2.com/m/0001678731.htm

この記事が気に入ったらサポートをしてみませんか?