クロスサイトリクエストフォージェ リ XSRF)Fachbereich Informatik SVS – Sicherheit...

Preview:

Citation preview

Fachbereich Informatik

SVS – Sicherheit in Verteilten Systemen

Universität Hamburg

クロスサイトリクエストフォージェクロスサイトリクエストフォージェクロスサイトリクエストフォージェクロスサイトリクエストフォージェリリリリ((((XSRF)XSRF)XSRF)XSRF)

なぜ配慮しないといけないか

PacSec 2006 2006年年年年11月月月月27日~日~日~日~30日日日日

Martin Johns

Martin Johns, UH, FB Inf, SVS, 2006 2

自己紹介

� Martin Johns

� informatik.uni-hamburg.de所属所属所属所属� ハンブルク大学セキュリティ研究者ハンブルク大学セキュリティ研究者ハンブルク大学セキュリティ研究者ハンブルク大学セキュリティ研究者� ”Secologic”プロジェクトメンバープロジェクトメンバープロジェクトメンバープロジェクトメンバー

� SAP、、、、Commerzbank、、、、Eurosec、ハンブルク大学が推進する研究プ、ハンブルク大学が推進する研究プ、ハンブルク大学が推進する研究プ、ハンブルク大学が推進する研究プロジェクトロジェクトロジェクトロジェクト

� ドイツ連邦経済技術省(ドイツ連邦経済技術省(ドイツ連邦経済技術省(ドイツ連邦経済技術省(BMWi)後援)後援)後援)後援プロジェクトプロジェクトプロジェクトプロジェクト� 目標目標目標目標: ソフトウェアのセキュリティ向上ソフトウェアのセキュリティ向上ソフトウェアのセキュリティ向上ソフトウェアのセキュリティ向上� 詳しくは詳しくは詳しくは詳しくはhttp://www.secologic.orgまでまでまでまで

Martin Johns, UH, FB Inf, SVS, 2006 3

内容

� ウェブアプリケーションの認証ウェブアプリケーションの認証ウェブアプリケーションの認証ウェブアプリケーションの認証� XSRF / セッションライディングセッションライディングセッションライディングセッションライディング� サーバー側の対策サーバー側の対策サーバー側の対策サーバー側の対策� クライアント側の保護クライアント側の保護クライアント側の保護クライアント側の保護� 結論結論結論結論

Martin Johns, UH, FB Inf, SVS, 2006 4

内容

� ウェブアプリケーションの認証ウェブアプリケーションの認証ウェブアプリケーションの認証ウェブアプリケーションの認証� XSRF / セッションライディング� サーバー側の対策� クライアント側の保護� 結論

Martin Johns, UH, FB Inf, SVS, 2006 5

明示的な認証

認証証明がウェブアプリケーションによって伝達される認証証明がウェブアプリケーションによって伝達される認証証明がウェブアプリケーションによって伝達される認証証明がウェブアプリケーションによって伝達される� URLのリライトのリライトのリライトのリライト: セッショントークンが各セッショントークンが各セッショントークンが各セッショントークンが各URLに含まれるに含まれるに含まれるに含まれる� フォームによるセッショントークンフォームによるセッショントークンフォームによるセッショントークンフォームによるセッショントークン

XSRFに強いに強いに強いに強い(唯一ほぼ確実な保護策といえる)(唯一ほぼ確実な保護策といえる)(唯一ほぼ確実な保護策といえる)(唯一ほぼ確実な保護策といえる)

Martin Johns, UH, FB Inf, SVS, 2006 6

暗黙的な認証

ブラウザにより自動的に実行されるブラウザにより自動的に実行されるブラウザにより自動的に実行されるブラウザにより自動的に実行される� クッキークッキークッキークッキー� http認証(認証(認証(認証(Basic、、、、Digest、、、、NTLM))))� IPによるスキームによるスキームによるスキームによるスキーム� クライアント側のクライアント側のクライアント側のクライアント側のSSL

XSRFに対して潜在的に脆弱であるに対して潜在的に脆弱であるに対して潜在的に脆弱であるに対して潜在的に脆弱である

Martin Johns, UH, FB Inf, SVS, 2006 7

クッキーによるセッション管理

� 認証フォームの後、サーバーがクライアントのブラウ認証フォームの後、サーバーがクライアントのブラウ認証フォームの後、サーバーがクライアントのブラウ認証フォームの後、サーバーがクライアントのブラウザにクッキーを設定するザにクッキーを設定するザにクッキーを設定するザにクッキーを設定する

� このクッキーが有効である限り、クライアントの要求このクッキーが有効である限り、クライアントの要求このクッキーが有効である限り、クライアントの要求このクッキーが有効である限り、クライアントの要求は認証されたものとして扱われるは認証されたものとして扱われるは認証されたものとして扱われるは認証されたものとして扱われる

Martin Johns, UH, FB Inf, SVS, 2006 8

http認証(Basic、Digest)

