クロスサイトスクリプティング(XSS)とは?わかりやすく解説

クロスサイトスクリプティング(XSS)とは?わかりやすく解説

クロスサイトスクリプティング(XSS)とはWebアプリケーションへのサイバー攻撃手法で、代表的なサイバー攻撃のひとつです。この攻撃は適切な対策を行うことで回避可能なサイバー攻撃です。

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

クロスサイトスクリプティング(XSS)攻撃とは、ユーザからの入力内容をもとにWebページを生成するサイト(例:アンケートサイト、サイト内検索、ブログ、掲示板など)やTwitterのようなWebアプリケーションで、Webアプリケーションの脆弱性を利用して悪意のあるデータを埋め込み、スクリプトを実行させる攻撃手法です。この脆弱性を「クロスサイトスクリプティング(XSS)の脆弱性」と呼びます。

IPA(情報処理推進機構)への脆弱性に関する届出は、クロスサイトスクリプティングの脆弱性が常に上位に挙げられていて、クロスサイトスクリプティング攻撃への対策が必要なことがわかります。
(参照:https://www.ipa.go.jp/security/vuln/report/vuln2021q2.html

具体的な攻撃の流れを例で解説します。

 

  1. 攻撃者は、入力フォームにスクリプト付のリンクを含む内容を入力してWebアプリケーションに罠を仕掛ける(例:掲示板サイト)
  2. 訪問者が該当のWebアプリケーションを利用
  3. リンクをクリックしてスクリプトが実行されると、別のWebサイトに遷移(クロスする)して悪意のある内容(スクリプト)が実行される

 

その結果、悪意のあるウェブ画面が表示されたり、マルウェア感染などを引き起こします。例えば、心当たりのないポップアップ画面(Web画面)や入力フォームが表示されるような場合には注意が必要です。

これらは、個人情報などの重要な情報の入力を促して、入力した内容を窃取するように作られており、ユーザーは個人情報の流出やマルウェア感染などの被害に遭う恐れがあります。

被害に遭わないためには、いつも利用しているWebアプリケーションであっても表示内容に注意し、安易にクリックや情報入力を行わないことが対策として挙げられますが、攻撃者側は巧みにクリックや、情報の入力に誘導するため、ユーザ側の注意だけで被害を避けることは困難です。

クロスサイトスクリプティング(XSS)が起こる原因

まず初めに、単純な作りの掲示板サイトを例に、基本的なWebアプリケーションの動作を説明します。

例となる掲示板サイトでは、Webアプリケーションの処理が以下のように行われます。

基本的なWebアプリケーションの動作

  1. 投稿画面の入力フォームに投稿内容を入力し、「確認」ボタンをクリックする。
  2. 投稿内容の確認画面が表示され、ユーザは問題ないことを確認して「投稿」ボタンをクリックする。
  3. 投稿内容を登録する処理が実行され、登録が完了すると、投稿完了画面が表示されて投稿内容が反映される。

基本的なWebアプリケーショの動作

次に、攻撃者が悪意ある投稿内容を入力するとどうなるでしょうか?

例として挙げたWebアプリケーションは入力内容をそのまま受け付けており、攻撃者はどのような文字列でも入力することが可能です。

そのため、攻撃者は入力フォームにブラウザ上で実行可能なコマンドを含む文字列を入力して罠となる画面内容を生成することができます。この画面内容はHTMLで構成されるドキュメントと、HTMLに埋め込む形式のスクリプトでJavaScriptが一般的です。

例えば、攻撃者は罠となる内容をHTMLドキュメントとして掲示板サイトに入力して以下のような画面を表示させることが可能です。

攻撃者の悪意ある投稿内容

「はい」「いいえ」ボタンには【スクリプト1】が埋め込まれており、攻撃者によって予め用意された偽のWebアプリケーションへ誘導します。

偽のWebアプリケーションの表示画面では攻撃内容を含む【スクリプト2】が埋め込まれているため、ボタンをクリックすると、ユーザは入力内容を窃取されるなどの被害に遭います。

以上のことから、Webアプリケーションでクロスサイトスクリプティング(XSS)が起きる原因として次の2点が挙げられます。

①入力フォームにhtmlタグやJavaScriptなどのスクリプトが入力された場合、内容をそのまま受け付けてしまう
②Webアプリケーションが入力値を制限していない

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

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

クロスサイトスクリプティング(XSS)攻撃への対策方法の一つ目はサニタイジングです。
クロスサイトスクリプティング(XSS)攻撃は、Webアプリケーションのフォームに実行可能な文字列を挿入し、Webアプリケーションの利用者の環境で悪意のある操作を実行する攻撃です。

これらの文字列を実行させないようにサニタイジング(スクリプトの無害化)対策を行います。

例えば<script>〜</script>という文字列を含む内容がサニタイジングされていないWebアプリケーションに埋め込まれるように投稿された場合、投稿内容として表示されているボタンやリンクなどをクリックするとJavaScriptなどのスクリプトが実行されます。
そこでスクリプトの構成に必要な&,<,>,”,’の5文字の特殊文字に着目し、これらが文字列としてそのまま画面に表示されるように置換(エスケープ)し、スクリプトの無害化(=サニタイジング)を行います。このように置換を行うことで、スクリプトが入力された場合でも、Webアプリケーションの画面にはスクリプトのソースが表示され、攻撃者が意図する内容では表示されません。

サニタイジング(スクリプトの無害化)はクロスサイトスクリプティング(XSS)攻撃への有効な対策であり、また、根本的な解決策でもあります。

入力値を制限する

クロスサイトスクリプティング(XSS)の対策方法の二つ目は入力値の制限です。

例えば郵便番号の入力では、数字以外の入力を許可しないことで、スクリプトの挿入ができなくなります。

また、文字種の制限ができない場合でも、入力値の長さに制限を設けることで、攻撃が可能となるスクリプトの挿入をある程度抑制することが可能です。

クロスサイトスクリプティング(XSS)対策はさらにWAFで防御

これら二つの対策はともにWebアプリケーション作成の段階で行います。

しかし、細心の注意を払って作成されたWebアプリケーションであっても、クロスサイトスクリプティング攻撃への対策に漏れが生じる場合はあります。

WAF(ワフ/ Web Application Firewall)はクロスサイトスクリプティング攻撃の防御に有効なので、万が一の場合に備えて導入すれば、より一層強固な対策となります。

万が一Webアプリケーションの入力内容にチェックの漏れがあり、クロスサイトスクリプティング攻撃が可能となるようなことがあったとしても、WAFを導入していれば攻撃を防御することが可能です。
なぜなら、WAFはユーザが送信するリクエスト内容を監視しているからです。

これらの対策を単独で行ったとしても、クロスサイトスクリプティング攻撃を完全に回避することはできません。単独ではなく全ての対策を導入することで多面的な防御を行い、Webアプリケーションの安全性をより高めることが重要です。

クロスサイトスクリプティング(XSS)対策ならクラウド型WAFがおすすめ

Webアプリケーション層の保護に有効なWAFは、Webサービスには不可欠なセキュリティ対策システムです。クラウド型WAFであれば、導入、運用面でコストや手間を抑えたセキュリティ対策を行うことができます。クラウド型のWAFは導入ハードルが極めて低く、これからWebセキュリティ対策を行う企業様には有力な選択肢となります。WAFを選定する際には、サポート体制を重視して、自社に最適なものを選びましょう。

クラウド型WAF「攻撃遮断くん」は、最新の攻撃パターンにも自動的に対応していくため、セキュリティパッチをすぐに適用できない状況や、定期的に脆弱性診断が出来ない状況でも、セキュアな環境を保てます。ぜひこの機会にWebセキュリティ対策を見直し、WAFの導入を検討してみてください。

「攻撃遮断くん」の詳細資料は、こちらからダウンロード頂けます。

 

「攻撃遮断くん」の
詳しい紹介資料はこちらから