クロスサイトスクリプティング

Pathnav情報セキュリティ脆弱性攻撃手法仮リンクインジェクション攻撃enCode injectionframe1

クロスサイトスクリプティング(lang-en-shortcross site scripting)とは、Webアプリケーションの脆弱性SfnCWE-792011もしくはそれを利用した攻撃。脆弱性をツリー型に分類するSecurity Content Automation ProtocolCWEではXSSを不適切入力確認CWE-20によるインジェクションCWE-74のひとつとして分類しているCWE-79refhttpswwwipagojpsecurityvulnCWEhtml 共通脆弱性タイプ一覧CWE概説。IPAref。略称はXSS。かつてはCSSという略称も使われていたが、Cascading Style Sheetsと紛らわしいのでこの略称はあまり使われなくなったSfnCWE-792011。

XSS脆弱性は、以下の様な攻撃XSS攻撃)を可能にする脆弱性である。攻撃者は標的サイトのWebアプリケーションに不正データDを注入(インジェクション)し、その結果WebアプリケーションがDを含むWebページPを動的生成させる。被害者がブラウザなどでPを開くと不正なデータDが原因悪意のあるスクリプト実行され、被害者は何らかの被害を受けるSfnCWE-792011。

攻撃者はXSSを用いることで、例えば以下の様な被害を発生させられる

標的サイトのHTTP cookiecookieを盗むSfnCWE-792011

悪意のあるスクリプトによりWebページを改ざんする事でパスワードやクレジットカード番号を入力するフォームをWebページに追加し、ユーザからこれらの情報を盗む(フィッシング 詐欺フィッシング 詐欺)SfnCWE-792011

悪意のあるスクリプトを使ってブラウザの脆弱性を突き、ユーザ端末を乗っ取るSfnCWE-792011

WebページPは(攻撃者が作った専用Webサイトではなく)標的となる正規のWebサイトにあるWebアプリケーションが作り出すので、PのUniform Resource LocatorURLは正規のWebサイトのドメイン名ドメインに属する事となる(たとえば日本語版wikipediaにXSS脆弱性があればPのURLはnowikihttpsjawikipediaorgnowikiで始まる)。したがってXSSの被害者はドメイン名から不正なサイトかどうかを見抜くという自衛手段をとる事ができない。

またXSSはWebサイトの側の脆弱性を利用してサイト閲覧者を被害者にするので、被害者の側で対策するのは容易ではない。

詳細

XSS攻撃の詳細を簡単な具体例を元に説明する。なおここで説明する例は、後述するXSSの分類では反射型に属する。

今あるWebサイト(標的サイト)のユーザ登録で、名前を入力するフォームがあり、ユーザが名前を入力すると、以下の様な確認用ウェブページを動的に生成するとする。

source langhtml4strict
お名前は以下のもので正しいでしょうか
p(フォームで入力した値)p
source
そしてこの確認用ウェブページのURLは

nowikihttpexamplecomnamenowiki(フォームで入力した値)

となっていたとする。

攻撃者は何らかの方法でユーザに以下のURLにアクセスするよう促す

nowikihttpexamplecomnamenowikispan stylecolorredltscript(悪意のあるスクリプト)ltscriptspan

ユーザがこのURLをクリックしてしまうと、Webサイトからユーザのブラウザに送られてくるhtmlは

お名前は以下のもので正しいでしょうか

ltspan stylecolorgreenpspan span stylecolorredltscript(悪意のあるスクリプト)ltscriptspanltspan stylecolorgreenpspan

となってしまうため、悪意のあるスクリプトが実行され、ユーザが被害を受けることとなる。

隠蔽工作

上述した例だと、攻撃用のURLにスクリプトがそのまま見えてしまっているため、攻撃が発覚しやすい。しかし例えば攻撃者が自身でWebサイトを立ち上げ、

source langhtml4strict

a hrefhttpexamplecomnamescript(悪意のあるスクリプト)scriptここをクリックa

source

とすれば、ユーザが見る画面上には

span stylecolorblueuここをクリックuspan

としか表示されないので、攻撃を隠蔽できる。

またユーザがアクセスした攻撃用サイトにはお名前は以下のもので正しいでしょうかといった文章が表示されてしまうため、攻撃を受けたことにユーザが気づいてしまう可能性があるが、攻撃者が悪意のあるスクリプト部分に

