Classic Load Balancer에 대한 동기화 해제 완화 모드 구성 - Elastic Load Balancing

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를 업데이트하려면
  1. https://console.aws.amazon.com/ec2/에서 Amazon EC2 콘솔을 엽니다.

  2. 탐색 창의 Load Balancing 아래에서 로드 밸런서를 선택합니다.

  3. 로드 밸런서 이름을 선택하여 세부 정보 페이지를 엽니다.

  4. 속성성(Attributes) 탭에서 편집(Edit)을 선택합니다.

  5. 로드 밸런서 속성 편집 페이지의 트래픽 구성에서 방어적 - 권장,가장 엄격함 또는 모니터링을 선택합니다.

  6. 변경 사항 저장을 선택합니다.

AWS CLI를 사용하여 Desync Mitigation Mode를 업데이트하려면

elb.http.desyncmitigationmode 속성을 monitor, defensive 또는 strictest로 설정하여 modify-load-balancer-attributes 명령을 사용하세요.

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" } ] }