クロスサイトスクリプティングという言葉になじみのない人は多いかもしれませんが、クロスサイトスクリプティングは一般的なサイバー攻撃のひとつです。その攻撃は、不正なURLをSNSに設置して悪意あるサイトへ誘導する、個人情報を窃取するなど、身近にある脅威なのです。

今回はクロスサイトスクリプティングについて、その攻撃の仕組みや対策を解説します。

クロスサイトスクリプティング(XSS)とは?

クロスサイトスクリプティング(以下、XSS)は、脆弱性のある入力フォームや掲示板などに、攻撃者が不正サイトへのリンクを設置し、ユーザーがアクセスしたときに個人情報を盗む攻撃手法です。

独立行政法人情報処理推進機構(IPA)が公表している「ソフトウェア等の脆弱性関連情報に関する届出状況[2021年第2四半期(4月~6月)]」によると、過去2年間の脆弱性届出のうち58%をXSSが占めています。XSSは、頻発するサイバー攻撃のひとつとして位置づけられているのです。

参考:ソフトウェア等の脆弱性関連情報に関する届出状況[2021年第2四半期(4月~6月)]|独立行政法人情報処理推進機構

クロスサイトスクリプティング(XSS)が攻撃を実施する仕組み

XSSの攻撃では、攻撃者はメールやSNSなどを通じて不正なリンクをクリックするようユーザーを誘導してきます。ユーザーが誤ってリンクをクリックしてしまうと、脆弱性のあるサーバーにアクセスが転送され、不正なWebページがユーザーのパソコンへと返送されます。

この不正なWebページが表示される過程で、悪意あるスクリプトがユーザーのパソコン上で実行され、ユーザーに被害をおよぼすのです。被害内容は、Cookie情報の漏出や個人情報の漏えい、偽のWebページの表示など、さまざまです。

クロスサイトリクエストフォージェリ(CSRF)とはどう違うか

クロスサイトリクエストフォージェリ(以下、CSRF)は、セッション管理の脆弱性を狙う攻撃です。

サーバーやアプリケーションがユーザーを一意的に識別する際には、一般的に「セッションID」と呼ばれる情報を利用します。CSRFは、このセッションID管理に脆弱性があるWebサイトへログインした状態のユーザーを狙い、攻撃用のリクエストURLをクリックさせることでユーザーのセッションIDを窃取して、脆弱性のあるWebサイトに対する改ざんや強制書き込み、不正操作などを実施します。

SQLインジェクションとはどう違うか

SQLインジェクションは、XSSと同様に、Webアプリケーションの脆弱性を狙った攻撃です。SQLに不正なコードを挿入し、直接データベースを不正操作します。

SQLインジェクションの標的になりやすいサイトは、大量のデータを保有していて、かつSQLで制御が必要なショッピングサイト、ポータルサイト、決済サイトなどです。SQLの構文における脆弱性やSQL自体の脆弱性などを悪用し、不正なSQLを実行します。

クロスサイトスクリプティング(XSS)の種類

XSSには複数の種類が存在します。順番にみていきましょう。

反射型XSS

反射型XSSは、スクリプトをユーザーに返す動作をとるため、その名前が付けられています。

攻撃者が準備した不正なWebサイトが表示される過程で、Webブラウザで不正なスクリプトが実行され、情報の窃取やマルウェアへの感染などの被害をもたらします。

格納型/蓄積型/持続型XSS

あらかじめ攻撃者によって、Webアプリケーションに直接スクリプトが格納されているタイプです。不正なWebページが閲覧されるたびに、不正なスクリプトが実行されます。

DOM Based XSS

DOM(Document Object Model)とは、HTMLやXMLを操作するためのAPIやデータ構造を定義した言葉です。DOMベースのXSSは、JavaScriptコードの脆弱性を突いて実施されます。

ユーザーのWebブラウザ上で攻撃用の不正なスクリプトを実行し、HTMLで作成された静的ページの場合でも、JavaScriptが利用されていれば攻撃対象になります。

クロスサイトスクリプティング(XSS)で起こる被害例

ここからは、XSSによる攻撃を受けるとどのような被害が発生するのかを見ていきましょう。

フィッシング

