クロスサイトスクリプティングは名前が難しいので馴染みがないかもしれませんが、誰もが被害に遭う可能性のある危険なサイバー攻撃の代表格です。とはいえ、しっかり対応策を講じれば防ぐことが出来ます。今回はクロスサイトスクリプティングについて解説させていただきます。
クロスサイトスクリプティングとは、TwitterのようなSNSや掲示板サイトなど、ユーザーの入力内容がページに表示されるタイプの動的サイトの脆弱性を狙って悪意のあるスクリプト付きのリンクなどを挿入する攻撃手法です。ユーザーが誤ってそのリンクをクリックしてしまうと、不正スクリプトが実行されて、その結果、ウイルスの感染、情報の窃取、フィッシング詐欺、不正サイトへの誘導などの被害につながってしまいます。
クロスサイトスクリプティングは、ユーザーがWEBページに書き込んだ内容がそのままページに反映されてページが作成されるサイトを標的とします。TwitterのようなSNSや、掲示板サイトをイメージするとわかりやすいでしょう。
こうしたサイトが標的とされるものの、それらのサイトに直接的な被害が及ぶわけではありません。被害を受けるのはそのサイトを閲覧するユーザーです。標的のサイトを閲覧しているユーザーが攻撃者によって仕掛けられた罠に引っかかってしまうと、別のサイトに飛ばされて、情報を窃取されるなどしてしまいます。サイトを横断した攻撃手法ということでこのような名前が付きましたが、今では別のタイプの攻撃もこの名前で呼ばれており、必ずしもサイトを横断するようなものばかりではありません。
クロスサイトスクリプティングが仕組まれる方法ですが、まず、脆弱性のあるサイト(A)を攻撃者が発見します。そのサイトAに関心を持つユーザーが集まる掲示板サイトに、Aへの誘い文句とともに不正スクリプト付きのリンクを張り、罠がかかるのを待ちます。すると、掲示板を訪れたユーザーはそれを見て、Aというサイトだと思いこんで、罠とも知らずにそのリンクをクリックするでしょう。すると、不正スクリプトの情報がユーザーのパソコンに保存されたままAに移動します。ところが、そこでスクリプトが実行され、ユーザーは偽サイトに誘導されてしまうのです。さらに、それに気づかないユーザーは自分の意図した通りAにアクセスしたと思い込んで、そこにある指示のままに個人情報などを入力してしまいます。その結果、悪意ある人物に個人情報が盗まれたり、マルウェアを感染させられたりするのです。
上の例では掲示板サイトが攻撃者に利用されましたが、最初のきっかけは脆弱性のあるAというサイトに攻撃者が目を付けたところです。要は、脆弱性のある状態でサイトを放置していたAの作成者にも、何かしらの責任があるとも言えるでしょう。
クロスサイトスクリプティングによる攻撃は世界中で仕掛けられており、無数の人が被害に遭っています。実際、Twitterのタイムラインにも不正スクリプトが埋め込まれたツイートが流れたことがあります。しかも、そのツイートをマウスオーバーするだけでスクリプトが実行されるという手の込んだものでした。スクリプトが実行されると、それを埋め込んでいるツイートが自動的にリツイートされる仕組みで、そのせいでこの悪意のあるツイートが爆発的に拡大してしまったのです。
ほかにも、有名動画共有サイトのコメント欄にクロスサイトスクリプティングの罠が仕掛けられた事件もありました。この事件では、被害者のブラウザ上にショッキングなデマニュースが表示されたり、コメントが表示できなくなったりなどの被害があったと報告されています。
クロスサイトスクリプティングが起こる原因は、最初に攻撃者が見つけたサイトに脆弱性があるからです。掲示板サイトがわかりやすい例でしょう。
たとえば、ユーザーが掲示板に投稿を行うのに、投稿フォームを使うタイプのサイトです。ユーザーが書きたいことをフォームに入力し、確認ボタンを押すと画面が切り替わって、フォームに入力された内容が表示される確認画面になります。そこでユーザーが間違いがないと判断すれば、投稿ボタンを押して実際に登録処理が行われ、その内容が表示されるという仕組みです。
この場合、確認画面といっても、ユーザー自身が誤字脱字などがないかをチェックするだけのもので、アプリケーションが問題ある内容かどうかをチェックするわけではありません。ということは、どんな文字でもユーザーの思うままに入力できることになります。悪意のあるユーザーによって、不正なJavaScriptやhtmlタグのようなスクリプトを埋め込むことも可能だということです。
入力に制限がなく、入力されたスクリプトがそのまま実行されることに問題があることがご理解いただけたかと思います。クロスサイトスクリプティングを防ぐにはいくつか対策方法があります。
投稿フォーム内に入力できる文字種を制限するのが手っ取り早い方法でしょう。たとえば、郵便番号の入力フォームには数字以外受け付けないようにするなどです。IDやパスワードの入力フォームでは、半角英数字、および半角記号しか入力できないようにして、さらに、入力できる文字数に上限を設けるとなおよいでしょう。
また、JavaScriptの構成に使用される特殊文字を入力した時に、それらを別の文字列に変換されるようにしておけば、JavaScriptが実行されるコードを埋め込まれる心配はありません。具体的には、「《」、「》」、「&」、「“」、「‘」の5文字です。これらの文字が入力された際に別の文字に置換されるようにしておけば、スクリプトを無効化できます。
基本的には上記の対策でクロスサイトスクリプティングは防げますが、こうした方法はアプリケーションを作成する段階で行うため、見落としがないとも限りません。さらにセキュリティを強化するのであれば、WAF(Web Application Firewall)の導入を考えましょう。WAFとは、その名の通りファイアーウォールの一種ですが、ネットワークレベルのではなくウェブアプリケーションに特化しているところが大きな特徴です。ユーザーからの通信内容をチェックして、問題のある内容をブロックしてくれます。先に挙げた対策とともに導入することで、サイトの安全性をより高めることができるでしょう。
クロスサイトスクリプティングは、過去の被害を見ても明らかなように、非常に危険度の高いサイバー攻撃の一つです。サイトの脆弱性を放置してしまったがために、ユーザーの個人情報が漏洩して、その責任を問われるということもあり得ます。「攻撃を仕掛けられた側だからこちらも被害者だ」と言っても、ユーザーに被害が出ている以上、責任問題は免れません。場合によっては、加害者のような扱いを受けることにもなるでしょう。そうなっては自社の信用は失墜し、企業の存亡にもかかわる事態に発展することもあります。そういうことのないように、クロスサイトスクリプティングの攻撃を無効にするための基本的な対策は行っておくべきでしょう。
サイバーセキュリティクラウドが提供する「攻撃遮断くん」はWebサイト・Webサーバへのサイバー攻撃を可視化し、遮断するセキュリティサービスです。
ブルートフォースアタック、クロスサイトスクリプティング、Webスキャンと言ったサイバー攻撃をリアルタイムで検知・遮断しています。
ユーザーごとに提供される管理画面で、契約したWebサーバへの攻撃の情報を確認することができます。
この記事と一緒に読まれています
クロスサイトスクリプティング(XSS)のセキュリティ対策とは?
2019.09.08
セキュリティ対策
2019.03.12
用語集
2020.03.13
用語集
CSRF(クロスサイトリクエストフォージェリ)とは?被害と対策も
2022.01.06
セキュリティ対策
WEBページの出力処理に関する攻撃「クロスサイトスクリプティング」の解説と対策方法をまとめてみた
2020.03.16
セキュリティ対策
HTTPヘッダインジェクションとOSコマンドインジェクションの違いと対策方法を徹底解説!
2020.01.06
セキュリティ対策
サイバー攻撃可視化ツールおすすめ6選!ツールを提供しているプロの目線でご紹介
2022.01.21
セキュリティ対策