19

CSRF保護に関するDjangoのドキュメントには、次のように記載されています。

さらに、HTTPS リクエストの場合、CsrfViewMiddleware によって厳密なリファラー チェックが行われます。これは、HTTP 'Set-Cookie' ヘッダーが (残念ながら) 通信しているクライアントによって受け入れられるため、セッションに依存しないナンスを使用するときに HTTPS で発生する可能性のある中間者攻撃に対処するために必要です。 HTTPS の下のサイト。(Referer ヘッダーの存在は HTTP では十分に信頼できないため、HTTP 要求に対しては Referer チェックは行われません。)

この攻撃がどのように機能するかを視覚化するのに苦労しています。誰か説明してくれませんか?

更新:
Django doc の文言は、特定のタイプの中間者攻撃 (私が想定する成功した CSRF につながる) が存在することを暗示しているようです。 nonce など) であり、'Set-Cookie' ヘッダーの使用が含まれます。
そのため、その特定のタイプの攻撃がどのように機能するかを知りたかったのです。

4

4 に答える 4

5

攻撃者は、Set-Cookie を使用して CSRF Coo​​kie を設定し、POST フォーム データで一致するトークンを提供できます。サイトはセッション Cookie を CSRF Coo​​kie に関連付けていないため、CSRF トークン + Cookie が本物であるかどうかを判断する方法がありません (攻撃者は有効なペアを取得できるため、そのうちの 1 つのハッシュなどは機能しません)。サイトから直接、そのペアを攻撃に使用します)。

django プロジェクトから直接

(私はセッションに依存しないナンスを探しました。)

于 2011-05-20T18:21:57.830 に答える
2

そのような MitM 攻撃の 1 つについて、非常に詳細に説明します。以下は、要約および簡略化された適応です。

と仮定する:

  • 攻撃されたサイトはfoo.com です
  • 私たち (攻撃者) はすべてのリクエストを MitM できます
  • 一部のページは HTTP 経由で提供されます (例: http://foo.com/browse )
  • 一部のページは HTTPS 経由で提供され (例: https://foo.com/check_out )、それらのページはログイン Cookie (w/Secure セット) によって保護されています。これは、ユーザーのログイン Cookie を盗むことができないことを意味することに注意してください。
  • すべてのフォームは、フォーム パラメータをcsrftoken Cookie と比較することによって保護されます。django docs に記載されているように、「署名されている」かランダムなナンスであるかは、この攻撃には関係ありません。

有効な CSRF トークンを取得する

MitM は、そのトークンを使用して、攻撃者が制御する POST to HTTPS ページを強制します。

HTTP サービスのページ (例: http://foo.com/browse ) を変更して、HTTPS POST エンドポイント (例: http://foo.com/check_out )に送信する自動送信フォームを作成します。また、トークンと一致するように CSRF Coo​​kie を設定します。

<script type="text/javascript">
  function loadFrame(){
    var form=document.getElementById('attackform');
    // Make sure that the form opens in a hidden frame so user doesn't notice
    form.setAttribute('target', 'hiddenframe');
    form.submit();
  }
</script>

<form name="attackform" id="attackform" style="display:none" method="POST" 
      action="http://foo.com/check_out">
  <input type="text" name="expensive-thing" value="buy-it-now"/>
  <input type="text" name="csrf" value="csrf-token-value"/>
</form>

<iframe name="hiddenframe" style="display:none" id="hiddenframe"></iframe>
<XXX onload="loadFrame();">
于 2014-07-08T04:44:08.167 に答える
0

中間者攻撃は非常に単純化した言葉で説明されています。2 人が互いに話していると想像してください。お互いに話し始める前に、双方向通信を開始する前に握手をします。第三者が 2 人のコミュニケーション方法を分析し始めたとき (彼らのマンネリズムは何ですか?、彼らはお互いに話す前に特別な握手をしますか?、お互いに話すのが好きな時間はいつですか、など) 、第三者は、会話に自分自身を埋め込むことができるところまでコミュニケーションを形成し、元の2人がお互いに話していると考えて仲介者として行動することができます.

ここで、コンセプトをオタク レベルに落とし込みます。PC、ルーター、プログラムなどがネットワークに対して別のノードと通信する場合、認証、確認、またはその両方によって双方向通信が行われます。サードパーティが必要なイベントのシーケンス (セッション ID、セッション Cookie、トラフィックの確認/転送/終了の次のシーケンスなど) を判断できる場合、悪意のあるサードパーティは自身のトラフィックを正当なノードとしてミラーリングし、正当なノードの 1 つにトラフィックをフラッディングし、適切な一連のイベントがダウンした場合、悪意のある 3 番目のノードが正当なノードとして受け入れられます。

于 2011-05-20T19:57:32.353 に答える