クライアント サーバー � クライアントが制限されたリソクライアントが制限されたリソクライアントが制限されたリソクライアントが制限されたリソースを要求するースを要求するースを要求するースを要求する

� サーバーはサーバーはサーバーはサーバーは“401 Unauthorized”で応答するで応答するで応答するで応答する

� これによってクライアントのブこれによってクライアントのブこれによってクライアントのブこれによってクライアントのブラウザは証明を要求するラウザは証明を要求するラウザは証明を要求するラウザは証明を要求する

� クライアントが要求を再送信すクライアントが要求を再送信すクライアントが要求を再送信すクライアントが要求を再送信するるるる

� ユーザの証明はユーザの証明はユーザの証明はユーザの証明は““““Authorization”のヘッダのヘッダのヘッダのヘッダとして含まれるとして含まれるとして含まれるとして含まれる

� 今後、この認証領域に対する要今後、この認証領域に対する要今後、この認証領域に対する要今後、この認証領域に対する要求にはすべて自動的に証明が含求にはすべて自動的に証明が含求にはすべて自動的に証明が含求にはすべて自動的に証明が含まれるようになるまれるようになるまれるようになるまれるようになる

GET index.html

401 Unauthorized

GET index.htmlAuthorization: h3m8dxjh

200 OK

HTML data

Martin Johns, UH, FB Inf, SVS, 2006 9

クライアント側のSSL認証

� ウェブアプリケーションにより信頼された機関が署名したウェブアプリケーションにより信頼された機関が署名したウェブアプリケーションにより信頼された機関が署名したウェブアプリケーションにより信頼された機関が署名したX.509の証明をクライアントのウェブブラウザが持っているの証明をクライアントのウェブブラウザが持っているの証明をクライアントのウェブブラウザが持っているの証明をクライアントのウェブブラウザが持っている

� 初期認証初期認証初期認証初期認証:

� クライアントは自己証明クライアントは自己証明クライアントは自己証明クライアントは自己証明しなければしなければしなければしなければならないならないならないならない� そのため、ウェブサーバーはクライアントからの有効な署名を要求そのため、ウェブサーバーはクライアントからの有効な署名を要求そのため、ウェブサーバーはクライアントからの有効な署名を要求そのため、ウェブサーバーはクライアントからの有効な署名を要求

するするするする� ���� “SSL handshake”

� ブラウザによっては、ユーザがパスワードを入力(一回のみ)したブラウザによっては、ユーザがパスワードを入力(一回のみ)したブラウザによっては、ユーザがパスワードを入力(一回のみ)したブラウザによっては、ユーザがパスワードを入力(一回のみ)した際に初期際に初期際に初期際に初期接続確立を確認できる場合も、そうでない場合もある接続確立を確認できる場合も、そうでない場合もある接続確立を確認できる場合も、そうでない場合もある接続確立を確認できる場合も、そうでない場合もある

� 接続が確立すれば、クライアントのブラウザとウェブサーバーと接続が確立すれば、クライアントのブラウザとウェブサーバーと接続が確立すれば、クライアントのブラウザとウェブサーバーと接続が確立すれば、クライアントのブラウザとウェブサーバーとの間での間での間での間でSSLセッションが成立するセッションが成立するセッションが成立するセッションが成立する

� SSLセッションが有効である限り、ウェブサーバーに対するすべセッションが有効である限り、ウェブサーバーに対するすべセッションが有効である限り、ウェブサーバーに対するすべセッションが有効である限り、ウェブサーバーに対するすべての要求は折衝済みの証明を用いて送信されるての要求は折衝済みの証明を用いて送信されるての要求は折衝済みの証明を用いて送信されるての要求は折衝済みの証明を用いて送信される

Martin Johns, UH, FB Inf, SVS, 2006 10

IPによる認証

ファイヤウォーファイヤウォーファイヤウォーファイヤウォールルルル

イントラネットウェブサーバー

Martin Johns, UH, FB Inf, SVS, 2006 11

内容

� ウェブアプリケーションの認証� XSRF / セッションライディングセッションライディングセッションライディングセッションライディング� サーバー側の対策� クライアント側の保護� 結論

Martin Johns, UH, FB Inf, SVS, 2006 12

XSRF / セッションライディング

