こんにちは、SAKURUGのTakumiです。
今回は、Web系の開発で注意すべきサイバー攻撃の一つである「クロスサイトスクリプティング」について、初めて聞いた方も理解できるよう、なるべく分かりやすい説明ができたらなと思っております。
少しでもお役に立てたらと思います。
WEBサイトやアプリケーションの脆弱性を利用し、サイト利用者の個人情報盗難などの被害を及ぼすサイバー攻撃のことです。
攻撃者が罠を準備したWebサイトをユーザーが閲覧し、設置した罠に触れるようなことをしてしまうと、自動的に悪意のあるスクリプトが実行され、罠にはまったユーザーの個人情報を盗んだり、マルウェアに感染させたり、悪意のあるサイトにリダイレクトさせたりします。
こうしたサイバー攻撃は、Webサイトの信頼性を低下させるため、もしくはユーザーの個人情報を盗むために行われます。
偽のWebページに個人情報を入力することにより、情報漏洩や金銭的な被害にあってしまう
<被害事例>
・通販やSNS等のアカウントへ不正ログイン・乗っ取られる
・住所やカード情報などが流出・ばらまかれる
・ネットバンキングを装った悪質なWebページより、不正送金を行う
Cookieに含まれるセッションIDが、悪意のある第三者に取得されてしまう危険性がある。
セッションハイジャックが行われた場合、アカウントに登録していた情報の漏洩やクレジットカードの不正利用などが起きる可能性がある。
今から説明する流れは、「掲示板サイト」での攻撃の流れです。
攻撃者は偽造したWebサイトやメールに攻撃用のスクリプトがあり、ユーザーが罠を踏んでしまうことで標的サイトを介してスクリプトが実行されてしまう手法
以下のように、URLのパラメータに悪意のあるプログラムを仕込むことができる
https://test.com?name=<script>悪意のあるプログラム</script>
※攻撃者の仕掛けた罠に引っかからなければ被害を受けることはないため、攻撃者にとってはユーザーを罠サイトへ誘導するというステップが必要になる。
標的のWebサーバに対して悪意のあるスクリプトを保存しておき、その攻撃内容が保存されているところにアクセスしてしまうとスクリプトが実行されてしまう手法。
イメージとしては掲示板サイトで、他の人が投稿した内容を開いただけで悪意のあるスクリプトが実行されてしまうといったイメージです。
もう少し具体的に言うと...
普通の投稿内容の中に悪意のあるスクリプトを記載した場合に、投稿内容と悪意のあるスクリプトがDB内に保存されていて、サイトを見に来たユーザーが被害にあうといったものになります。
JavaScriptがDOMを操作する時に発生する攻撃手法。
Document Object Modelの略。
Webページ(各種タグ)を木構造で表現したもの。
先ほど説明した「反射型XSS」はWebサーバにアクセスし、Webサーバからのレスポンス内に悪意のあるスクリプトが含まれるものが実行される。
それに対して「DOMベースXSS」は、Webサーバにアクセスせずにクライアントのブラウザ上でスクリプトが動作する手法。
Webアプリケーションやシステムに入力されたデータ内の文字列を、スクリプトコードとして意味を持たない無害な状態にするために、他の文字列に置き換える・特定の文字を削除する処理。
<script type="test/javascript">●●●</script>
↓サニタイジング処理
<script type="test/javascript">●●●</script>
主要なサニタイジングの種類
エスケープ文字 | 置き換え後の文字 | 名称 |
---|---|---|
< | < | 小なり |
> | > | 大なり |
& | & | アンパサンド |
¥ | ¥ | 円マーク |
(半角スペース) | | 半角スペース |
ユーザーの入力できる値を制限するのも対策の一つです。
<script>alert("xss")</script>
↓上記のスクリプトをUTF-7で記載
+Adw-script+AD4-alert(+ACL-xss+ACL-)+Adw-/script+AD4-
Webアプリケーションの脆弱性を狙った攻撃からWebサイトを守るファイアウォール。
WAFでネットワーク通信を監視して、攻撃と判断した通信を遮断することで、XSS攻撃から自社・自組織のWebサイトを守ることができる。
ECサイトのように、ユーザーの入力を受けたり、クレジットカード情報をはじめとする個人情報を取り扱ったりする動的サイトの保護に適したセキュリティ対策。
※Webサイトの脆弱性自体を修正できるわけではないので、根本的な解決方法にはならない。