Classic Load Balancer の desync 軽減モードの設定 - Elastic Load Balancing

Classic Load Balancer の desync 軽減モードの設定

desync 軽減モードは、HTTP Desync に伴う問題からアプリケーションを保護します。ロードバランサーは、脅威レベルに基づいて各リクエストを分類します。安全なリクエストは許可し、指定した軽減モードで指定されたリスクに対しては軽減処理を行います。desync 軽減モードの種類は、モニタリングモード、防御モード、厳密モードです。デフォルトは防御モードで、アプリケーションの可用性を維持しながら、HTTP Desync に対する永続的な軽減を提供します。厳密モードに切り替えると、アプリケーションで RFC 7230 に準拠するリクエストだけを受信できます。

http_desync_guardian ライブラリは、HTTP リクエストを分析して、HTTP Desync 攻撃を防ぎます。詳細については、github の「HTTP Desync Guardian」を参照してください。

分類

分類は次のとおりです。

  • 準拠 — リクエストは RFC 7230に準拠しており、セキュリティ上の既知の脅威はありません。

  • Acceptable — リクエストは RFC 7230 に準拠していませんが、セキュリティ上の既知の脅威はありません。

  • Ambiguous — リクエスト RFC 7230 に準拠しておらず、ウェブサーバーやプロキシごとに処理方法が異なる場合、リスクが生じます。

  • Severe — リクエストはセキュリティ上の高リスクをもたらします。ロードバランサーはリクエストをブロックし、クライアントに 400 レスポンスを提供し、クライアント接続を閉じます。

次のリストでは、分類別の問題について説明します。

許容可能

  • ヘッダーに ASCII 以外の文字または制御文字が含まれています。

  • リクエストバージョンに不正な値が含まれています。

  • GET または HEAD リクエストの値を 0 とする Content-Length ヘッダーがあります。

  • リクエスト URI に URL エンコードされていないスペースが含まれています。

あいまい

  • リクエスト URI に制御文字が含まれています。

  • リクエストに Transfer-Encoding ヘッダーと Content-Length ヘッダーの両方が含まれています。

  • 同じ値を持つ複数の Content-Length ヘッダーがあります。

  • ヘッダーが空であるか、スペースのみを含む行があります。

  • 一般的なテキスト正規化技術を使用して、Transfer-Encoding または Content-Length に正規化できるヘッダーがあります。

  • GET または HEAD リクエストに対して定義された Content-Length ヘッダーがありません。

  • GET または HEAD リクエストに対して定義された Transfer-Encoding ヘッダーがありません。

重大

  • リクエスト URI に NULL 文字またはキャリッジリターンが含まれています。

  • Content-Length ヘッダーに解析できない値または無効な数値が含まれています。

  • ヘッダーに NULL 文字またはキャリッジリターンが含まれています。

  • Transfer-Encoding ヘッダーに不正な値が含まれています。

  • リクエストメソッドの形式が正しくありません。

  • リクエストバージョンの形式が正しくありません。

  • 異なる値を持つ複数の Content-Length ヘッダーがあります。

  • 複数の Transfer-Encoding: chunked ヘッダーがあります。

リクエストが RFC 7230 に準拠していない場合、ロードバランサーは DesyncMitigationMode_NonCompliant_Request_Count メトリクスを増分します。詳細については、「Classic Load Balancer のメトリクス」を参照してください。

モード

次の表は、クラシックロードバランサー でモードと分類に基づいてリクエストを処理する方法を示しています。

分類 モニタリングモード 防御モード 厳密モード
準拠 許可 許可 許可
Acceptable 許可 許可 ブロック
Ambiguous 許可 許可 ¹ ブロック
Severe 許可 ブロック ブロック

¹ リクエストをルーティングしますが、クライアントとターゲットの接続を閉じます。

desync 軽減モードの変更

コンソールを使用して desync 軽減モードを更新するには

  1. https://console.aws.amazon.com/ec2/ で Amazon EC2 コンソールを開きます。

  2. ナビゲーションペインの [LOAD BALANCING] で [Load Balancers] を選択します。

  3. ロードバランサーを選択します。

  4. [説明] タブで、[Configure desync mitigation mode (desync 軽減モードの設定)] を選択します。

  5. [Configure desync mitigation mode (desync 軽減モードの設定)] ページで、[Monitor (モニタリング)]、[Defensive (防御)]、[Strictest (厳密)] のいずれかを選択します。

  6. [Save] を選択します。

AWS CLI を使用して desync 軽減モードを更新するには

modify-load-balancer-attributes コマンドを使用します。この場合、elb.http.desyncmitigationmode 属性は monitordefensivestrictest のいずれかに設定します。

aws elb modify-load-balancer-attributes --load-balancer-name my-load-balancer --load-balancer-attributes file://attribute.json

attribute.json の内容は次のとおりです。

{ "AdditionalAttributes": [ { "Key": "elb.http.desyncmitigationmode", "Value": "strictest" } ] }