暗黙的な認証暗黙的な認証暗黙的な認証暗黙的な認証メカニズムをメカニズムをメカニズムをメカニズムを攻撃する攻撃する攻撃する攻撃する� 2001年から知られるようになった年から知られるようになった年から知られるようになった年から知られるようになった� 別名別名別名別名XSRF、、、、CSRF、、、、“セッションライディングセッションライディングセッションライディングセッションライディング” ((((“シーサーフシーサーフシーサーフシーサーフ””””とととと

もももも)

� 未知で未知で未知で未知で/重要視されて重要視されて重要視されて重要視されていない(いない(いない(いない(XSSややややSQLインジェクションと比べインジェクションと比べインジェクションと比べインジェクションと比べて)アタックベクターて)アタックベクターて)アタックベクターて)アタックベクター

攻撃攻撃攻撃攻撃:

� 攻撃者は標的とするウェブブラウザの中で隠れた攻撃者は標的とするウェブブラウザの中で隠れた攻撃者は標的とするウェブブラウザの中で隠れた攻撃者は標的とするウェブブラウザの中で隠れたhttp要求を作成要求を作成要求を作成要求を作成するするするする

� この要求は標的の認証コンテクストの中で実行されるこの要求は標的の認証コンテクストの中で実行されるこの要求は標的の認証コンテクストの中で実行されるこの要求は標的の認証コンテクストの中で実行される

Martin Johns, UH, FB Inf, SVS, 2006 13

www.bank.com

XSRF / セッションライディング(II)

Cookie: auth_ok

Martin Johns, UH, FB Inf, SVS, 2006 14

www.bank.com

XSRF /セッションライディング(II)

Cookie: auth_ok

www.attacker.org

GET transfer.cgi?am=10000&an=3422421

Martin Johns, UH, FB Inf, SVS, 2006 15

XSRF /セッションライディング(III)

原因原因原因原因: 状態変更要求がウェブアプリケーション状態変更要求がウェブアプリケーション状態変更要求がウェブアプリケーション状態変更要求がウェブアプリケーション““““内で内で内で内で””””作成された作成された作成された作成されたことをウェブアプリケーションが確認しないことをウェブアプリケーションが確認しないことをウェブアプリケーションが確認しないことをウェブアプリケーションが確認しない

攻撃法攻撃法攻撃法攻撃法:

� GET要求を作成する要求を作成する要求を作成する要求を作成する:

� SRC属性を持つ画像タグが状態変更属性を持つ画像タグが状態変更属性を持つ画像タグが状態変更属性を持つ画像タグが状態変更URLを指定するを指定するを指定するを指定する� このこのこのこのURLははははhttpリダイレクトにより難読化される可能性があるリダイレクトにより難読化される可能性があるリダイレクトにより難読化される可能性があるリダイレクトにより難読化される可能性がある

� POST要求を作成する要求を作成する要求を作成する要求を作成する:

� 攻撃者が攻撃者が攻撃者が攻撃者がIFRAME(またはポップアップウィンドウ)を作成する(またはポップアップウィンドウ)を作成する(またはポップアップウィンドウ)を作成する(またはポップアップウィンドウ)を作成する� このフレームにはこのフレームにはこのフレームにはこのフレームにはHTMLフォームが含まれるフォームが含まれるフォームが含まれるフォームが含まれる� このフォームはこのフォームはこのフォームはこのフォームはJavaScriptで送信されるで送信されるで送信されるで送信される

Martin Johns, UH, FB Inf, SVS, 2006 16

XSRF / セッションライディング(IV)

反射型反射型反射型反射型:

� 攻撃者は隠れた要求の生成元をホストするようなウェブサイトを攻撃者は隠れた要求の生成元をホストするようなウェブサイトを攻撃者は隠れた要求の生成元をホストするようなウェブサイトを攻撃者は隠れた要求の生成元をホストするようなウェブサイトを作成しなければならない作成しなければならない作成しなければならない作成しなければならない

ローカルローカルローカルローカル / 蓄積型蓄積型蓄積型蓄積型:

� 悪意のある悪意のある悪意のある悪意のあるhttp要求の生成元は攻撃を受けたウェブサイト上でホ要求の生成元は攻撃を受けたウェブサイト上でホ要求の生成元は攻撃を受けたウェブサイト上でホ要求の生成元は攻撃を受けたウェブサイト上でホストされるストされるストされるストされる

� 例例例例: ユーザは海外のユーザは海外のユーザは海外のユーザは海外のURLで画像で画像で画像で画像を掲載を掲載を掲載を掲載できるできるできるできる

Martin Johns, UH, FB Inf, SVS, 2006 17

例 1: アプリケーションの破壊

攻撃対象攻撃対象攻撃対象攻撃対象: digg.com

� digg.comのフロントページは、各々のストーリーが獲得すのフロントページは、各々のストーリーが獲得すのフロントページは、各々のストーリーが獲得すのフロントページは、各々のストーリーが獲得するるるる”digg”(投票)数によって決定される(投票)数によって決定される(投票)数によって決定される(投票)数によって決定される

� XSRFの使用にの使用にの使用にの使用により、ウェブページは標的とするブラウザに任意より、ウェブページは標的とするブラウザに任意より、ウェブページは標的とするブラウザに任意より、ウェブページは標的とするブラウザに任意ののののURLをををを“digg”(投票)させることができた(投票)させることができた(投票)させることができた(投票)させることができた

� このデモ用ページも自らこのデモ用ページも自らこのデモ用ページも自らこのデモ用ページも自ら“digg”(投票)したものである(投票)したものである(投票)したものである(投票)したものである

Martin Johns, UH, FB Inf, SVS, 2006 18

例 2: 経済的な損失を与える

攻撃対象攻撃対象攻撃対象攻撃対象: Netflix.com

� ユーザのレンタルキューに複数の動画を加えるユーザのレンタルキューに複数の動画を加えるユーザのレンタルキューに複数の動画を加えるユーザのレンタルキューに複数の動画を加える� ユーザのレンタルキューのトップに動画を加えるユーザのレンタルキューのトップに動画を加えるユーザのレンタルキューのトップに動画を加えるユーザのレンタルキューのトップに動画を加える� ユーザアカウント上の氏名と住所を変更するユーザアカウント上の氏名と住所を変更するユーザアカウント上の氏名と住所を変更するユーザアカウント上の氏名と住所を変更する� ユーザアカウント上のメールアドレスとパスワードを変更するユーザアカウント上のメールアドレスとパスワードを変更するユーザアカウント上のメールアドレスとパスワードを変更するユーザアカウント上のメールアドレスとパスワードを変更する

(つまり(つまり(つまり(つまり ユーザのアカウントを乗っ取る)ユーザのアカウントを乗っ取る)ユーザのアカウントを乗っ取る)ユーザのアカウントを乗っ取る)� ユーザアカウントをキャンセルするユーザアカウントをキャンセルするユーザアカウントをキャンセルするユーザアカウントをキャンセルする(未確認(未確認(未確認(未確認/推測)推測)推測)推測)

Martin Johns, UH, FB Inf, SVS, 2006 19

例 3: サーバーを獲得する

攻撃対象攻撃対象攻撃対象攻撃対象: Wordpress 2.02

� WordpressのテーマエディタはのテーマエディタはのテーマエディタはのテーマエディタはXSRFに対して脆弱だったに対して脆弱だったに対して脆弱だったに対して脆弱だった� Wordpressのテーマファイルはのテーマファイルはのテーマファイルはのテーマファイルはphp-filesにもできるにもできるにもできるにもできる� XSRFによって攻撃者によって攻撃者によって攻撃者によって攻撃者は、任意のは、任意のは、任意のは、任意のphpコードを挿入するために、テコードを挿入するために、テコードを挿入するために、テコードを挿入するために、テ

ーマファイルーマファイルーマファイルーマファイルを修正を修正を修正を修正できたできたできたできた

Martin Johns, UH, FB Inf, SVS, 2006 20

例 4: イントラネットへの侵入

攻撃対象攻撃対象攻撃対象攻撃対象: (ほとんどの)イントラネットウェブサーバー(ほとんどの)イントラネットウェブサーバー(ほとんどの)イントラネットウェブサーバー(ほとんどの)イントラネットウェブサーバー� 外部の画像を過度に挿入し、時間設定した外部の画像を過度に挿入し、時間設定した外部の画像を過度に挿入し、時間設定した外部の画像を過度に挿入し、時間設定したJavaScriptイベントを使イベントを使イベントを使イベントを使

うことによって、悪意のあるウェブサイトは例えば下記のようなこうことによって、悪意のあるウェブサイトは例えば下記のようなこうことによって、悪意のあるウェブサイトは例えば下記のようなこうことによって、悪意のあるウェブサイトは例えば下記のようなことができるとができるとができるとができる:

� イントラネットをポートスキャンするイントラネットをポートスキャンするイントラネットをポートスキャンするイントラネットをポートスキャンする� 既存のウェブサーバーやインストールされたアプリケーションにフィ既存のウェブサーバーやインストールされたアプリケーションにフィ既存のウェブサーバーやインストールされたアプリケーションにフィ既存のウェブサーバーやインストールされたアプリケーションにフィ

ンガープリントするンガープリントするンガープリントするンガープリントする

���� “JavaScriptマルウェアマルウェアマルウェアマルウェア”

Malicious site

Firewall

Intranet webserver

Martin Johns, UH, FB Inf, SVS, 2006 21

XSRF / セッションライディング(IV)

全般的な問題全般的な問題全般的な問題全般的な問題:

� セッションライディングに対する脆弱性はプログラミング上のミセッションライディングに対する脆弱性はプログラミング上のミセッションライディングに対する脆弱性はプログラミング上のミセッションライディングに対する脆弱性はプログラミング上のミスによって起こるものではないスによって起こるものではないスによって起こるものではないスによって起こるものではない

� 完全に正確なコードでも攻撃対象になりうる完全に正確なコードでも攻撃対象になりうる完全に正確なコードでも攻撃対象になりうる完全に正確なコードでも攻撃対象になりうる� セッションライディングの原因はセッションライディングの原因はセッションライディングの原因はセッションライディングの原因はhttpにあるにあるにあるにある:

� 専用の認証証明がない専用の認証証明がない専用の認証証明がない専用の認証証明がない� 状態変更状態変更状態変更状態変更GET要求要求要求要求� JavaScript

“セッションライディング対策”とは、実は

“プロトコルを改善することであるプロトコルを改善することであるプロトコルを改善することであるプロトコルを改善することである”

Martin Johns, UH, FB Inf, SVS, 2006 22

内容

� ウェブアプリケーションの認証� XSRF / セッションライディング� サーバー側の対策サーバー側の対策サーバー側の対策サーバー側の対策� クライアント側の保護� 結論

Martin Johns, UH, FB Inf, SVS, 2006 23

誤解

POST要求のみを要求のみを要求のみを要求のみを承認する承認する承認する承認する� ローカル攻撃を防ぐローカル攻撃を防ぐローカル攻撃を防ぐローカル攻撃を防ぐ� 海外のウェブページでは、隠れた海外のウェブページでは、隠れた海外のウェブページでは、隠れた海外のウェブページでは、隠れたPOST要求をフレームで作成要求をフレームで作成要求をフレームで作成要求をフレームで作成でででで

きるきるきるきる

リファラチェックリファラチェックリファラチェックリファラチェック� 一部のユーザはリファラを禁止している一部のユーザはリファラを禁止している一部のユーザはリファラを禁止している一部のユーザはリファラを禁止している

����リファラのない要求リファラのない要求リファラのない要求リファラのない要求の承認がの承認がの承認がの承認が必要である必要である必要である必要である� リファラがなくてもリファラがなくてもリファラがなくてもリファラがなくてもhttp要求を選択的に作成できる技術要求を選択的に作成できる技術要求を選択的に作成できる技術要求を選択的に作成できる技術があるがあるがあるがある:

� さらに、リファラはさらに、リファラはさらに、リファラはさらに、リファラはFlashでなりすましができるでなりすましができるでなりすましができるでなりすましができる

Martin Johns, UH, FB Inf, SVS, 2006 24

手法 1: 明示的な認証への移行

URLのリライトのリライトのリライトのリライト: セッショントークンは各セッショントークンは各セッショントークンは各セッショントークンは各URLに含まれるに含まれるに含まれるに含まれる� 注意注意注意注意: プロキシログプロキシログプロキシログプロキシログ/リファラを介したトークンの流出リファラを介したトークンの流出リファラを介したトークンの流出リファラを介したトークンの流出� ローカル攻撃を防ぐことはできないローカル攻撃を防ぐことはできないローカル攻撃を防ぐことはできないローカル攻撃を防ぐことはできない

� アプリケーションにより作成されたすべてのアプリケーションにより作成されたすべてのアプリケーションにより作成されたすべてのアプリケーションにより作成されたすべてのURLにはトークンが含にはトークンが含にはトークンが含にはトークンが含まれるまれるまれるまれる

フォームによるセッショントークンフォームによるセッショントークンフォームによるセッショントークンフォームによるセッショントークン� セッショントークンはセッショントークンはセッショントークンはセッショントークンは“隠れた隠れた隠れた隠れた”フォームフィールドを介して伝達フォームフィールドを介して伝達フォームフィールドを介して伝達フォームフィールドを介して伝達

されるされるされるされる� 注意注意注意注意: “Back”ボタンを壊す可能性があるボタンを壊す可能性があるボタンを壊す可能性があるボタンを壊す可能性がある

明示的・暗黙的明示的・暗黙的明示的・暗黙的明示的・暗黙的メカニズムのメカニズムのメカニズムのメカニズムの組み合わせ組み合わせ組み合わせ組み合わせ� 例例例例 クッキーとクッキーとクッキーとクッキーとURLのリライトのリライトのリライトのリライト� 使用されたフレームワークによるサポートが必要使用されたフレームワークによるサポートが必要使用されたフレームワークによるサポートが必要使用されたフレームワークによるサポートが必要� しかし、依然、しかし、依然、しかし、依然、しかし、依然、SIDの流出は問題となるだろうの流出は問題となるだろうの流出は問題となるだろうの流出は問題となるだろう

Martin Johns, UH, FB Inf, SVS, 2006 25

手法 2: マニュアルによる保護

反射型攻撃反射型攻撃反射型攻撃反射型攻撃:

� POST要求だけに対して状態変更要求の作成を許可する要求だけに対して状態変更要求の作成を許可する要求だけに対して状態変更要求の作成を許可する要求だけに対して状態変更要求の作成を許可する� ((((httpの発明者が意図していたとおり)の発明者が意図していたとおり)の発明者が意図していたとおり)の発明者が意図していたとおり)

� 一回のみ有効なフォームトークンを使用する(ノンス)一回のみ有効なフォームトークンを使用する(ノンス)一回のみ有効なフォームトークンを使用する(ノンス)一回のみ有効なフォームトークンを使用する(ノンス)� これにより、ウェブアプリケーションにより提供されたこれにより、ウェブアプリケーションにより提供されたこれにより、ウェブアプリケーションにより提供されたこれにより、ウェブアプリケーションにより提供されたHTMLのフォのフォのフォのフォ

ームがそもそもームがそもそもームがそもそもームがそもそもPOST要求の生成元であったことが確認できる要求の生成元であったことが確認できる要求の生成元であったことが確認できる要求の生成元であったことが確認できる

例例例例:

<form action="submit.cgi" method="POST">

<input type="text" name="foo">

<input type="hidden" name="nonce"

value="xulkjsf22enbsc"></form>

Martin Johns, UH, FB Inf, SVS, 2006 26

手法 2: マニュアルによる保護(II)

ローカル攻撃ローカル攻撃ローカル攻撃ローカル攻撃:

� すべてすべてすべてすべての海外コンテンツの海外コンテンツの海外コンテンツの海外コンテンツのミラーを作るのミラーを作るのミラーを作るのミラーを作る� 任意の任意の任意の任意のURLを認めないを認めないを認めないを認めない� ユーザのサーバーからの画像のみを提供するユーザのサーバーからの画像のみを提供するユーザのサーバーからの画像のみを提供するユーザのサーバーからの画像のみを提供する� 注意注意注意注意: 自分のコンピュータに攻撃者から任意のデータが保存され自分のコンピュータに攻撃者から任意のデータが保存され自分のコンピュータに攻撃者から任意のデータが保存され自分のコンピュータに攻撃者から任意のデータが保存され

ないようにすることないようにすることないようにすることないようにすること

Martin Johns, UH, FB Inf, SVS, 2006 27

手法 3: 自動保護

NoForge [1]

� リバースプロキシリバースプロキシリバースプロキシリバースプロキシ� ウェブアプリケーションとインターネットの間に位置するウェブアプリケーションとインターネットの間に位置するウェブアプリケーションとインターネットの間に位置するウェブアプリケーションとインターネットの間に位置する� httpレスポンスを解析し、すべての内部レスポンスを解析し、すべての内部レスポンスを解析し、すべての内部レスポンスを解析し、すべての内部URLに対してトークンをに対してトークンをに対してトークンをに対してトークンを

与える与える与える与える� トークンを含まない要求をドロップするトークンを含まない要求をドロップするトークンを含まない要求をドロップするトークンを含まない要求をドロップする� セッショントラッキングにクッキーを使用するアプリケーションセッショントラッキングにクッキーを使用するアプリケーションセッショントラッキングにクッキーを使用するアプリケーションセッショントラッキングにクッキーを使用するアプリケーション

のみ保護するのみ保護するのみ保護するのみ保護する

[1] Nenad Jovanovic, Engin Kirda and Christopher Kruegel, Preventing Cross Site

Request Forgery Attacks, IEEE International Conference on Security and Privacy in

Communication Networks (SecureComm), Baltimore, MD, August 2006,http://www.seclab.tuwien.ac.at/papers/noforge.pdf

Martin Johns, UH, FB Inf, SVS, 2006 28

内容

� ウェブアプリケーションの認証� XSRF / セッションライディング� サーバー側の対策� クライアント側の保護クライアント側の保護クライアント側の保護クライアント側の保護� 結論

Martin Johns, UH, FB Inf, SVS, 2006 29

RequestRodeo: 概念

� クライアント側のプロキシまたはブラウザ拡張クライアント側のプロキシまたはブラウザ拡張クライアント側のプロキシまたはブラウザ拡張クライアント側のプロキシまたはブラウザ拡張((((“RequestRodeo”))))

� 潜在的な不正要求の特定潜在的な不正要求の特定潜在的な不正要求の特定潜在的な不正要求の特定� 暗黙的な認証の排除暗黙的な認証の排除暗黙的な認証の排除暗黙的な認証の排除

“ブラウザの改善ブラウザの改善ブラウザの改善ブラウザの改善”

Martin Johns, UH, FB Inf, SVS, 2006 30

疑わしい要求の特定

� 要求の生成元によってその状態が決定する要求の生成元によってその状態が決定する要求の生成元によってその状態が決定する要求の生成元によってその状態が決定する� 定義定義定義定義: 許可許可許可許可された要求された要求された要求された要求

� 許可された要求のみが暗黙的な認証情報を持つことを許さ許可された要求のみが暗黙的な認証情報を持つことを許さ許可された要求のみが暗黙的な認証情報を持つことを許さ許可された要求のみが暗黙的な認証情報を持つことを許されるれるれるれる

要求の状態はブラウザによって決まる要求の状態はブラウザによって決まる要求の状態はブラウザによって決まる要求の状態はブラウザによって決まる

http要求は下記の場合のみ許可された要求許可された要求許可された要求許可された要求と分類される:– あるウェブページとのやりとり(例:リンクのクリック、フォ

ームの送信、またはJavaScriptを経る)によって作成された要求であり、かつ– 初めのページのURLと要求されたページのURLが“同一

生成元ポリシー“に準拠している

Martin Johns, UH, FB Inf, SVS, 2006 31

プロキシソリューション: httpレスポンスの処理

URLにトークンを加えるにトークンを加えるにトークンを加えるにトークンを加える� httpレスポンス内のレスポンス内のレスポンス内のレスポンス内のHTMLコードが処理されるコードが処理されるコードが処理されるコードが処理される� http要求を生成する可能性のある要素の特定要求を生成する可能性のある要素の特定要求を生成する可能性のある要素の特定要求を生成する可能性のある要素の特定� URLトークンによって、その要素の標的となるトークンによって、その要素の標的となるトークンによって、その要素の標的となるトークンによって、その要素の標的となるURLが強化されるが強化されるが強化されるが強化される� トークンはレスポンスのトークンはレスポンスのトークンはレスポンスのトークンはレスポンスのURLと共にテーブル内に保存されると共にテーブル内に保存されると共にテーブル内に保存されると共にテーブル内に保存される

� このようにプロキシは要求の生成元を決定このようにプロキシは要求の生成元を決定このようにプロキシは要求の生成元を決定このようにプロキシは要求の生成元を決定できるできるできるできる

“信頼できるリファラ”

� 各々の各々の各々の各々のhttp要求に要求に要求に要求にURLトークンがあるか否かがチェックされるトークンがあるか否かがチェックされるトークンがあるか否かがチェックされるトークンがあるか否かがチェックされる� トークンがある場合、その元となるトークンがある場合、その元となるトークンがある場合、その元となるトークンがある場合、その元となるURLが検索されるが検索されるが検索されるが検索される� 要求のドメインとその生成元が一致しない場合、暗黙的な認証情要求のドメインとその生成元が一致しない場合、暗黙的な認証情要求のドメインとその生成元が一致しない場合、暗黙的な認証情要求のドメインとその生成元が一致しない場合、暗黙的な認証情

報は排除される報は排除される報は排除される報は排除される

Martin Johns, UH, FB Inf, SVS, 2006 32

暗黙的な認証の排除

� クッキークッキークッキークッキー:

�“クッキークッキークッキークッキー”フィールドはすべて、フィールドはすべて、フィールドはすべて、フィールドはすべて、無許可の要求無許可の要求無許可の要求無許可の要求から排除されから排除されから排除されから排除されるるるる

�クッキーのドメイン値は考慮されなければならないクッキーのドメイン値は考慮されなければならないクッキーのドメイン値は考慮されなければならないクッキーのドメイン値は考慮されなければならない� http認証認証認証認証:

�ブラウザ拡張ブラウザ拡張ブラウザ拡張ブラウザ拡張: 無許可の要求に対する新たな認証の交渉のきっ無許可の要求に対する新たな認証の交渉のきっ無許可の要求に対する新たな認証の交渉のきっ無許可の要求に対する新たな認証の交渉のきっかけとなるかけとなるかけとなるかけとなる

�プロキシプロキシプロキシプロキシ: “認証ヘッダ認証ヘッダ認証ヘッダ認証ヘッダ”を排除する前にを排除する前にを排除する前にを排除する前にURLにトークンを加えにトークンを加えにトークンを加えにトークンを加えるるるる

� クライアント側のクライアント側のクライアント側のクライアント側のSSL:

�要求を送信する前に警告要求を送信する前に警告要求を送信する前に警告要求を送信する前に警告ウェブサイトウェブサイトウェブサイトウェブサイトを表示するを表示するを表示するを表示する�気づきにくい気づきにくい気づきにくい気づきにくい: ユーザは画像タグによる隠れた攻撃に気づきにユーザは画像タグによる隠れた攻撃に気づきにユーザは画像タグによる隠れた攻撃に気づきにユーザは画像タグによる隠れた攻撃に気づきに

くいくいくいくい

Martin Johns, UH, FB Inf, SVS, 2006 33

暗黙的な認証の排除(II)

IPによる認証による認証による認証による認証� 無許可の要求が認められるのはその対象が世界規模である場合の無許可の要求が認められるのはその対象が世界規模である場合の無許可の要求が認められるのはその対象が世界規模である場合の無許可の要求が認められるのはその対象が世界規模である場合の

みみみみ� このため、このため、このため、このため、“リフレクションサーバーリフレクションサーバーリフレクションサーバーリフレクションサーバー”が導入されるが導入されるが導入されるが導入される� リフレクションサーバーはリフレクションサーバーはリフレクションサーバーはリフレクションサーバーはDMZでホストされている(つまり内部でホストされている(つまり内部でホストされている(つまり内部でホストされている(つまり内部

ファイヤウォールの反対側にあることになる)ファイヤウォールの反対側にあることになる)ファイヤウォールの反対側にあることになる)ファイヤウォールの反対側にあることになる)� 無許可の要求を認める前に、プロキシはリフレクションサーバー無許可の要求を認める前に、プロキシはリフレクションサーバー無許可の要求を認める前に、プロキシはリフレクションサーバー無許可の要求を認める前に、プロキシはリフレクションサーバー

がその要求がその要求がその要求がその要求対象対象対象対象にアクセスできることを確認するにアクセスできることを確認するにアクセスできることを確認するにアクセスできることを確認する� チェックしたチェックしたチェックしたチェックしたIPのキャッシングによって、パフォーマンス低下をのキャッシングによって、パフォーマンス低下をのキャッシングによって、パフォーマンス低下をのキャッシングによって、パフォーマンス低下を

最小限に抑える最小限に抑える最小限に抑える最小限に抑える

�このようなリフレクションサーバーによってこのようなリフレクションサーバーによってこのようなリフレクションサーバーによってこのようなリフレクションサーバーによって“JavaScriptマルウェアマルウェアマルウェアマルウェア”からからからからも保護できるも保護できるも保護できるも保護できる

Martin Johns, UH, FB Inf, SVS, 2006 34

暗黙的な認証の排除: IPによる認証

内部ファイヤウォール内部ファイヤウォール内部ファイヤウォール内部ファイヤウォール

イントラネットウェブサーバー

RequestRodeo

悪意のあるサイト

リフレクションサーバー

HEAD

?OK

外部ファイヤウォール外部ファイヤウォール外部ファイヤウォール外部ファイヤウォール

DMZ

Martin Johns, UH, FB Inf, SVS, 2006 35

暗黙的な認証の排除: IPによる認証

内部ファイヤウォール内部ファイヤウォール内部ファイヤウォール内部ファイヤウォール

イントラネットウェブサーバー

RequestRodeo

悪意のあるサイト

リフレクションサーバー

?

外部ファイヤウォール外部ファイヤウォール外部ファイヤウォール外部ファイヤウォール

DMZHEAD

DENY

!!!!

Martin Johns, UH, FB Inf, SVS, 2006 36

導入

プロキシプロキシプロキシプロキシ [1]:� Pythonに導入に導入に導入に導入� “Twisted”フレームワークを使用フレームワークを使用フレームワークを使用フレームワークを使用� www.secologic.orgでリリース予定でリリース予定でリリース予定でリリース予定

ブラウザ拡張ブラウザ拡張ブラウザ拡張ブラウザ拡張:� Firefoxへの拡張への拡張への拡張への拡張� 開発中開発中開発中開発中

[1] "RequestRodeo: Client Side Protection against Session Riding“, Martin Johns and Justus Winter, in Proceedings of the OWASP Europe 2006Conference by Piessens, F. (ed.), Report CW448, Katholieke Universiteit Leuven, 2006

Martin Johns, UH, FB Inf, SVS, 2006 37

検討事項

慎重なアプローチ慎重なアプローチ慎重なアプローチ慎重なアプローチ:

� 接続を許可する接続を許可する接続を許可する接続を許可する� 暗黙的な認証を排除するのみとする暗黙的な認証を排除するのみとする暗黙的な認証を排除するのみとする暗黙的な認証を排除するのみとする� パブリックリソースに対する要求は阻止しないパブリックリソースに対する要求は阻止しないパブリックリソースに対する要求は阻止しないパブリックリソースに対する要求は阻止しない� サーバー側では微調整も効果的であるサーバー側では微調整も効果的であるサーバー側では微調整も効果的であるサーバー側では微調整も効果的である

制限制限制限制限:

� “ローカルローカルローカルローカル”攻撃からの保護はできない攻撃からの保護はできない攻撃からの保護はできない攻撃からの保護はできない� プロキシソリューションプロキシソリューションプロキシソリューションプロキシソリューション:

� NTLM / クライアント側のクライアント側のクライアント側のクライアント側のSSLは実施されないは実施されないは実施されないは実施されない

今後の課題今後の課題今後の課題今後の課題� XSS対策テクニックの追加対策テクニックの追加対策テクニックの追加対策テクニックの追加

Martin Johns, UH, FB Inf, SVS, 2006 38

内容

� ウェブアプリケーションの認証� XSRF / セッションライディング� サーバー側の対策� クライアント側の保護� 結論結論結論結論

Martin Johns, UH, FB Inf, SVS, 2006 39

結論

セッションライディングは問題である!セッションライディングは問題である!セッションライディングは問題である!セッションライディングは問題である!

正しく見えるコードも攻撃を受ける可能性があ正しく見えるコードも攻撃を受ける可能性があ正しく見えるコードも攻撃を受ける可能性があ正しく見えるコードも攻撃を受ける可能性がある!る!る!る!

プログラマプログラマプログラマプログラマ:

� できる限りノンスを使うできる限りノンスを使うできる限りノンスを使うできる限りノンスを使う

ユーザユーザユーザユーザ:

� ログアウトする!ログアウトする!ログアウトする!ログアウトする!

Martin Johns, UH, FB Inf, SVS, 2006 40

おわりに

ご清聴ありがとうございましたご清聴ありがとうございましたご清聴ありがとうございましたご清聴ありがとうございました

ご質問ご質問ご質問ご質問

ご意見ご意見ご意見ご意見

ははははありませんかありませんかありませんかありませんか?

Recommended