2023.03.23

セキュリティ対策

クロスサイトスクリプティング(XSS)とは?攻撃の仕組みや被害事例、対策方法を解説

「自社のwebサイトが何者かによって書き換えられている」「普段は出てこない警告ダイアログが鳴り止まらない」など、これらはすべて「クロスサイトスクリプティング(XSS)」による攻撃が原因となっている可能性があります。クロスサイトスクリプティング(XSS)とは、webサイトのセキュリティ上の欠陥につけこむサイバー攻撃の一種です。一個人から大手企業まで多くの被害が発生しており、個人情報の流出やwebページの改ざんなど様々なトラブルを巻き起こすため深刻な社会問題となっています。
被害を未然に防ぐためにはクロスサイトスクリプティング(XSS)を正しく理解し、対策を取ることが大切です。ここではクロスサイトスクリプティング(XSS)の攻撃の仕組みや手口を、実際に起こった被害事例と併せてわかりやすく解説していきます。記事の最後には被害を受けないために効果的な5つの対策方法も紹介していますので、ぜひ最後まで読みすすめてください。

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

クロスサイトスクリプティングとは(XSS)、Webサイトにおけるセキュリティ上の欠陥につけこみ罠を仕掛け、サイト閲覧者の個人情報を盗むなどの被害をもたらすサイバー攻撃の一つです。主に脆弱性のある掲示板や個人情報の入力画面、アンケートサイトやサイト内検索、またFacebookやTwitterなどのwebアプリケーションに仕掛けられることが多いです。クロスサイトスクリプティングの英語表記「Cross Site Scripting」の略称として「XSS」と表記される場合もあります。

クロスサイトスクリプティング(XSS)は、比較的古くから使用されている攻撃方法です。そのため、「そんな古典的な方法に引っかかることはもうないだろう」と軽く考えているセキュリティ担当者もいるかもしれません。

ところが、IPA(独立行政法人 情報処理推進機構)が発表している「ソフトウェア等の脆弱性関連情報に関する届出状況[2022年第4四半期(10月~12月)]」の詳しい内訳によると、クロスサイトスクリプティング(XSS)によるものが59件ともっとも多く、全体の59%を占める結果となりました。すなわち、クロスサイトスクリプティング(XSS)は古くからある手法にもかかわらず、今現在も現役の攻撃方法として使用されているのです。

参考:情報処理推進機構「安全なウェブサイトの作り方 - 1.5 クロスサイト・スクリプティング

クロスサイトスクリプティング(XSS)の攻撃の仕組み

クロスサイトスクリプティング(XSS)の攻撃では、攻撃者がwebサイトに悪意のあるスクリプトを埋め込むことで個人情報を盗み取ったり、マルウェア感染をさせる仕組みとなっています。

仕組みは以下の通りです。下の図と併せてご覧ください。

  1. 悪意のある攻撃者が掲示板のような脆弱性のあるwebサイト内にスクリプトが埋め込まれた罠リンクのURLを投稿します
  2. サイト閲覧者が罠とは気付かずに仕掛けられたリンクをクリックし、悪意のあるサイトのページを閲覧します(図1-a)
    もしくは、罠リンクを含むメールを利用者に送信します(図1-b)
  3. 罠が仕掛けられたリンクを誤ってクリックすると、スクリプトを含む文字列を送信してしまいます(図2)
  4. その結果、悪意のあるスクリプトを含んだwebページが出力されて、偽のWebサイトに切り替わります
  5. 偽のwebサイトが表示される際に利用者のブラウザ上でスクリプトが実行されます(図4)
  6. その結果パソコンに保存されていたクッキー情報や個人情報の漏洩、マルウェア感染などを引き起こします(図5)

このような仕組みを経て、企業の機密情報や顧客の個人情報が漏洩し、取り返しのつかないトラブルに発展していくのです。


画像引用元:情報処理推進機構「安全なウェブサイトの作り方 - 1.5 クロスサイト・スクリプティング

クロスサイトスクリプティング(XSS)と他の攻撃の違い

クロスサイトスクリプティング(XSS)に類似した攻撃に「クロスサイトリクエストフォージェリ(CSRF)」と「SQLインジェクション」があります。どちらもサイバー攻撃の手法ですが、その方法はクロスサイトスクリプティング(XSS)とは異なるものです。

