F5 NGINX 제품에 영향을 미치는 HTTP/2 Rapid Reset 공격

F5 에코시스템 | 2023년 10월 10일

이 블로그 게시물에서는 최근 발견된 HTTP/2 프로토콜 관련 취약점을 중점적으로 다룹니다. 특정 조건에서 이 취약점이 악용되면 HTTP/2 사양의 서버 측 기능을 구현하는 NGINX Open Source, NGINX Plus 및 관련 제품을 대상으로 서비스 거부 공격이 실행될 수 있습니다. 이 공격으로부터 시스템을 보호하려면 NGINX 구성을 즉시 업데이트하는 것이 좋습니다.

HTTP/2 스트림 재설정의 문제점

서버와 연결을 설정한 후 HTTP/2 프로토콜을 사용하면 클라이언트가 데이터 교환을 위해 여러 스트림을 동시에 시작할 수 있습니다. 이전 버전의 프로토콜과 달리, 최종 사용자가 페이지를 벗어나거나 다른 이유로 데이터 교환을 중단하려는 경우 HTTP/2는 스트림을 취소하는 방법을 제공합니다. 이를 위해 서버에 RST_STREAM 프레임을 전송하여 서버가 불필요한 작업을 수행하지 않도록 합니다.

이 취약점은 이미 설정된 연결을 통해 다수의 HTTP/2 스트림을 시작한 후 빠르게 취소하여 서버의 최대 동시 스트림 수 제한을 우회하는 방식으로 악용됩니다. 이는 들어오는 스트림이 후속 스트림이 도착하는 속도보다 더 빠르게 재설정되기 때문에 발생하며, 클라이언트는 설정된 임계값에 도달하지 않고도 서버에 과부하를 일으킬 수 있습니다.

NGINX에 미치는 영향

성능 및 리소스 사용량을 고려하여 NGINX는 동시 스트림 수를 기본적으로 128개로 제한합니다(참조: http2_max_concurrent_streams). 또한 네트워크와 서버 성능 간의 균형을 최적화하기 위해 NGINX는 HTTP 연결 유지 기능을 사용하여 클라이언트가 기본적으로 최대 1,000개의 요청까지 HTTP 연결을 유지할 수 있도록 합니다(참조: keepalive_requests).

NGINX는 기본 keepalive 제한을 적용하여 이러한 유형의 공격을 방지합니다. 이 제한을 우회하기 위해 추가 연결을 생성하면 표준 레이어 4 모니터링 및 경고 도구를 통해 악의적 행위자가 드러납니다.

그러나 NGINX의 keepalive 값이 기본값 및 권장 설정보다 훨씬 높게 구성된 경우, 공격으로 인해 시스템 리소스가 고갈될 수 있습니다. 스트림 재설정이 발생하면 HTTP/2 프로토콜에 따라 해당 스트림에서는 이후 어떠한 데이터도 클라이언트에 반환해서는 안 됩니다. 일반적으로 재설정으로 인해 발생하는 서버 오버헤드는 취소를 정상적으로 처리하는 작업에 따른 미미한 수준에 불과합니다. 하지만 NGINX의 스트림 임계값을 우회하면 클라이언트가 이러한 오버헤드를 악용하여 수천 개의 스트림을 빠르게 시작함으로써 그 영향을 증폭시킬 수 있습니다. 이로 인해 서버 CPU 사용량이 급증하여 정상적인 클라이언트에 대한 서비스가 거부됩니다.

비정상적으로 높은 keepalive 제한에서 HTTP/2 스트림을 설정한 후 스트림을 취소하여 발생하는 서비스 거부

공격 노출을 완화하기 위한 단계

완전한 기능을 갖춘 서버이자 프록시인 NGINX는 관리자가 서비스 거부 공격을 완화할 수 있는 강력한 도구를 제공합니다. 이러한 기능을 활용하려면 NGINX 구성 파일을 다음과 같이 업데이트하여 서버의 공격 표면을 최소화해야 합니다.

또한 모범 사례로 다음과 같은 안전 조치를 추가할 것을 권장합니다:

  • limit_conn은 단일 클라이언트에서 허용되는 연결 수를 제한합니다. 애플리케이션 성능과 보안 간의 균형을 고려하여 이 지시문에 적절한 값을 설정해야 합니다.
  • limit_req는 단일 클라이언트에서 일정 시간 동안 처리되는 요청 수를 제한합니다. 이 지시어는 애플리케이션 성능과 보안 간의 균형을 고려하여 적절한 값으로 설정해야 합니다.

당사의 대응 방식

당사는 여러 완화 전략을 실험하여 이 공격이 다양한 고객과 사용자에게 어떤 영향을 미칠 수 있는지 파악했습니다. 이번 연구를 통해 NGINX에는 이미 공격을 방지하는 데 필요한 모든 도구가 갖춰져 있음을 확인했지만, 권장 사양을 넘어 NGINX를 구성해야 하는 사용자도 그렇게 할 수 있도록 추가 조치를 취하고자 했습니다.

