Classic Load Balancer에 대한 동기화 해제 완화 모드 구성
Desync Mitigation Mode는 HTTP Desync로 인한 문제로부터 애플리케이션을 보호합니다. 로드 밸런서는 위협 수준에 따라 각 요청을 분류하고 안전한 요청을 허용한 다음 지정한 완화 모드에서 지정한 대로 위험을 완화합니다. Desync Mitigation Mode는 Monitor, Defensive 또는 Strictest 모드입니다. 기본값은 Defensive 모드입니다. 이 모드는 애플리케이션의 가용성을 유지하면서 HTTP Desync에 대한 지속적인 완화를 제공합니다. 애플리케이션에서 RFC 7230을 준수하는 요청만 수신하도록 Strictest 모드로 전환할 수 있습니다.
http_desync_guardian 라이브러리는 HTTP Desync 공격을 방지하기 위해 HTTP 요청을 분석합니다. 자세한 내용은 github의 HTTP Desync Guardian
작은 정보
이 구성은 Classic Load Balancer에만 적용됩니다. Application Load Balancer에 적용되는 자세한 내용은 Application Load Balancers에 대한 동기화 해제 완화 모드를 참조하세요.
분류
분류는 다음과 같습니다.
-
규정 준수 - 요청이 RFC 7230을 준수하며 알려진 보안 위협이 없습니다.
-
허용 가능 - 요청이 RFC 7230을 준수하지 않지만 알려진 보안 위협이 없습니다.
-
모호 - 요청이 RFC 7230을 준수하지 않지만 다양한 웹 서버와 프록시가 다르게 처리할 수 있으므로 위험을 초래합니다.
-
심각 - 요청이 높은 보안 위험을 초래합니다. 로드 밸런서는 요청을 차단하고 클라이언트에 대해 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 지표 섹션을 참조하세요.
Modes
다음 표에서는 Classic Load Balancer가 모드 및 분류를 기준으로 요청을 처리하는 방법에 대해 설명합니다.
| Classification | Monitor 모드 | Defensive 모드 | Strictest 모드 |
|---|---|---|---|
| 규정 준수 | Allowed | 허용됨 | Allowed |
| 허용 가능 | Allowed | Allowed | 차단됨 |
| 모호 | Allowed | 허용¹ | 차단됨 |
| 심각 | Allowed | 차단됨 | 차단됨 |
¹ 요청을 라우팅하지만 클라이언트 연결과 대상 연결을 종료합니다.
Desync Mitigation Mode 수정
콘솔을 사용하여 Desync Mitigation Mode를 업데이트하려면
https://console.aws.amazon.com/ec2/
에서 Amazon EC2 콘솔을 엽니다. -
탐색 창의 Load Balancing 아래에서 로드 밸런서를 선택합니다.
-
로드 밸런서 이름을 선택하여 세부 정보 페이지를 엽니다.
-
속성성(Attributes) 탭에서 편집(Edit)을 선택합니다.
-
로드 밸런서 속성 편집 페이지의 트래픽 구성에서 방어적 - 권장,가장 엄격함 또는 모니터링을 선택합니다.
-
변경 사항 저장을 선택합니다.
AWS CLI를 사용하여 Desync Mitigation Mode를 업데이트하려면
elb.http.desyncmitigationmode 속성을 monitor, defensive 또는 strictest로 설정하여 modify-load-balancer-attributes 명령을 사용하세요.
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" } ] }