不正なWebページでIDとパスワードなどを入力させ、その情報を窃取することをフィッシングと呼びます。クレジットカードの情報を入力させて、その情報を盗むといった事例もあります。窃取した情報が悪用されてしまうと、さまざまな被害がユーザーにもたらされます。

セッションハイジャック

Cookieと呼ばれる仕組みを利用すると、対象のサイトで一度ID・パスワードを入力すれば、2回目以降は自動的にID・パスワードが入力されるようになります。

不正なスクリプトが埋め込まれたWebページを閲覧すると、cookie情報が盗み取られ、セッションが乗っ取られてしまうのです。

Webサイトの改ざん

XSSの攻撃によって、対象のWebサイトが書き換えられてしまうこともあります。別のWebサイトへ誘導するような改ざんの事例も多くみられます。

個人情報の漏えい

攻撃者はXSSで住所や名前、クレジットカード情報などの個人情報の窃取を狙います。窃取された個人情報をはじめとする各種情報の多くは、ダークウェブという違法な商品を扱う場所で売買されています。

入力フォームの送信先を書き換え

Webブラウザ上で動作するJavaScriptを用いて、ユーザーが入力する問い合わせフォームなどの送信先を別のURLに改ざんします。攻撃者が指定したURLへ各種情報が送信されてしまうと、入力したすべての情報を盗み見られ、悪用されてしまいます。

クロスサイトスクリプティング(XSS)の対策

ここまでXSSの種類や被害例をいくつかみてきました。ここではXSSへの対策についてお伝えしていきます。対策は以下のとおり複数あり、これらを実施することで被害にあう確率を低減できます。

スクリプトの無害化(サニタイジング処理)

XSS攻撃は、Webアプリケーションのフォームに実行可能な文字列を挿入して不正な操作を実行するしくみであるため、これらの文字列を実行させないように、スクリプトの無害化を行います。

無害化にあたってはスクリプトを構成する際に使用される「&」、「<」、「>」、「”」、「’」の5文字に注目して、そのまま画面に文字列が表示されるように置換します。

このように置換しておけば、仮にスクリプトが入力されていたとしても画面にはスクリプトのソースがただ表示されるだけになり、被害を受けずに済みます。

入力値を制限

数字や英字など指定する文字種類以外の入力を拒否することで、悪意あるスクリプトの挿入を不可能にします。また入力値の長さにも制限を設けることで、スクリプトの挿入をある程度抑制できます。

出力時URLの制限

URLは、「http://」や「https://」から始まるものが一般的ですが、「javascript:」の形式で始まるものも存在します。リンク先のURLに「javascript:」から始まる文字列を指定された場合に、スクリプトを埋め込まれてしまう可能性があるため、リンク先のURLには「http://」や「https://」から始まる文字列のみを許可する「ホワイトリスト方式」で実装するとよいでしょう。

WAFの使用

WAFとは、「Web Application Firewall」の略称で、従来のファイアウォールやIDS/IPSでは防ぐことができないWebアプリケーションへの不正な攻撃を検知・防御します。脆弱性の修正もれによるセキュリティリスクを防ぐためにも、WAFの導入は必要です。

WAFはクラウドサービスで準備されているものから、ソフトウェアのもの、WAF機能を実装された機器のものなどがあります。

WAFを導入することは、「サイバーレジリエンス」という考え方にもとづくものでもあります。サイバーレジリエンスについては、「エンドポイントセキュリティでビジネス環境を整える!その重要性や注意点、サービスの選び方について」の記事をご覧ください。

エンドポイントでの対策

クライアント側での対策も必要です。ユーザーが誤って操作をしてもクライアント端末を保護できる可能性が高まります。

エンドポイントでの対策については「Webroot® Business Endpoint Protection」をご覧ください。

クロスサイトスクリプティング(XSS)を知って効果的な対策を

XSSは、Webサイトに不正なURLを設置することによって各種情報を窃取する攻撃手法です。Webアプリケーションに直接スクリプトを格納する、ユーザーのWebブラウザ上で攻撃用の不正なスクリプトを実行するなど多くの手口があり、あらゆるところに攻撃されるリスクが存在します。

XSSの攻撃を受けると、Webサイトの改ざんや個人情報の漏えいなど、さまざまな被害にあう可能性がありますが、スクリプトの無害化や入力値の制限などの対策は複数存在します。

XSSの手口と対策方法を知って、効果的な対策を講じていきましょう。