Classic Load Balancer の desync 軽減モードの設定
desync 軽減モードは、HTTP Desync に伴う問題からアプリケーションを保護します。ロードバランサーは、脅威レベルに基づいて各リクエストを分類します。安全なリクエストは許可し、指定した軽減モードで指定されたリスクに対しては軽減処理を行います。Desync 軽減モードの種類は、モニタリングモード、防御モード、厳密モードです。デフォルトは防御モードで、アプリケーションの可用性を維持しながら、HTTP Desync に対する永続的な軽減を提供します。厳密モードに切り替えると、アプリケーションで RFC 7230 に準拠するリクエストだけを受信できます。
http_desync_guardian ライブラリは、HTTP リクエストを分析して、HTTP Desync 攻撃を防ぎます。詳細については、github の HTTP Desync Guardian
ヒント
この設定は、Classic Load Balancers にのみ適用されます。Application Load Balancer に関する情報については、「Application Load Balancers の Desync 軽減モード」を参照してください。
分類
分類は次のとおりです。
-
Compliant — リクエストは RFC 7230 に準拠しており、セキュリティ上の既知の脅威はありません。
-
Acceptable — リクエストは RFC 7230 に準拠していませんが、セキュリティ上の既知の脅威はありません。
-
Ambiguous — リクエストは RFC 7230 に準拠しておらず、ウェブサーバーやプロキシごとに処理方法が異なる場合、リスクが生じます。
-
Severe — リクエストは高いセキュリティリスクをもたらしています。ロードバランサーはリクエストをブロックし、クライアントに 400 レスポンスを提供し、クライアント接続を閉じます。
次のリストでは、分類別の問題について説明します。
Acceptable
-
ヘッダーに ASCII 以外の文字または制御文字が含まれています。
-
リクエストバージョンに不正な値が含まれています。
-
GET または HEAD リクエストの値を 0 とする Content-Length ヘッダーがあります。
-
リクエスト URI に URL エンコードされていないスペースが含まれています。
Ambiguous
-
リクエスト URI に制御文字が含まれています。
-
リクエストに Transfer-Encoding ヘッダーと Content-Length ヘッダーの両方が含まれています。
-
同じ値を持つ複数の Content-Length ヘッダーがあります。
-
ヘッダーが空であるか、スペースのみを含む行があります。
-
一般的なテキスト正規化技術を使用して、Transfer-Encoding または Content-Length に正規化できるヘッダーがあります。
-
GET または HEAD リクエストには Content-Length ヘッダーがあります。
-
GET または HEAD リクエストには、Transfer-Encoding ヘッダーがあります。
Severe
-
リクエスト URI に NULL 文字またはキャリッジリターンが含まれています。
-
Content-Length ヘッダーに解析できない値または無効な数値が含まれています。
-
ヘッダーに NULL 文字またはキャリッジリターンが含まれています。
-
Transfer-Encoding ヘッダーに不正な値が含まれています。
-
リクエストメソッドの形式が正しくありません。
-
リクエストバージョンの形式が正しくありません。
-
異なる値を持つ複数の Content-Length ヘッダーがあります。
-
複数の Transfer-Encoding: chunked ヘッダーがあります。
リクエストが RFC 7230 に準拠していない場合、ロードバランサーは DesyncMitigationMode_NonCompliant_Request_Count メトリクスを増分します。詳細については、「Classic Load Balancer のメトリクス」を参照してください。
モード
次の表は、Classic Load Balancers で、リクエストがモードと分類に基づきどのように処理されるかを示しています。
| 分類 | モニタリングモード | 防御モード | 厳密モード |
|---|---|---|---|
| 準拠 | 許可 | 許可 | 許可 |
| Acceptable | 許可 | 許可 | ブロック |
| Ambiguous | 許可 | 許可¹ | ブロック |
| Severe | 許可 | ブロック | ブロック |
¹ リクエストはルーティングされますが、クライアントとターゲットの接続は閉じられます。
desync 軽減モードの変更
コンソールを使用して desync 軽減モードを更新するには
Amazon EC2 コンソール (https://console.aws.amazon.com/ec2/
) を開きます。 -
ナビゲーションペインの [ロードバランシング] で [ロードバランサー] を選択します。
-
ロードバランサーの名前を選択して、その詳細ページを開きます。
-
[属性] タブで、[編集] を選択します。
-
[ロードバランサー属性の編集] ページの [トラフィックの設定] で、[防御的 - 推奨]、[最も厳格]、または [モニタリング] を選択します。
-
[Save changes] (変更の保存) をクリックします。
AWS CLI を使用して Desync 軽減モードを更新するには
modify-load-balancer-attributes コマンドを、elb.http.desyncmitigationmode 属性に monitor、defensive、strictest のいずれかを設定しながら使用します。
aws elb modify-load-balancer-attributes --load-balancer-namemy-load-balancer--load-balancer-attributes file://attribute.json
attribute.json の内容は次のとおりです。
{ "AdditionalAttributes": [ { "Key": "elb.http.desyncmitigationmode", "Value": "strictest" } ] }