クロスサイトリクエストフォージェリ(CSRF)との違い

クロスサイトリクエストフォージェリ(CSRF)とは、「Cross Site Request Forgeries」という名前の通り「Cross Site (サイト間の)」「Request Forgeries(リクエストを偽装する)」攻撃で、CSRF(シーサーフ)呼ばれることもあります。

クロスサイトスクリプティングと同じく、webサイト上に存在する脆弱性を利用したサイバー攻撃です。ただし、こちらはログイン機能を設けているwebサイト上などで正規ユーザーを装い、悪意のある偽のリクエストを送信して利用者が予期しない処理を実行させられます。

クロスサイトリクエストフォージェリ(CSRF)は、利用者がログイン状態であることを狙って攻撃をするのが特徴です。そのため、ログイン状態を維持したままにしておくことが多いネットショッピングサイトでは、勝手に高額商品を購入されるなどの被害が発生しています。

また、同じくログイン状態を維持していることの多いTwitterやInstagramなどのSNSでは、なりすまし投稿などの被害が起きているケースもあります。その内容は、いたずら程度のものから犯罪予告まで多岐にわたり、2012年にはなりすまし投稿による誤認逮捕まで出てしまいました。

参考:情報処理推進機構「安全なウェブサイトの作り方 - 1.6 CSRF(クロスサイト・リクエスト・フォージェリ)

SQLインジェクションとの違い

SQLインジェクションとは、クロスサイトスクリプティングと同じくwebサイト上に存在する脆弱性を利用したサイバー攻撃です。

そもそもSQLというのは、webサイトのデータベース上に保存されたデータの取り出しや編集をするために必要な言語のことをいいます。そのSQL文(データベースへの命令文)に不正なプログラムを注入して、データベースの不正利用をまねくのがSQLインジェクションです。攻撃を受けたデータベースはしまわれている全顧客の情報を漏出させてしまったり、データの改ざんや消去などの被害を受ける可能性があります。

IPA(独立行政法人 情報処理推進機構)が発表している「ソフトウェア等の脆弱性関連情報に関する届出状況[2022年第4四半期(10月~12月)]」の詳しい内訳によると、クロスサイトスクリプティングの59件に対してSQLインジェクションは7件と少ないもののクロスサイトスクリプティングの次に多い事案となっており、決して軽視できる問題ではありません。

参考:情報処理推進機構「安全なウェブサイトの作り方 - 1.1 SQLインジェクション

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

クロスサイトスクリプティングによる攻撃は主に以下の3種類に分類することができます。
ここでは、それぞれの特徴について解説していきます。

参考:情報処理推進機構「「クロスサイト・スクリプティング(XSS)」の脆弱性の種類

Reflected XSS(反射型XSS)/Non-persistent XSS

webサイト利用者のリクエストに含まれるスクリプトを、そのまま利用者に返送するタイプのクロスサイトスクリプティング(XSS)です。攻撃者は偽装したメールやサイトに不正なスクリプトが含まれたリンクを準備しておき、脆弱性のあるwebサイトにリクエストさせます。それにより利用者のブラウザで不正なスクリプトが実行され個人情報の抜き取りなどを行う仕組みです。

スクリプトが利用者にそのまま返ってくることから、「Reflected XSS(反射型XSS)」と呼ばれています。また、「Persistent XSS(持続型XSS)」と対照的なタイプであることから「Non-persistent XSS」と呼ばれることもあります。

Stored XSS(格納型/蓄積型XSS)/Persistent XSS(持続型XSS)

攻撃者が、前もってwebサイト上に罠となるスクリプトを納めておくタイプのクロスサイトスクリプティング(XSS)です。例えばwebサイトの掲示板に脆弱性がある場合、不正なスクリプトを含んだ書き込みを掲示板に残すと正規の利用者が掲示板にアクセスするたびに不正なスクリプトが実行されます。そのため不正な書き込みを表示した利用者全員が被害を受ける可能性が起こりうるのです。

該当ページにアクセスするたびに不正なスクリプトが実行されてしまうことから、「Stored XSS(格納型/蓄積型XSS)」、または「Persistent XSS(持続型XSS)」と呼ばれています。「Reflected XSS(反射型XSS)」のようにメールやサイトを準備する必要がないのも特徴の一つです。

DOM Based XSS

