XSSとは
クロスサイトスクリプティング(XSS)とは、ターゲットとしたWebサイトの脆弱性を悪用して罠を仕掛け、攻撃者が悪質なサイトへ誘導(サイトをクロス)するスクリプトを実行し、サイトに訪れるユーザーの個人情報などを詐取したり、マルウェア感染させたりするサイバー攻撃のこと。
標的サイトから別サイトへ誘導することから、この名称が付けられている。
XSSの攻撃の流れ
XSSの攻撃の流れをお借りしたイメージ画像より説明。
- 攻撃者CがXSSに対して脆弱性のあるA社を発見し、A社に興味を持ちそうなユーザーのいる掲示板サイトBに罠を仕掛ける(例:スクリプト付リンクを貼る)。
- ユーザーが掲示板サイトBを閲覧する。
- 掲示板サイトB内でスクリプト実行
- ユーザーはスクリプト情報を持ったままA社のページに移動(クロスサイト)する。
- スクリプトの効果により「A社のサイトとして」表示された偽サイトにジャンプする。
- 騙されたユーザーが情報を入力した結果、スクリプトが悪さをする
- 攻撃者Cの手により、ユーザーに対して様々な被害が発生(マルウェア感染・攻撃者Cへの情報漏洩など)。
XSS攻撃の主な原因
クロスサイトスクリプティングの根本的な原因は、文字通り攻撃者が不正なスクリプトを挿入することができる環境を与えてしまうことにある。つまり、クロスサイトスクリプティングに対して脆弱性を持つ動的サイトの放置である。
スクリプト文章にはエンドユーザー側が保有する個人情報を、標的サイトとは別のサイトに送信するように設定されており、これが直接的な被害を生み出してしまう。
「JavaScript」や「HTMLタグ」が使われることがある
クロスサイトスクリプティングは、スクリプトを利用したサイバー攻撃。
使用されるスクリプトには様々なものがあるが、なかでも「JavaScript」及び「HTMLタグ」は頻出と言える言語。とくに汎用性の高いJavaScriptを用いた攻撃は、著しい被害を及ぼす傾向にあるため、警戒が必要だと言われている。
XSSの種類
反射型XSS(non-persistent/Reflected XSS)
リクエストした者(被害者)にスクリプトが返ってくるため、「反射型XSS」と呼ばれている。攻撃者は偽メールや偽サイトに不正なスクリプトを含んだリンクを用意し、ユーザーを脆弱性のあるWebサイトに誘導(リクエストさせる)する。このときに、ユーザーのブラウザで不正なスクリプトを実行させることで、情報の詐取やマルウェア感染などを行っている。
格納型/蓄積型/持続型XSS(Stored/Persistent XSS)
格納型XSSでは、攻撃者はあらかじめWebアプリケーションに直接スクリプトを格納しておく。こうしておくことで、該当のページをユーザーが閲覧するたびに、不正なスクリプトが実行される。該当のページにアクセスするだけで攻撃可能なため、反射型XSSとは異なり罠を仕掛けたWebサイトの用意や、スクリプトを含む不正リンクをメール送信したりする必要はない。
DOM Based XSS
DOM(Document Object Model)は、HTMLやXMLを取り扱うためのAPIやデータ構造を定義したものを指す。JavaScriptのコードの脆弱性を悪用した攻撃で、サーバー側ではなく、クライアントのWebブラウザ上で攻撃用の不正なスクリプトが実行される。また、DOM Based XSSの場合では、静的なHTMLの場合でもJavaScriptが利用されていれば攻撃対象となりえる。
XSS攻撃の対策
ユーザー側に求められる対策
最新のブラウザにアップデートする
クロスサイトスクリプティングを防ぐには、使用しているWebブラウザやアプリを最新バージョンにしておくことが重要。バージョンが古いとクロスサイトスクリプティングに限らず、何らかの脆弱性を抱えていることがあるため、更新があった場合は都度アップデートをしておくこと。
スクリプトの実行設定を無効化する
ユーザーの大半は、Webサイトをブラウザで閲覧・利用している。つまり、Webブラウザのセキュリティ設定を見直してスクリプトの実行を無効化すれば、ブラウザ経由による攻撃を防ぐことが可能である。
社内でWebブラウザの設定を変更する場合は、システムの使用に問題がないかどうか確認をしてから行うこと。
セキュリティソフトを導入し、不正なスクリプトをブロックする
個人ユーザー向けのウィルス対策ソフトにもクロスサイトスクリプティング対策ができる機能が搭載されているので、なるべく利用するようにする。ウィルス対策ソフトには、不正なスクリプトを検出してくれる機能や、正規のサイトを装った不正サイトへのアクセスをブロックする機能などがある。
企業のIT管理者に求められる対策
- WAFを導入する
- 不正なサイトへの誘導と思われるメールをブロックする
- ネットワーク内部から不正サイトへのアクセスをブロックする
WEB制作者・管理者側に求められる対策
サニタイジング(エスケープ)処理をする
サニタイジング(エスケープ)処理とは、「<」や「“」といった区切りやタグなどの意味を持つ文字を、意味を持たない文字列に置き換え無害化する(サニタイジング)ことを指す。サニタイジング(エスケープ)処理をすることで、スクリプトが制作側の意図に反した挙動をしてしまうことを防ぐことができる。
ただし、サニタイジング(エスケープ)処理は悪意のあるスクリプトを無害化しているだけであり、スクリプトの流入自体は防ぐことができない。有害なスクリプトの流入を阻止するには、WAFの導入が必要となる。
バリデーション処理(入力値の制限)
バリデーション処理(入力値の制限)とは、特定の文字以外の入力を受け付けない設定のこと。たとえば、生年月日の入力フォームでは特定の範囲の数値しか受け付けないようにすることで、スクリプトが入り込むことはできなくなる。
また、任意の文字入力が必要な場合は、入力文字数に制限を設けることで長いコードの入力が困難になり、攻撃実行の危険性をある程度は抑えることができる。バリデーション処理を行う場合は、JavaScriptを使ってブラウザ側で入力値の制限を行うと、ユーザー側がJavaScriptをオフにして不正スクリプトの入力ができてしまう。必ずサーバ側でバリデーション処理を実施すること。
出力時はhttp・httpsから始まるURLのみ許可する
URLに「JavaScriptスキーム」や「dataスキーム」などが含まれている場合でも、クロスサイトスクリプティング(XSS)のリスクは生じてしまいまう。入力するリンク先のURLは「http」または「https」から始まるもののみを許可することで、想定外の処理が実行されるリスクを防止できる。
今回得られたこと
XSSの理解は難しかったが、重要なのはXSSのような攻撃があるという認識と、サイトやサービスを作成する上でこの攻撃の可能性があることも踏まえてしっかりと対策をしておくことだと思った。
やはり一番はWAFの導入。またhttpsの保護されたリンクの使用などを徹底して行っていく。
この記事へのコメントはありません。