source langhtml4strict

 META HTTP-EQUIVREFRESH CONTENT0URL(何らかのURL) 

source

と記載しておけば、ユーザはアクセスしてから0秒後に(何らかのURL)にリダイレクトされてしまうため、攻撃を隠蔽できる。

攻撃手法の分類

CWE-79ではXSSの攻撃手法を以下の種類に分類しているSfnCWE-792011

タイプ 1反射型クロスサイトスクリプティング非持続的

タイプ2格納型クロスサイトスクリプティング持続的

タイプ0DOMベースのクロスサイトスクリプティング

反射型XSS

反射型XSSでは、攻撃者は不正なデータDをWebページPのURLなどに仕込んでおり、Dが原因でWebアプリケーションが作るPのhtml本文などに悪意のあるスクリプトが含まれる。被害者がWebページPのURLをクリックすると、Pの内容とともに悪意のあるスクリプトが被害者のブラウザに送信され、ブラウザ上で悪意のあるスクリプトが実行される事で被害が生じる。したがって攻撃者が反射型XSSの脆弱性を利用するには、被害者をPに誘導する方法を別途考える必要がある。

反射型XSSにおいて攻撃者が被害者をWebページPに誘導する方法は主につあるSfnIPA2015p22-29。第一の方法は、標的サイトとは別のWebサイト(電子掲示板公開掲示板や攻撃者自身のWebサイトなど)にPのURLを張り、被害者がPへのリンクをクリックするのを待つ方法である。第二の方法は標的サイトを装って被害者にメールし、そのメール本文にPのURLを記載することで、被害者がPを閲覧するのを期待する方法である。

クロスサイトスクリプティングという名称は、上述した第一の方法において、PのURLを記載したサイトと標的サイトをサイト横断的に利用して攻撃を実行する事から名づけられたものだがrefhttpe-wordsjpwE382AFE383ADE382B9E382B5E382A4E38388E382B9E382AFE383AAE38397E38386E382A3E383B3E382B0html IT用語辞典e-wordsクロスサイトスクリプティング 20160912閲覧ref、第二の方法などそれ以外の攻撃もクロスサイトスクリプティングと呼ぶ。

格納型XSS

一方、格納型XSSでは、攻撃者は不正なデータDを標的サイトのデータベース、メッセージフォーラム、訪問者ログといったデータストアに保存するSfnCWE-792011。たとえば電子掲示板に格納型XSSの脆弱性がある場合、攻撃者は不正なデータDを含んだ書き込みを掲示板に対して行う。すると掲示板システムはDを自身のデータストアに保存し、正規の利用者が掲示板を訪れるたびにDを含んだ書き込みを表示するため、この書き込みを表示した利用者全員がXSSの被害者になりうる。格納型XSSは正規サイトのデータストアそのものに不正なデータを仕込むので、反射型XSSと違い被害者に不正なURLをクリックさせる必要がない事が攻撃者にとっての利点の一つである。

DOMベースXSS

反射型および格納型のXSSではWebアプリケーション側が悪意のあるスクリプトを含んだWebページPを作り出す事が原因で、Pを閲覧した被害者が被害を受けるSfnIPA2013p5-8。それに対しDOMベースXSSは、ブラウザなどのユーザ・クライアントが悪意のあるスクリプトを含んだWebページを生成するタイプのXSSの総称である。DOMベースXSSは、スクリプトを使った以下のような動的html生成Document Object ModelDOM操作SfnIPA2013p5-8を利用する。一般にユーザがWebサイトにアクセスすると、Webアプリケーションはユーザ・クライアントに対し、(悪意のない正規の)スクリプトSを含んだhtmlを送り返すことがある。ユーザ・クライアントはこのhtmlを受け取ると、htmlに含まれるスクリプトSを実行することで、htmlを書き換え、画面に出力する最終的なhtmlを得る。

DOMベースXSSではこの仕組みを悪用し、ユーザ・クライアント側で実行されるスクリプトSに不正なデータDを注入することで、XSS攻撃を実行する。Dを注入する箇所としては反射型XSSと同様、URLなどを利用するSfnIPA2013p10。

