サイバー脅威に対処する最も有効な方法は、発生シナリオを把握し、早期に対策を講ずることです。セキュリティ担当者にとって、クライアント側攻撃への対策は、重要なデータが直接危険に晒されるため、大変な作業です。
CSRFとXSSは、代表的なクライアント側攻撃であり、いずれも悪質で深刻な結果をもたらします.
どちらも悪意ある内容を利用者の端末に仕込む点や、同一オリジンポリシーに基づいていますが、一体どこが異なるのでしょうか? CSRFとXSS攻撃の実態を探ってみましょう。
XSSまたはCross Site Scriptingと呼ばれるこの手法は、非常に一般的なサイバー脅威です。成功すると、攻撃者は利用者がアクセスできるウェブページに改ざんされたクライアント側スクリプトを仕込むことが可能になります。これらのスクリプトは主にJavaScriptに基づいており、信頼されるとされるウェブサイトに挿入されます.
ウェブサイトと利用者間で認証済みのセッションが確立している必要はありません。攻撃の手法により、XSSには3種類が存在します.
最初のDOM型XSSは、利用者が入力した内容が保護の不十分な環境でJavaScriptにより変更される場合に発生します。例えば、利用者がフォームの値を取得し、JavaScriptでシステムのDOM内に表示する際、攻撃者がその入力を何らかの方法で取得できれば、実行されるスクリプトを操作可能となります.
次に、リフレクト型XSSがあります。これは、ウェブサーバがHTTPリクエストを受け取り、データ保護なしに同じ情報を出力する場合です。要求された情報全体が結果に反映されるため、リフレクトXSSと呼ばれます.
最後に、ストアドXSSがあります。これは、利用者が生成したデータが一般的なストレージに保存された後、ウェブページにアップロードされる際に発生します.
これらすべてのXSS攻撃は、対象アプリに潜在的な危害を及ぼす可能性があります.
XSS攻撃が発生する可能性は、次の2つの状況に依存します:
いずれの場合も、改ざんされた内容が対象ブラウザに届き、JavaScriptの一部となります。ただし、含まれるコードがJavaScriptだけであるとは限らず、攻撃時にブラウザが実行しているコードの種類に応じ、Flash、HTML、その他のコードが使われることもあります.
悪意あるコードが実行されると、あらゆるデータを取得できる恐れがあります。クッキー、ログイン情報、セッションデータ、取引情報などが奪われる可能性があるため、XSS攻撃の影響は計り知れません.
XSSの動作をよりよく理解するため、即時XSSの例を見てみましょう。404エラーページをご存知でしょうか? これは非常に一般的な現象で、攻撃者はこのエラーを利用してXSS攻撃を仕掛けます。例えば、利用者がUnsafe.comの存在しないページにアクセスしようとする場合を考えます.
そのページはおそらくhttp: //unsafe.com/non_existent_fileに存在し、アクセスすると結果はNot Found:/non_existent_fileとなります.
熟練の攻撃者は、エラーページに改ざんされたコードを挿入してXSS攻撃を仕掛けます.
http://unsafe.com/<script>bad_payload_scrpit</script>
被害者がUnsafe.comの存在しないページを見ると、悪意あるJavaScriptコードが含まれ、そのコードが実行されると攻撃者はセッションの詳細情報を全て取得する可能性があります.
クライアント情報の漏洩など多数の問題を引き起こすこの手法、CSRFまたはクロスサイトリクエストフォージェリは、ウェブサイトやページでよく見受けられます。ここでは、攻撃者が直接攻撃するのではなく、認証済みの利用者を利用して攻撃を行います。例えば、攻撃者がGoogleのサーバーを狙う場合、直接サーバーを乗っ取ろうとはせず、認証済みの利用者の助力を借りて悪質な内容を送信し、狙ったサーバーを操作します.
これを実現するため、対象のアプリやウェブサイトに既存の脆弱性を利用し、さらにソーシャルエンジニアリングで認証済みの利用者を騙します。CSRF攻撃に必要な条件は以下の通りです:
CSRF攻撃の流れはシンプルです。攻撃者は悪質なHTTPリクエストを狙ったウェブサイトへ送信し、認証済みの利用者がそのサイトにアクセスすると、自動的に悪意あるリクエストが処理され、攻撃者は利用者の情報を閲覧・利用できるようになります.
GETリクエストで送金を受け付ける銀行のウェブサイトを例にとります。コードは次のようになります:
GET http: //banking.com/transfer.do?acct=John&amount=1000 HTTP/1.1
次に、攻撃者が利用者Joshを誘導し、$5,000をMikeという口座に送金させようとしていると仮定します。攻撃者は受取人情報や送金額を容易に改変できます.
GET http: //banking.com/transfer.do?acct=Mike&amount=5000
これら2つの脆弱性の基本が理解できたところで、それぞれの違いについて見ていきます:
XSS予防の手法を検討すると、CSRFトークンが用いられることが多いことが分かります。CSRFトークンは、サーバ側アプリが自動生成する固有の任意の値で、CSRF攻撃を防ぐ目的で利用されます。これらは関連するHTTPリクエストと結びつき、CSRF攻撃の可能性を判断するのに役立ちます.
CSRF攻撃だけでなく、一部のXSS攻撃もCSRFトークンで防ぐことが可能です.
最も一般的な例はリフレクトXSSです。従来のリフレクトXSS攻撃を見てみましょう.
https: //example .com/status?incomingmessage=<script>/*+Infected+stuff+here….+*/<script>
これはリフレクトXSSに脆弱な機能です。ここにCSRFトークンを導入してみます.
https: //example.com/status?csrf-token=CIwPZNlR4XbisJF39I8yWX9n4WNoWwXZ
incoming message=<script>/*+Infected+stuff+here….+*/<script>
このCIwPZNlR4XbisJF39I8yWX9n4WNoWwXZというCSRFトークンを導入することで、サーバはCSRFトークン付きのリクエストのみを受け入れ、XSS攻撃の可能性を低減できます。これにより、攻撃者がクロスサイトリクエストを偽造または操作するのを防ぎ、XSS攻撃を阻止します.
しかし、XSS攻撃を完全に防ぐ解決策とは言い難いです。例えば:
文章だけでは分かりにくいかもしれません。そこで、XSS攻撃とCSRF攻撃を表形式で簡潔に比較してみます.
Comparison table
XSS | CSRF |
---|---|
The corrupted script is introduced in the client-specific site script. | The website user is tricked in a manner that s/he end-up injecting corrupted HTTP requests to the aimed website without knowing the outcome. |
Random data is introduced bit by bit and is not authenticated. | Success of the attack hinges on the ability and features of the browser. If the browser is capable of processing the attack bundle, the CSRF attack will become successful. |
It entirely depends on JavaScript. | It may or may not require JavaScript. |
The targeted website receives the corrupted code and processes it. | The website doesn’t store the trouble-causing code as it’s stored on 3rd party websites. |
The presence of XSS vulnerability paves the path for CSRF attack as well. | CSRF attack doesn’t mean that the targeted website is prone for XSS attack as well. |
The outcome is pretty nefarious and harmful | CSRF attack isn’t too destructive. |
The attacker is capable of doing everything s/he wants after a successful attempt. | This exploit is controlled, and hackers can do damage that falls under the capacity of URL. |
最新情報を購読