HTTP Desync 攻撃では、要求の密輸と呼ばれる手法を使用して、悪意のあるペイロードで被害者の要求を修正します。NSX Advanced Load Balancer プラットフォームは、Web アプリケーションのフロントエンドとして使用されます。このトピックでは、NSX Advanced Load Balancer が攻撃に対して脆弱でない理由と、プラットフォーム内のオンボード ソリューションを使用して攻撃パターンをモニタリングする方法について説明します。

要求の密輸の詳細については、「HTTP 要求の密輸」を参照してください。

HTTP Desync 攻撃に対する NSX Advanced Load Balancer の脆弱性

デフォルトの構成は、攻撃を阻止し、NSX Advanced Load Balancer を通じたこのタイプの要求密輸を許可しません。

NSX Advanced Load Balancer は、ハイパーテキスト転送プロトコル – HTTP/1.1 の要件(「Transfer-Encoding ヘッダー フィールドと Content-Length ヘッダー フィールドを含むメッセージを受信した場合、後者は無視する必要があります」)を超えています。

要求に content-length ヘッダーと transfer-encoding ヘッダーの両方が含まれている場合、NSX Advanced Load Balancer は、要求を独自の処理のために content-length ヘッダーを無視するだけでなく、要求を送信する前に競合するヘッダーの 1 つも削除します。バッファリングを要求本文の検査に使用できるかどうかの構成設定に応じて、NSX Advanced Load Balancer は本文のチャンク解除後に正しいサイズの content-length ヘッダー、または transfer-encoding ヘッダーをアップストリーム サーバに送信します。ただし、両方のヘッダーを送信することはありません。

ストリーミング モードでのデフォルトの動作の例。Content-length ヘッダーが削除されました。



バッファリング モードでのデフォルトの動作の例。Transfer-encoding ヘッダーが削除され、完全な要求がバッファリングされ、content-length が調整されます。



ログの記録

Content-Length ヘッダーと Transfer-Encoding:Chunked ヘッダーの両方を含む HTTP 要求を受信すると、「クライアントが、チャンク化された Transfer-Encoding ヘッダーと Content-Length ヘッダーの両方を含む要求を送信しました」というメッセージを含む重要なアプリケーション ログが生成されます。

要求のモニタリングとフル ブロックの有効化

NSX Advanced Load Balancer 内で攻撃をモニタリングするには、次の 2 つの方法があります。

  1. DataScript を使用:

    この DataScript を仮想サービスに追加すると、攻撃を含む要求がログに記録され、クライアントへの接続が終了します。

    content_length = avi.http.get_header( 'Content-Length')
     
    if content_length ~= nil then
      transfer_encoding = avi.http.get_header( 'Transfer-Encoding')
      if transfer_encoding ~= nil and string.match(transfer_encoding, "chunked") then
        avi.vs.log('HTTP desync attack detected. Have Content-Length: ' .. content_length .. ' and Transfer-Encoding: ' .. transfer_encoding)
        avi.http.close_conn()
      end
    end
  2. 最新の CRS バージョンの使用:

    CRS バージョン CRS-2019-2 以降、この攻撃を検出する CRS にルール 4022010 があります。HTTP desync 攻撃を回避するために、現在の CRS バージョンで WAF を有効にすることをお勧めします。

HTTP セキュリティ ポリシーによるブロック

この種の要求を最も効果的な方法でブロックするには、次に示すように、HTTP セキュリティ ポリシーのルールを [接続の終了] アクションとともに使用することです。



これにより、次のログ ビューが表示されます。ログに示している重要な点は、NSX Advanced Load Balancer が接続を終了していることです。同じ TCP 接続を経由する次の要求はドロップされます。これは、多くの場合、望ましい重大な動作です。