Home Blogs 리셋, 유출, DDoS 및 숨겨진 CVE 이야기
Applications

리셋, 유출, DDoS 및 숨겨진 CVE 이야기

About The Author

Outline

2023년 9월 29일에 원본 게시 | 2023년 10월 10일에 업데이트

저자: 데이브 앤드류스, 마커스 힐덤, 세르지오 루이즈

업데이트: HTTP/2 빠른 리셋 공격 – CVE-2023-44487

아래의 간략한 초기 블로그에 이어 Edgio는  CVE-2023-44487 – HTTP/2 Rapid Reset Attack의 정의와 책임 있는 공개에 대해 업계의 동료들과 협력했습니다.

근본적인 문제는 HTTP/2 서버의 많은 구현에 영향을 미치므로 공격의 의미는 Edgio가 이전에 깨달은 것보다 훨씬 광범위합니다. Edgio는 공용 인프라를 실행하는 모든 고객에게 가용성이 확보되는 즉시 패치된 버전의 서버로 업그레이드하거나 일시적으로 HTTP/2를 비활성화할 것을 권고합니다.

Edgio는 또한 HTTP/2 종료를 수행하고 HTTP/1.1을 고객의 인프라에 다시 프록시하여 고객의 위험을 완화하는 데 도움을 줄 수 있습니다. 이 프로세스를 시작하려면 당사에 연락하십시오.

2023년 8월 28일 오후 6시 43분(태평양 표준시), Edgio 엔지니어들은 에지 서버의 메모리 사용률, 여러 대형 웹 자산에 대한 요청 속도, 에지에서 생성되는 로그 양이 증가하는 것을 목격했습니다.

곧 공격으로 확인된 트래픽은 레이어 7 로드 밸런서의 로그에서만 관찰할 수 있었기 때문에 참신했습니다. Edgio는 사용자 지정 HTTP 캐싱 및 프록시 엔진인 Sailfish를 Layer 7 로드 밸런서(“프런트엔드”라고 함)와 캐싱 및 프록시 레이어(“백엔드”)로 실행합니다. 이를 통해 두 계층에서 공통 계측 및 로깅을 수행할 수 있으므로 비교하기가 쉽습니다.

프런트엔드 로그를 살펴보면 공격을 나타내는 몇 가지 흥미로운 동작이 관찰되었습니다.

  1. 단일 클라이언트에 대한 요청 수는 평소보다 훨씬 많았습니다. 공격 중에 단일 소켓에서 20,000개가 넘는 요청이 발생하는 것을 목격했습니다.
  2. 클라이언트로 전송되는 바이트가 없습니다.
  3. 처음부터 끝까지 총 요청 시간은 백엔드에 대한 새 프록시 연결을 시작하는 데 걸린 1밀리초에서 2밀리초 사이였습니다.
  4. 이 동작을 나타내는 모든 연결은 HTTP/2 연결이었습니다.

이러한 초기 관찰을 바탕으로 공격자가 HTTP/2의 RST_STREAM 프레임을 사용하여 요청을 포기하고 동일한 소켓에서 새로운 요청을 매우 빠르게 시작한다는 이론을 세웠습니다.

그 후, 우리는 세 가지 다른 작업 흐름으로 우리의 노력을 나누었습니다 :

  1. 근본 원인을 입증할 수 있는 nghttp2라는 사용 중인 HTTP/2 라이브러리에 영향을 미치는 잠재적인 문제를 조사합니다.
  2. 완화를 위해 이 동작의 기본을 노출하는 Sailfish 변수를 작성합니다.
  3. 새로운 메트릭, 대시보드 및 알림을 구축하여 이러한 유형의 공격을 보다 신속하게 식별합니다.

1. 사절 … 하지만 정말 nghttp2

작은 검색 후, 우리는이 문제에서 발견 Envoy, Edgio 에지에서 사용하지 않는 서비스 프록시, 그리고 해당 CVE. 차이점에 대한 심층적 인 검토를 통해 우리는이 문제가 Envoy뿐만 아니라 실제로 우리가 사용하는 nghttp2에 있다는 것을 깨달았습니다.

nghttp2에 대한 풀 요청포인트 태그 릴리스가 공개 직후 릴리스되어 근본적인 문제를 해결했습니다. nghttp2에 대해 할당된 특정 CVE가 없다는 것은 우리가 사용하는 주요 소프트웨어의 취약점을 추적하는 데 사용하는 자동화된 CVE 검사 시스템이 처음에 이 문제를 놓쳤음을 의미했습니다.