上述した2種類は、webサイト上の脆弱性を利用したものでした。対して「DOM Based XSS」は、javaScriptなどのwebブラウザに存在する脆弱性を利用したもので、サーバー側ではなくクライアント側のブラウザ上で攻撃の処理が完了するタイプのクロスサイトスクリプティング(XSS)です。

webページを操作する際の取り決めが「DOM」と呼ばれることから、この名前が付きました。また静的なHTMLにおいても、javaScriptが利用されていなければ攻撃対象となるので注意が必要です。

クロスサイトスクリプティング(XSS)の被害内容

クロスサイトスクリプティング(XSS)攻撃を受ける企業は年々、後を絶ちません。では、実際に攻撃を受けるとどのような被害が発生するのでしょうか。詳しい被害内容について解説していきます。

サイト上に偽の情報が表示されてしまう

クロスサイトスクリプティング(XSS)によるWebページの改ざんにより、サイト上に偽の情報が表示されてしまう場合があります。webサイトそのものは正規のものなので、利用者もサイト管理者も気付かない間に攻撃を受けてしまう可能性も考えられるでしょう。その結果、偽のサイトにアクセスさせられて個人情報を盗まれる、フィッシング詐欺の発端となってしまうといった可能性があるのです。

クッキー情報の漏出

ブラウザが保存しているクッキー情報には、利用者が閲覧したサイト履歴やログインID、パスワードなどの入力データをはじめ、利用者ごとの機能を提供するための「セッションID」というものも含まれます。クッキー情報が漏出すれば不正ログインや、クレジットカード番号が漏出し、不正利用に繋がる可能性があります。また、セッションを乗っ取るサイバー攻撃に繋がってしまう場合もあり、企業の機密情報の漏洩や企業サーバーへの不正侵入が行われる場合もあるでしょう。その結果、ネットバンキングからの不正出金が行われる恐れがあるのです。

任意のクッキー保存

攻撃者が事前に準備した任意のクッキーを利用者のブラウザに保存させられることで、セッションIDが利用者に送り込まれ、正規の利用者になりすます事案が発生しています。これによりクレジットカード番号が盗まれる、無断でネットショッピングを利用される、といった被害を受ける可能性があります。

クロスサイトスクリプティング(XSS)の被害事例

クロスサイトスクリプティング(XSS)によって実際に被害を受けた企業は多く存在しますが、大手企業や有名サイトも例外ではありません。ここでは、特に有名な被害事例を紹介していきます。

2020年9月 ユニクロアプリへの被害

全世界で2,000を超える店舗数の製造小売業大手のユニクロでは、Androidアプリ「ユニクロアプリ」に複数のアクセス制限不備の脆弱性が認められると脆弱性情報対策データベース(JVN)が発表し注意喚起が行われました。脆弱性を悪用されると利用者が指定された任意のwebサイトにアクセスさせられ、フィッシング詐欺などの被害にあう危険性も否定できません。

幸い迅速な対応がとられ、脆弱性の修正がすぐに行われたため被害は確認されませんでした。影響を受けるアプリのバージョンは「7.3.3」以前で「7.3.4」以降のバージョンでは脆弱性の修正対応がなされています。

2010年9月 Twitterでのワーム拡散

日本でも人気のSNS「Twitter」では、公式サイトの脆弱性に付けこんだクロスサイトスクリプティング(XSS)攻撃が発生。仕掛けられたリンクにマウスのカーソルを載せただけで、その内容がリツイートされてしまうというワームが大量に拡散されました。悪意のあるメッセージを被害者のフォロワーに送信してしまったり、大量のスパムが投稿されるなどの大騒ぎとなる事態に発展したのです。拡散されたワームの多くは、混乱を引き起こすためのいたずら目的だったと後にわかりましたが、最大で50万人が影響を受けた可能性があります。

2010年7月 YouTubeでの被害

大手動画共有サイトのアメリカ版YouTubeでは、コメント投稿に関する脆弱性を利用したクロスサイトスクリプティング(XSS)攻撃が行われました。コメント欄に悪意のあるスクリプトを埋め込み、アクセスした利用者がクリックすることで不正なスクリプトが実行させられるというものです。これにより、偽のニュースやエラーメッセージがポップアップ表示される、悪質なwebサイトへリダイレクトされてしまうなどといった事態が招かれました。セキュリティ組織のアメリカSANS Instituteによって、このような脆弱性を悪用すればクッキーの情報を盗んだり、偽のログインページを表示したりすることも可能なため、深刻な被害をもたらす危険性があると警告されています。

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

