2013-04-17 12 views
14

シンクロナイザートークンパターンを使用してCSRF(CSRFはクロスサイトリクエスト偽装を意味する)を防止することについて読んできましたが、実際にどのように安全であるかはわかりません。シンクロナイザートークンパターンを使用してCSRFを安全に保護する方法は?

のは、私は2つのURLで偽の銀行サイトfakebank.comを持っているとしましょう:

  • fakebank.com/withdrawForm.html - 撤退
  • を行うには、このURLにPOST - 撤退お金のフォーム
  • fakebank.com/doWithdrawを表示GETリクエストセキュリティ上の欠陥の

私の理解では、maliciousSite.comfakebank.com/doWithdrawにPOSTリクエストを偽装できるということです、そしてあなたが現在fakebankにログインしている場合、POSTは成功するでしょう。

シークレットコードをfakebank.com/withdrawForm.htmlに埋め込むシンクロナイザートークンパターンを実装しています。 maliciousSite.comそのフォームのGETリクエストを偽装し、html結果を解析し、トークンを取得してから、そのトークンでPOSTリクエストを作成できませんか?

これは、fakebank.comがHTTPリファラーまたはオリジンをチェックしていないか、またはmaliciousSite.comがリファラー/オリジンがfakebank.comであることをうまく偽装していることを前提としています。

答えて

18

理由は、要求がmaliciousSite.comでユーザーのブラウザではなく、サーバーによって行われていることです。 fakebank.comから返されたすべてのデータは、maliciousSite.comのサーバーではなく、ユーザーのブラウザにが返されます。 maliciousSite.comがGETを実行してトークンを取得した場合、トークンはユーザーに発行されたトークンとは異なるトークンになります。 maliciousSite.comは、同じドメインの制限があるため、このCookieをユーザーのブラウザに設定してfakebank.comに送信することはできません。

CSRF POST攻撃は、適切に形成されたPOST要求を使用して、ユーザのブラウザをリクエストしてfakebank.com/withdrawForm.htmlに直接トリックすることによって機能します。 fakebank.comのサーバーは、POSTのリクエストをうまく実行し、POST本文(maliciousSite.comに置かれた攻撃者に属する宛先アカウントを含む)で提供されるパラメータを使用して資金を移転します。 maliciousSite.comのサーバは、何らかの方法で漏らされていない限り、maliciousSite.comが知ることができないこれらのCSRFトークンをfakebank.comが使用している場合を除き、処理が行われたため返されたデータを見る必要はありません。それのための)。 fakebank.comがCSRFトークンを使用している場合、maliciousSite.comはトークンがないことを示すPOST要求を提出し、潜在的なCSRF攻撃が進行中であることを示します。

この方法の脆弱性には、十分に秘密にされておらず、何らかの方法で漏洩しているCSRFトークンを使用することが含まれます。また、CSRFトークンが十分にランダムでない場合、maliciousSite.comはそれを推測することができます。また、ブラウザが同じドメインポリシーを適用することに弱点がある場合、これが悪用される可能性があります。一般に、現代のブラウザはこれに脆弱ではありません。

これが不十分な説明である場合は教えてください。私はそれを少し良く説明しようとします。

+2

攻撃を開始するためにユーザーのブラウザにJavaScriptを注入できるのであれば、GET要求を行うjqueryを単純に埋め込んで解析し、POSTを同じ '

2

これがまさにポイントです。ブラウザのSame Origin Policyは、GET他のサイトへのリクエストを許可していません。したがって、ブラウザ内でJavasciptを使用するだけで、別のサイトからCSRFトークンを取得することはできません。これは安全である、とmaliciousSite.comは、単に、GETを行うトークンを盗み、その後POSTを行うことができない理由

関連する問題