クロスサイトスクリプティングは、WebサイトやWebアプリケーションへ行われるサイバー攻撃手法の一つです。専門的な知識があれば比較的簡単に実行でき、脆弱性の対策が求められます。
この記事ではクロスサイトスクリプティングについて、また被害の実例や対策法などをわかりやすく解説します。
クロスサイトスクリプティング(XSS)とは
クロスサイトスクリプティング(XSS)とは、WebサイトやWebアプリケーションに悪意のあるスクリプトを埋め込み実行することで、情報を抜き取られるなどの被害をもたらす攻撃です。
攻撃手法には主に、反射型XSS・格納型XSS・DOMベースXSSの3つがあります。
反射型XSS
反射型XSSは、悪意のあるWebサイトやメールに記載されたURLにスクリプトが埋め込まれ、ユーザーがクリックすることで脆弱性のあるサイトで実行されるものです。
格納型XSS
格納型XSSは、脆弱性のある掲示板などに悪意のあるデータを格納し、ユーザーが表示することでスクリプトが実行されるものです。反射型XSSも格納型XSSも、必ずWebサイトを経由します。
DOMベースXSS
DOMベースXSSは、動的にJavaScriptでHTML生成をする際、悪意のあるスクリプトが埋め込まれるものです。サーバー側ではなくクライアント側で、スクリプトが実行されます。また静的なHTMLであっても、JavaScriptを利用していれば攻撃の対象です。
クロスサイトスクリプティングが起こる原因
クロスサイトスクリプティングが起こる原因として、脆弱性がある・プログラムの不具合や設計ミスが挙げられます。
脆弱性がある
大元の原因は、不正なスクリプトを挿入できる余地を与えてしまうことです。クロスサイトスクリプティングに対し脆弱性のあるWebサイトを放置することで、被害が発生・拡大します。スクリプトにはエンドユーザーが持つ個人情報などを、別のサイトに送信するよう設定されています。
IPA(情報処理推進機構)が四半期ごとに行う調査の、2021年第1四半期(1月~3月)の「ソフトウェア等の脆弱性関連情報に関する届出状況」を見ていきましょう。
脆弱性の種類別に内訳が出されており、「ウェブサイトの脆弱性の種類別の届出状況(11,429件)」では、クロスサイトスクリプティングが59%と最も発生している脆弱性となっています。そのため、多くのWebサイトやWebアプリケーションで起こる可能性が高いといえるでしょう。
また「ウェブサイトの脆弱性がもたらす影響別の届出状況」でも本物サイト上への偽情報の表示が57%と郡を抜いています。
参考:https://www.ipa.go.jp/security/vuln/report/vuln2021q1.html
セキュリティ対策がしっかりされたツールを導入しても、実は使い手・導入方法はしっかり確認しなくてはなりません。ツールでは検知できないWebシステムに潜む脆弱性を発見するには、セキュリティ診断サービスの利用が有効です。
プログラムの不具合や設計ミス
脆弱性がある原因は、プログラムの不具合や設計ミスによるものです。WebサイトやWebアプリケーションが入力の制限をかけていない、HTMLやJavaScriptのスクリプトが入力された際にエスケープ処理されておらず、そのまま実行してしまうなどが考えられます。
クロスサイトスクリプティングの事件が起こった例と脅威性
クロスサイトスクリプティングによる被害は数え切れず、中小企業サイトだけでなく世界的に大ニュースになったものまであります。ここではクロスサイトスクリプティングによる被害の例と、脅威性についてご紹介します。
フィッシング詐欺
フィッシング詐欺は不正なページを閲覧すると悪意のある偽のページに遷移してしまい、入力したIDやパスワードなどの個人情報が盗まれてしまうものです。ユーザーがどんなデバイスを使っているかは関係なく、インターネット接続ができフィッシングサイトを表示させられれば、すべてのユーザーがターゲットになります。攻撃者はIDとパスワードを使いWebサイトを利用でき、ECサイトであれば商品の購入ができてしまいます。
ECサイトに偽装した不正なECサイトを誘導し、クレジットカード情報を抜き取る例も考えられるでしょう。
秘密情報の漏洩
秘密情報の漏洩につながるケースもあります。名前・住所・生年月日など重要な情報が抜き取られ、ダークウェブサイトなどで売却されてしまうなどです。パスワードリスト攻撃の対象になることもあります。情報漏洩をほのめかし、金銭要求の脅迫をされることも考えられます。
2009年5月には大規模な情報漏洩こそありませんでしたが、オンラインゲームを提供する企業のWebサイトにて、不正ログインができる状況になりました。
サイトの改ざん
クロスサイトスクリプティングでは、脆弱性のあるWebサイトを書き換えることも可能です。攻撃者の思想を掲載したり、サイトの見た目を変えたりなど改ざんの内容は多岐にわたります。Webサイトを閲覧するユーザーにウイルスを感染・拡大を目的とするものもあります。
Webサイトのアクセス権限が利用され、直接内容を書き換えられることから、サイトの管理者が違いに気づきにくく放置されてしまいがちです。2014年1月には出版社の公式サイトが改ざんされトロイの木馬(悪意あるソフトウェアであるマルウェアの一種)が仕込まれていたことがありました。
そこで、ユーザーの個人情報を抜き取られる危険性がありました。
Cookieの流出
Cookieの流出はセッションハイジャックとも呼ばれ、セッションを乗っ取る攻撃手法です。Webサイトの閲覧時に、Cookieという個人情報が利用されることがあります。
CookieにはIDやパスワードなど重要な情報が含まれ、多くの個人情報を保存しています。本来は2回目以降の入力を自動的に行うことにより、ユーザーの利便性を上げるためのものです。Cookieが盗まれると、サーバーに侵入されたり不正出金が行われたりするなどの被害が起こる可能性があります。
クロスサイトスクリプティングのテストの方法例
クロスサイトスクリプティングでは、入力フォームなどからスクリプトが埋め込まれます。埋め込みの必要性がない箇所はスクリプトの登録や受け渡しを禁止、タグを無効化して表示するなどの対策が必要です。
ここではクロスサイトスクリプティングのテストの方法例についてご説明します。
不具合の原因調査
まずはテストの前段階として、何が不具合の原因となるかを調査します。例えば、スクリプトの入力はできるが表示は無効、スクリプトの入力自体禁止、HTMLの入力は問題ないなどです。何が不具合の原因となるかはサイトにより異なるため、サイトのポリシーを確認する必要があります。
テストのやり方
クロスサイトスクリプティングは比較的発見しやすい脆弱性といえます。HTTPレスポンスに埋め込まれたタグやJavaScriptなどにより、ユーザー側に攻撃する脆弱性のため、HTTPレスポンスを分析することで脆弱性の有無を判断できるからです。テストの方法は例であるため、機能にあったテストの実施する必要があります。
ケース1
- 手順1:URLパラメータにスクリプトを指定し、アクセスする(HTTPリクエストの送信)。
- 手順2:スクリプトが無効化されているか確認する 入力したタグやJavaScriptなどが有効な形で存在する場合は、クロスサイトスクリプティングの脆弱性があると判断できます。
ケース2
- 手順1:フォームの入力欄にスクリプトを指定し、登録などの処理を行う。
- 手順2:入力内容の表示ページに遷移し、スクリプトが無効化されているか確認する。例えば<a href="http://attack">attack</a>と登録し、表示ページで「attack」とリンクが表示される場合はNGです。
続いては、これらの脆弱性をチェックするテスト方法です。HTTPリクエストを送信できるプロキシを利用します。
脆弱性チェック
- 手順1:ブラウザのプロキシ設定で「プロキシサーバ:localhost、ポート番号:8080(デフォルト値)」を指定する。ポート番号は、HTTP Proxyのメニューから「Edit→Preferences」を選択すると変更できます。
- 手順2:HTTP Proxyが転送するHTTPリクエスト・レスポンスの処理方法を「Manual」に指定する。受け取ったHTTPリクエストの内容を変更してサーバーに送信できる状態です。
- 手順3:受け取ったHTTPリクエスト・レスポンスを変更し送信する。
テストの仕組み
クロスサイトスクリプティングのテストの仕組みは以下の通りです。
通常は画面を表示しHTML生成が行われると、
<input type="text" value="○○">
というテキストボックスの形式となりますが、
"></script><script>arart</script>
と入力すると、inputタグが
<input type="text" value=""></script><script>arart</script>">
となり、scriptタグが有効化しアラートのダイアログが表示されます。
まとめ
本稿では、クロスサイトスクリプティングについての解説と具体的な事例、テスト方法についてご紹介しました。クロスサイトスクリプティングはWebサイトなどの脆弱性が原因で起こり、放置すると閲覧したユーザーの感染・拡大を招きます。Webサイトの改ざんだけでなく、ユーザーの個人情報漏洩・Cookie流出など大きな問題へと発展する可能性があり注意が必要です。
プログラムの不具合や設計ミスなども含め脆弱性がないか、対策がされているかテストを通してしっかりとチェックを行いましょう。