우리는 즉시 이러한 종속성을 업그레이드하고 배포하는 프로세스를 시작했으며, 이는 몇 주 전에 완료되었습니다.

2. 요청 재설정 비율

동시에, 우리는 성능 또는 안정성 문제를 방지하기 위해 즉시 조치를 취할 수 있도록 Sailfish 자체 내에서 프로그래밍 방식으로 공격 행동을 식별했습니다. 클라이언트가 재설정한 특정 연결에 대한 요청 비율을 추적하는 구성 변수(H2_REMOTE_RESET_PERCENT)를 Sailfish 내에 구현하기로 결정했습니다.

또한 단일 연결의 요청 횟수에 대한 기존 변수와 함께 요청 임계값을 초과하고 구성된 요청 비율을 초과하여 다시 설정한 클라이언트에 대한 연결을 즉시 닫는 규칙을 만들 수 있었습니다. 이 구성은 일반적인 운영 장애 안전 장치로 래핑되어 특정 위치 또는 고객에 대해 비활성화할 수 있습니다.

의사 코드에서 이것은 다음과 같이 보입니다.

				
					if request_count > 1000 and
  h2_remote_reset_percent > 99 and
  pop ~ ".*" and
  customer_id not in () then

  connection.silent_close();

fi
				
			

고객의 트래픽에 의도하지 않은 영향을 방지하기 위해 신중한 검증을 거친 후 새로운 규칙이 배포되었으며 Edgio 엔지니어는 추가 이상 징후를 계속 모니터링했습니다.

3. 조사 및 비율

이러한 종류의 공격이 언제 발생하는지 보다 빠르게 식별하기 위해, 우리는 한 위치에서 클라이언트로부터 수신된 HTTP/2 RST_STREAM 프레임의 수를 기반으로 새로운 대시보드와 알림을 구성했습니다. 이것은 메모리 가용성 및 상태 점검에 대한 단일 뷰와 함께 다음과 같은 특정 유형의 공격으로 인한 잠재적 성능 저하의 명확한 신호를 제공했습니다.

그러나 우리는 전방 공격에만 특별히 영향을 미칠 수있는 다른 잠재적 공격 유형에 대해 우려했습니다. 이러한 일반적인 우려를 가시적으로 파악하기 위해 특정 위치의 프런트엔드와 백엔드 간 트랜잭션 비율을 추적하기 시작했습니다. 이 비교의 기본 데이터는 오랫동안 모니터링의 핵심 부분이었습니다.

정상적인 동작을 살펴보면 프런트 엔드에 도착하는 각 요청이 단일 백엔드 요청으로 변환되므로 예상 비율인 1에 대한 강한 밴딩을 볼 수 있습니다. 또한 0.5 및 0.25에 가까운 밴딩도 볼 수 있습니다. 이 밴딩은 주로 휴면 테스트 위치에서 발생합니다. 퍼지 및 상태 검사와 같은 시스템은 백엔드에서 더 많은 내부 트랜잭션을 처리하도록 합니다.

그러나 초기 공격 동안이 비율에 미치는 영향을 명확하게 볼 수 있습니다.

현재 경고는 비율이 특정 값을 초과할 때 트리거되도록 구성되어 있어 Edgio 지원 엔지니어가 위험 완화 단계를 선별하고 시작할 수 있는 인시던트를 생성합니다.

요약

이것은 널리 사용되는 라이브러리에서 비교적 최근에 공개된 취약점을 활용하는 흥미로운 새로운 공격 유형이었습니다. 다행히도 Edgio 팀은 운영 인식을 개선하고 공격의 구체적인 근본 원인을 완화하며 이러한 종류의 공격에 대해 일반적이고 조정 가능한 범용 완화 조치를 취하기 위해 신속하게 노력했습니다.

물론, 우리는 항상 이러한 개선을 위해 노력하고 있습니다. 예를 들어, 지문을 통해 악의적인 행위자를 식별하는 새로운 방법과, 이 작업을 보안 제품군에 통합하여 보다 지속적인 차단 및 속도 제한을 허용합니다.

Edgio에서 결코 지루한 순간이 아닙니다.

수상 경력에 빛나는 Edgio의 WAAP(Web Application and API Protection) 솔루션에 포함된 Akamai의 전체 스펙트럼 DDoS 방어 기능에 대해 자세히 알아보려면 여기 를 방문하여 전문가에게 문의하십시오.