甚大な被害を及ぼしかねないクロスサイトスクリプティング(XSS)は、メールやwebサイト上の不審なURLは安易にクリックしないなど簡単な方法で脅威を遠ざけることはできますが、それだけでは充分ではありません。

以下で紹介するような対策を行うことで、被害を受ける確率をぐんと減らすことができます。どのような対策法があるのか詳しく見ていきましょう。

サニタイジング(スクリプトの無害化)やエスケープ処理の実行

サニタイジング(スクリプトの無害化)とは、webページの表示に影響する特別な記号文字の「<」、「>」、「&」などを、HTMLエンティティ「&lt;」、「&gt;」、「&amp;」などに置き換えて無害化する行為です。 サニタイジング(スクリプトの無害化)処理を実行することで、スクリプトが意図していない動きをしてしまうことを防ぐことが可能です。またの名をエスケープ処理と言われることもあります。

WAF(Web Application Firewall)の導入

WAF(Web Application Firewall)とは、webアプリケーション専用の、外部からの不正な侵入や攻撃を防ぐセキュリティ装置です。ネットワークレベルのファイアウォールでは掲示板などに入力された内容まではチェックしきれませんでしたが、WAFは違います。WAFは利用者の通信内容を監視して、悪意ある攻撃者からの不正な通信だと判断した場合にはその通信をブロックすることが可能です。

WAFはネットワーク機器として設置するタイプや、クラウド型のサービスなどがあり、常に最新のセキュリティを維持できるのも魅力といえます。自社ですべての脆弱性の修正対応をするには限界があります。修正漏れによるサイバー攻撃を防ぐためにも、WAFは必ず導入してください。

入力値の制限

クロスサイトスクリプティング(XSS)では、webサイトへ不正なスクリプトを埋め込もうとするのが基本の方法ですが、これを防ぐのが入力値制限です。例えばパスワードの入力欄に「半角英数字8文字まで」と入力制限をかけたり、郵便番号の入力欄では数字以外は入力できないようにしたりして、不正なスクリプトが埋め込まれないようにします。

ここで大切なのは、サーバー側で入力制限をする必要があるということです。JavaScript を使用しユーザー側で入力値の制限を行ってしまうと、ユーザー側がJavaScript をオフにした場合には不正スクリプトの入力が可能になってしまいます。

httpやhttpsで始まるURLのみの許可

webサイト上でwebページやファイルの場所を示すURLには、「http://」や「https://」から始まるものが多いです。しかし、中には「javascriptスキーム」などから始まる場合があります 。「javascriptスキーム」や「dataスキーム」が含まれるURLの場合は、悪意のあるスクリプトが実行されてしまう危険性があるため、「http」や「https」から始まるURLのみを許可する設定にしておきましょう。危険なスクリプトであることを個人で判断するのは大変難しいです。予期しないサイバー攻撃を防ぐためにも、必ず設定しておきましょう。

動作環境を常に最新の状態に保つ

ブラウザのアップデートを定期的にするなど、動作環境を常に最新の状態にしておくことはインターネットセキュリティの基本です。ブラウザ自体が持つセキュリティ機能により、サイバー攻撃の被害を食い止めることができます。ブラウザのアップデートは難しいものではありませんので、日々進化する多様な攻撃から自分や会社を守るためにも常に最新の状態に保つよう心がけましょう。

まとめ

今回の記事では、クロスサイトスクリプティング(XSS)について解説していきました。自社サイトの脆弱性が発端となってアカウントの乗っ取りや機密情報の漏洩などの意図しないサイバー攻撃が発生してしまえば、その被害は企業だけでなくサイトの利用者にも及びます。損害賠償などの金銭的被害はもちろん、企業の信用を失墜させる事態になれば取り返しがつきません。

このような事態を未然に防ぐためにも、社内での情報セキュリティ教育の徹底やシステム上のセキュリティ強化を定期的に行い、起こりうる脅威に立ち向かう準備をしておくことが大切です。

セキュリティ対策についての情報はIPA(情報処理推進機構)をはじめ、さまざまな行政機関から公開されています。常に新しい情報にアップデートをして積極的に活用していきましょう。

Facebook