조사 결과, HTTP/2 프로토콜에서 이론적으로 발생할 수 있는 다양한 형태의 플러드 공격에 대한 서버 복원력을 향상하는 방법을 찾아냈습니다. 이에 따라 이러한 상황에서 시스템 안정성을 높이는 패치를 배포했습니다. 이와 같은 위협으로부터 보호하기 위해 NGINX Open Source 사용자는 최신 코드베이스로 바이너리를 다시 빌드하고, NGINX Plus 고객은 즉시 최신 패키지(R29p1 또는 R30p1)로 업데이트할 것을 권장합니다.

패치 작동 방식

NGINX에 대한 플러드 공격을 조기에 탐지할 수 있도록 이 패치는 하나의 이벤트 루프 내에서 새로 생성할 수 있는 스트림 수를 제한합니다. 이 제한은 http2_max_concurrent_streams 지시어를 사용해 설정한 값의 두 배로 지정됩니다. 요청을 전송한 직후 스트림이 재설정되는 경우(이번 공격 사례처럼)와 같이 최대 임계값에 도달하지 않더라도 이 제한이 적용됩니다.

영향을 받는 제품

이 취약점은 NGINX HTTP/2 모듈(ngx_http_v2_module)에 영향을 미칩니다. 영향을 받을 수 있는 특정 NGINX 또는 F5 제품에 대한 자세한 내용은 다음 페이지를 참조하십시오: https://my.f5.com/manage/s/article/K000137106

CVE-2023-44487 - HTTP/2 Rapid Reset 공격에 대한 자세한 내용은 다음을 참조하세요: https://www.cve.org/CVERecord?id=CVE-2023-44487

감사의 말

이 취약점을 발견하고 식별 및 완화하는 과정에서 협력해 주신 Cloudflare, Amazon, Google에 감사드립니다.

이 블로그 게시물은 최초 게시 이후 추가적인 해결 방법을 상세히 설명하고 내용을 명확히 하기 위해 업데이트되었습니다.

공유
태그: 2023, F5 NGINX

작성자 소개

관련 블로그 게시물

성평등을 향한 여정: 사이버 보안 분야에서 성공적인 커리어를 개척하는 방법에 관한 Jenn Gile과의 Q&A
F5 에코시스템 | 2023. 07. 13.

성평등을 향한 여정: 사이버 보안 분야에서 성공적인 커리어를 개척하는 방법에 관한 Jenn Gile과의 Q&A

F5의 ‘성평등을 향한 여정’ 시리즈 네 번째 Q&A에서는 Rachael Shah와 NGINX 제품 마케팅 책임자 Jenn Gile이 사이버 보안 직종에 대한 오해를 바로잡고, 사이버 보안 분야의 성별 격차를 해소하기 위한 조언과 그 이점에 대해 이야기합니다.

TLS 검사에서 피터 파커 원칙 다루기
F5 에코시스템 | 2019. 12. 09.

TLS 검사에서 피터 파커 원칙 다루기

“큰 힘에는 큰 책임이 따른다.” 볼테르와 처칠도 이와 비슷한 말을 남겼지만, 이 문구는 스파이더맨 코믹스에서 벤 삼촌의 말로 가장 널리 알려져 있습니다. 물론 이 문구가 문화적으로 널리 통용되는 이유 중 하나는 TLS 검사를 비롯해 수많은 상황과 주제에 적용할 수 있기 때문입니다.

Venafi와 F5를 통한 머신 아이덴티티 보호
F5 에코시스템 | 2018. 12. 11.

Venafi와 F5를 통한 머신 아이덴티티 보호

‘머신 아이덴티티’란 간단히 말해 자동화된 프로세스가 자신의 신원을 식별할 수 있도록 하고, 다른 자동화 시스템과 프로세스가 관련 리소스에 적절한 수준의 접근 권한을 부여하도록 하는 방법을 의미합니다. 이 개념 자체는 새로운 것이 아닙니다. 비교적 새로운 점은 이를 구현해야 하는 규모입니다.

마이너와 미니언: 데이터 유출만이 비용을 초래하는 것은 아닙니다
F5 에코시스템 | 2018. 07. 23.

마이너와 미니언: 데이터 유출만이 비용을 초래하는 것은 아닙니다

물론 데이터 유출은 더 큰 비용을 초래할 수 있고(적어도 지금은), 실패 사실을 세상에 드러낼 수밖에 없게 합니다(통지 의무가 있으니까요). 하지만 보안을 단순히 데이터 노출 문제로만 봐서는 안 됩니다. 요즘은 데이터가...

내 클라우드에서 나가!
F5 에코시스템 | 2016. 10. 12.

내 클라우드에서 나가!

F5의 Jay Kelley가 전하는 최신 소식에는 Microsoft Office 365용 신규 ID 및 액세스 솔루션을 배포할 때 고려해야 할 사항이 정리되어 있습니다.

Shift(웹 앱) 보안 레터
F5 에코시스템 | 2015. 07. 06.

Shift(웹 앱) 보안 레터

웹 앱 보안을 개발 초기 단계로 앞당기세요. F5 블로그에서 DevOps 파이프라인 초기에 보안을 통합하여 취약점을 예방하고 시간을 절약하는 방법을 알아보세요.