Imperva HTTP/2 취약점 보고서 및 NGINX

인터넷 보안 회사인 Imperva 는 2016년 8월 3일 HTTP/2 프로토콜에서 발생할 수 있는 4가지 보안 취약점을 발표하고, 이러한 취약점에 대해 NGINX를 포함해 여러 웹 서버를 평가한 상세 보고서를 발표했습니다.

Imperva 보고서의 19페이지에서 보여지는 표에 따르면, NGINX는 Imperva의 테스트에서 상대적으로 우수한 성능을 보여주었으며, 4가지 취약점 중 3가지에는 영향을 받지 않았습니다.
남은 취약점 중 하나인 “Slow Read”를 이용하려는 시도는 NGINX에서 리소스 누출을 발생시키고, 결국 HTTP/2 서비스에 대한 서비스 거부(DoS) 공격을 허용했습니다.

Imperva는 HTTP/2에 대한 웹 서버 취약점을 나열했습니다.
주요 웹 서버들에 노출된 취약점

이 문제는 NGINX에 보고되었으며, NGINX 1.9.12 및 NGINX Plus R9 버전에서 신속하게 해결되었습니다. 현재 버전의 NGINX 소프트웨어 – NGINX Plus, NGINX 오픈소스 ‘mainline’, NGINX 오픈소스 ‘stable’ – 중 어느 것도 Imperva가 설명한 잠재적인 공격에 취약하지 않음을 확인해 드립니다.

만약 HTTP/2를 구현하고 있으며, NGINX 1.9.12 이전 버전이나 NGINX Plus R9를 사용 중이라면 소프트웨어를 업데이트하세요. HTTP/2는 복잡하고 상대적으로 새로운 프로토콜이므로 언제나 최신 소프트웨어 버전을 실행하는 것이 좋습니다.

NGINX 및 NGINX Plus의 튜닝에 대한 최적의 방법을 검토하는 것을 권장합니다. 기본 Linux 구성에서의 튜닝은 종종 보수적이며, 일부 매개변수를 변경하면 NGINX 또는 NGINX Plus 시스템의 용량을 늘릴 수 있습니다.

목차

1. Imperva 보고서가 설명하는 문제점
2. HTTP/2 취약점 완화

1. Imperva 보고서가 설명하는 문제점

2016년 8월 기준으로, HTTP/2는 전체 웹사이트 중 약 9%에서 사용되고 있으며, FaceBook, Google, Wikipedia와 같이 매우 인기 있는 사이트를 포함합니다. NGINX와 NGINX Plus를 사용하는 콘텐츠 전송 네트워크(CDN) 제공업체들은 종종 HTTP/2를 제공의 일부로 포함시킵니다.

HTTP/2의 복잡한 설계는 연구자들이 설계나 구현의 약점을 찾기 위해 탐색할 수 있는 다양한 가능성을 제공합니다. Imperva 보고서에서는 HTTP/2의 네 가지 잠재적인 취약점을 설명하고 있습니다:

  • Slow Read 공격 (CVE-2016-1546): Apache HTTP Server 2.4.17 및 2.4.18에 영향을 미칩니다. 이 중 네 가지 취약점 중 유일하게 NGINX에 영향을 미치는 것이며, 보고서의 11페이지를 참조하세요. National Vulnerability Database (NVD)의 목록은 CVE-2016-1546입니다.
  • HTTP/2 Stream Multiplexing (CVE-2016-0150): Microsoft Windows 10 Gold 및 1511에 영향을 미칩니다. NVD의 목록은 CVE-2016-0150입니다.
  • Dependency and Priority: nghttpd 1.7.0 이전 버전 및 Apache HTTP Server 2.4.18 이전 버전에 영향을 미칩니다. 보고서에 따르면 이 취약점은 nghttpd 1.7.0에서 “보다 일반적인 메모리 정리 문제 (CVE-2015-8659)”의 일부로 수정되었습니다. NVD의 목록은 CVE-2015-8659입니다.
  • HPACK Bomb (CVE-2016-1544 및 CVE-2016-2525): nghttpd 1.7.1 이전 버전 및 Wireshark 2.0.2 및 1.12.10 이전 버전에 영향을 미칩니다. NVD의 목록은 CVE-2016-2525이며, CVE-2016-1544의 목록은 예약되어 있으며 정보가 포함되어 있지 않습니다.

Imperva 가 다양한 웹 서버를 테스트하여 취약점이 있는지 확인한 결과, “Slow Read” 테스트의 변형이 NGINX와 NGINX Plus에서 리소스 누출 버그를 노출시켰습니다.
이 리소스 누출로 인해 결국 서비스 거부 공격이 발생했습니다.

NGINX와 NGINX Plus는 일반적으로 “Slow Read” 공격 (일반적으로 Slowloris라고도 함)에 취약하지 않습니다. Imperva 의 테스트 케이스를 통해 이전에 보고된 리소스 누출 버그를 분리할 수 있었습니다.
그런 다음 추가적인 타임아웃과 가드를 추가하여 HTTP/2 리소스가 올바르게 닫히고 해제되도록 보장할 수 있었으며, 이러한 조치가 효과적임을 확인할 수 있었습니다.

2. HTTP/2 취약점 완화

HTTP/2를 구현하고 NGINX 1.9.11 이전 버전이나 NGINX Plus R8 이전 버전을 사용 중이라면 특히 최신 버전의 NGINX 및 NGINX Plus로 업그레이드하는 것을 강력히 권장합니다. Imperva의 테스트 케이스에서 노출된 리소스 누출 버그는 NGINX 1.9.12 이후 버전 및 NGINX Plus R9 이후 버전에서는 발생하지 않습니다.

NGINX와 NGINX Plus는 Imperva 보고서에서 설명한 관련 취약점을 효과적으로 방어하는 방법을 제공하며, 두 제품 중 최신 릴리스로 업그레이드하면 취약점이 완전히 제거됩니다.

일반적으로 사이트의 취약성을 줄이기 위해 DDoS 공격 완화에 관한 포스트에서 제시한 조치를 취하는 것도 권장합니다. 이 조치에는 다음이 포함됩니다:

  • 단일 사용자로부터의 요청 속도 제한 (limit_req 지시문)
  • 단일 클라이언트가 열 수 있는 연결 수 제한 (limit_conn 지시문)
  • 보다 공격적인 타임아웃으로 연결을 더 빨리 닫기

질문이 있으시거나, NGINX Plus 구독자라면 NGINX STORE에 문의하여 도움을 받을 수 있습니다.

아래 뉴스레터를 구독하고 NGINX와 NGINX STORE의 최신 정보들을 빠르게 전달 받아보세요.