他のつのXSSとは異なり、Webアプリケーション側ではDOMベースXSS攻撃が行われていることを感知できないrefCite weburlhttpswwwipagojpfiles000024729pdftitleあまり知られていない脆弱性DOM Based XSSにご用心accessdate2016年9月12日date2007年2月16日publisherアークウェブref。というのもDOMの仕組みでは、スクリプトSに注入される不正なデータDは、Webアプリケーションではなくユーザ・クライアント側で取得し、ユーザ・クライアント側でDが注入されたスクリプトSを実行するので、Webアプリケーション側には不正なデータDが一切伝わらないからである。したがってWebサイトの管理者が感知しないうちに被害が拡大するおそれがある。

対策

クロスサイトスクリプティングの対策は、いくつかの例外を除き、出力値のエスケープを適切に施すことである。

HTMLの実体参照を用い、codeampcode を codeampampcode に、codeltcode を codeampltcode に、codegtcode を codeampgtcode に、codecode を codeampquotcode に、それぞれ置換する。

タグ属性値は必ず codecode (引用符ダブルクオート)で括る。また属性値中のエスケープを忘れない。例codeltinput typehidden namefoo valueampltscriptampgtcode

例外は以下のような場合である。

入力値をUniform Resource IdentifierURIとして用いる場合(リダイレクタなど)

許可するスキームを定め、それ以外のスキームを持つURIは拒否する。

入力値をスタイルシートとして使用する場合

許可する構文を定め、それ以外の使用は拒否する。スタイルシート中のスクリプト起動方法は多様であり、ブラックリスト方式で完全抑制することは難しい。

入力中の一定のタグをHTMLとして反映したい場合(例nowikinowiki ウィキ)

ホワイトリスト(許可リスト)を使用した出力タグ、あるいは属性の制限を行う。制限には上述のURI中のスキーマ制限や、スタイルシートへの制限を含む。

周辺

基本的にはウェブサイト側の脆弱性を突いて、ウェブサイトにアクセスした利用者に任意のスクリプトを実行させる状況であるため、ウェブサイト管理者側が脆弱性対策を行わずに放置したような場合、サイト利用者側が取れる根本的な対策はほとんどない。

利用者側のポリシーとして怪しいサイトには行かないでは不十分であり、脆弱性の対策をしていないサイトは利用しないという、一般人は有効に適用できそうもないポリシーを取るしかない。

その唯一の例外としては、langenJavaScriptやlangenActiveXなどを含むブラウザのスクリプトを無効にすること、スクリプトや動的生成ページを使用しない静的ページのみにアクセスを限定する、古いブラウザを使用しない、という程度である。

ただ、WikiブログSNSなど、近年のウェブサイトはそのほとんどがスクリプトを用いて動的に生成されているため、インターネット利用者が上記の対策を行った上でウェブサイトを利用することは不可能に近い。

脚注
Reflist
外部リンク

Cite weburlhttpjvndbjvnjpjacweCWE-79htmltitleCWE-79 クロスサイトスクリプティングaccessdate2016年9月12日date2011年04月21日publisherhttpjvnjp JVN iPediarefSfnRefCWE-792011

Cite weburlhttpswwwipagojpfiles000024729pdf

titleIPAテクニカルウォッチDOM Based XSSに関するレポートJavaScriptでHTMLを操作するアプリは要注意

accessdate2016年9月12日
date2013年1月29日
publisherIPA

author編集責任小林偉昭、執筆者谷口隼祐、永安佑希允、協力者徳丸浩

refSfnRefIPA2013

Cite weburlhttpswwwipagojpfiles000017316pdftitle安全なウェブサイトの作り方 改訂第版 ウェブアプリケーションのセキュリティ実装とウェブサイトの安全性向上のための取り組みaccessdate2016年9月12日date2015年03月formatPDFpublisherIPArefSfnRefIPA2011

httpwwwatmarkitcojpaitkwcrosssitescriptingtaisakukihonhtml IT - クロスサイトスクリプティング対策の基本

httpwwwslidesharenetockeghemxssreintroduction 徳丸浩 - XSS再入門

独立行政法人 情報処理推進機構 技術本部 セキュリティーセンターhttpswwwipagojpsecurityawarenessvendorprogrammingv2contents601html セキュア・プログラミング講座第7章 エコーバック対策 スクリプト注入 2014年 8月19日 閲覧

エクスプロイト
DEFAULTSORTくろすさいとすくりふていんく
Categoryセキュリティ技術

Categoryコンピュータ・ネットワーク・セキュリティ

Categoryエクスプロイト