XSSはクロスサイトスクリプティングを意味し、Webアプリケーションにおける脆弱性に悪意を持ったスクリプト(命令)を仕掛けられ、ユーザのブラウザにおいて偽装されたページの表示を可能にしてしまう攻撃です。
偽装ページへの誘導だけではなく、ユーザを騙しcookie情報または個人情報等を搾取するケースがあります。
XSSによるスクリプト入力に用いられるのは、Web上のアンケート、掲示板、サイト検索等です。
過去のXSS被害として、動画共有サイトAが攻撃の標的となった際、そのコメントシステムに存在するXSSの脆弱性が悪用され、一部コメントの表示がされない等の被害を受けた事例が挙げられます。
外部調査によると、同サイトのコメントアプリケーションにおける暗号化処理に障害が発生し、その際攻撃者がcookieを盗み、サイトに悪意のあるスクリプトコードを埋め込み、被害へ繋がったとのことです。
引用元:https://www.ipa.go.jp/files/000017316.pdf
reflected XSS 反射型
リクエストが含む悪意を持った指令文字列を、Web上で動作させる仕組みです。
persistent XSS 持続型
悪意を持った指令文字列をアプリケーションの中へ埋め込み、それらをWeb上で動作させる仕組みです。攻撃対象者を仕掛けたWebページへと誘導する必要があります。
DOM based XSS
Webページが含む正規の指令文字列によって、動的にWebページを操作した結果意図せずそれらをWebページ上で動作させます。
DOM(Document object model)はHTML、XMLドキュメントをアプリケーションから操作する際、ソフトウェアの機能を共有するためのAPIを意味します。
正規サイトが偽装される
・偽情報が拡散されることで起こる混乱
・フィッシング詐欺
ブラウザが保管しているcookieを盗まれる
・正規の利用者へのなりすまし
・cookieに格納された情報が漏えい
・アンケートや会員登録時における入力内容の確認画面
・誤入力時再入力を促す画面
・エラー表示
・検索結果の表示
・ブログや掲示板等におけるコメント反映
エスケープ処理
エスケープ処理とは、Webページの表示に影響する特別な記号文字「<」「>」「&」等を、HTML エンティティである「<」「>」「&」等に置換する作業を意味します。
脆弱性防止においてエスケープ処理が必須となるのは、外部からWebアプリケーションに渡さ れる「入力値」の文字列、データベースやファイルから読み込んだ文字列、もしくは何らかの文字列を演算によって生成した文字列等です。
しかし必須であるか不必要であるかによらず、テキストとして出力するものに対してエスケープ処理を行うよう、一貫したコーディングをすることが対策上重要とされています。
対 象となる出力処理は、HTTPレスポンスへの出力に限らず、JavaScript の document.write メソッドや innerHTML プロパティ等を使用して、動的にWebページの内容を変更する場合においても上記と同様の処理が必要です。
URL出力の際、冒頭が「http://」または「https://」であるURLのみ利用
外部からの入力に依存する形で動的に生成される場合、「javascript:」の形式で始まるURLを利用することでXSS攻撃を受ける可能性があります。
たとえば、利用者から入力されたリンク先の URL を「<a href="リンク先の URL">」の形式でWebページに出力するWebアプリケーションは、リンク先の URL に「javascript:」 等から始まる文字列を指定された場合に、スクリプトを埋め込まれてしまう可能性があります。
リンク先 の URL には「http://」や「https://」から始まる文字列のみを許可する、「ホワイトリスト方式」を実装することで対策が取れます。
入力値の内容確認
入力値すべてが、Webアプリケーションの仕様に沿うものであるか判断及び処理を実装し、 仕様に合わない値を入力された場合において処理の実行を阻止し、再入力を要求する対策方法が保険的対策として挙げられます。
XSS攻撃によって自社が間接的な加害者となり、顧客含む関係者に迷惑をかけることで社会的信用をなくし、企業としての大きな損害となる可能性があります。対策としては悪意あるコードを埋め込めないようにすることや、自社のWEB担当者や制作会社へ確認をすることでこれらの攻撃から企業を守れます。