Computer >> 컴퓨터 >  >> 네트워킹 >> 네트워크 보안

지금까지 발견된 NGINX 치명적 취약점 TOP 5와 웹 서버 보안 대응법

Airbnb, Box, Instagram, Netflix, Pinterest, SoundCloud, Zappos 등 인터넷에서 가장 트래픽이 많은 웹사이트의 절반 이상이 NGINX를 기반으로 운영되고 있습니다. 사이버 범죄자들은 웹 서버를 주요 표적으로 삼으며, 민감한 정보를 탈취하기 위해 아주 작은 취약점조차 놓치지 않고 악용하려 합니다. NGINX 역시 예외는 아니어서 여러 차례 사이버 공격과 취약점 노출을 겪어왔습니다.

이번 글에서는 지금까지 발견된 NGINX의 가장 치명적인 취약점 5가지와 웹 서버를 안전하게 보호하는 방법을 살펴봅니다. 단, 웹사이트를 완벽하게 보호하기 위해서는 서버에서 운영되는 애플리케이션까지 함께 보안해야 한다는 점을 기억하세요.

1. NGINX SPDY 힙 버퍼 오버플로우 취약점 (2014)

NGINX 1.3.15 이후 1.4.7 미만 버전과 1.5.x 버전 중 1.5.12 미만 버전의 SPDY 구현에는 힙 기반 버퍼 오버플로우(heap-based buffer overflow) 취약점이 존재했습니다. 이를 통해 공격자는 조작된 요청으로 임의 코드를 실행할 수 있습니다. 이 문제는 ngx_http_spdy_module 모듈(기본값으로는 컴파일되지 않음)과 --with-debug 구성 옵션 없이 빌드된 NGINX에서, 설정 파일의 "listen" 디렉티브에 "spdy" 옵션이 사용된 경우에 해당합니다.

지금까지 발견된 NGINX 치명적 취약점 TOP 5와 웹 서버 보안 대응법지금까지 발견된 NGINX 치명적 취약점 TOP 5와 웹 서버 보안 대응법

공격자는 이 취약점을 악용해 특수하게 조작한 요청으로 힙 메모리 버퍼 오버플로우를 유발하고 임의 코드를 실행할 수 있으며, 웹 서버에 심각한 피해를 초래할 수 있습니다.

권장되는 해결 방법은 최신 버전으로 업그레이드하는 것이며, 벤더가 제공하는 필수 보안 패치도 반드시 적용해야 합니다.

2. NGINX 루트 권한 상승 취약점 (2016)

NGINX 루트 권한 상승(Root Privilege Escalation) 취약점은 심각도 '높음'으로 분류된 취약점입니다. 이 취약점으로 인해 불안전한 권한 설정의 로그 디렉터리가 생성될 수 있으며, 악의적인 로컬 공격자가 NGINX/웹 사용자(www-data) 계정에서 root 권한으로 권한을 상승시켜 해당 NGINX 서버에 호스팅된 모든 웹 애플리케이션을 장악할 수 있습니다. 이 취약점은 Debian, Ubuntu 등 데비안 계열 배포판의 웹 서버 패키지에 영향을 미칩니다.

이 취약점은 다음과 같은 과정에서 비롯됩니다. 데비안 계열 시스템에서 기본 저장소로 NGINX를 설치하면 아래 위치에 다음과 같은 권한으로 로그 디렉터리가 생성됩니다.

admin@wsxdn.com:~# ls -ld /var/log/nginx/
drwxr-x--- 2 www-data adm 4096 Nov 12 22:32 /var/log/nginx/
admin@wsxdn.com:~# ls -ld /var/log/nginx/*
-rw-r----- 1 www-data adm 0 Nov 12 22:31 /var/log/nginx/access.log
-rw-r--r-- 1 root root 0 Nov 12 22:47 /var/log/nginx/error.log

/var/log/nginx 디렉터리가 www-data 계정의 소유이기 때문에, 공격자는 시스템에 접근한 뒤 로그 파일을 임의 파일을 가리키는 심볼릭 링크(symlink)로 교체할 수 있습니다. 이후 서비스가 재시작되면 로그가 심볼릭 링크가 가리키는 파일에 기록되어, 공격자는 root 권한으로 상승할 수 있게 됩니다.

이 취약점은 Debian의 NGINX 1.6.2-5+deb8u3 패키지와 Ubuntu 16.04 LTS의 NGINX 1.10.0-0ubuntu0.16.04.3 버전에서 수정되었습니다.

3. 원격 정수 오버플로우 취약점 (2017)

NGINX 원격 정수 오버플로우(Integer Overflow) 취약점은 경계 조건 오류(Boundary Condition Error) 유형에 속합니다. 이 취약점은 NGINX가 사용자 입력 데이터에 대한 경계 검사를 충분히 수행하지 못하는 데서 발생합니다. 이를 악용하면 공격자가 민감한 정보에 접근하거나 애플리케이션을 강제 종료시켜 서비스 거부(DoS) 상태를 일으킬 수 있습니다.

NGINX 0.5.6부터 1.13.2까지의 모든 버전이 이 정수 오버플로우 취약점에 노출되어 있습니다. 따라서 최신 NGINX 버전으로 업데이트하고, 세부 사항은 해당 벤더의 보안 권고문을 확인하는 것이 좋습니다.

4. NGINX Controller 취약점 (2020)

NGINX Controller 3.2.0 미만 버전에서는 Controller API에 네트워크로 접근할 수 있는 공격자가 권한 없는 사용자 계정을 생성할 수 있습니다. 이렇게 생성된 계정은 새 라이선스를 시스템에 업로드할 수는 있지만, 시스템의 다른 구성 요소를 조회하거나 수정할 수는 없습니다. 즉, 공격자가 이 취약점을 활용해 다수의 사용자 계정을 생성하여 NGINX Controller에서 서비스 거부(DoS) 상황을 유발할 수 있습니다.

이 취약점을 완화하려면 최신 버전으로 업데이트하거나, NGINX Controller의 호스트 방화벽 또는 외부 패킷 필터링 장치를 통해 신뢰할 수 있는 네트워크만 NGINX Controller API(TCP 443 포트)에 접근하도록 접근을 제한해야 합니다.

5. PHP 원격 코드 실행 취약점 (2020)

최근에 발견된 NGINX 관련 취약점 중 하나는 php-fpm이 활성화된 NGINX 환경에서 실행되는 특정 버전의 PHP 7이 원격 코드 실행(RCE)에 취약하다는 것입니다. 이 취약점을 방치하면 민감한 정보 노출, 데이터 무단 추가·수정, 서비스 거부(DoS) 공격으로 이어질 수 있습니다.

이 취약점을 완화하려면 즉시 취약하지 않은 PHP 버전으로 업데이트해야 합니다.

NGINX를 사용하지 않으신가요? Apache 주요 취약점에 관한 블로그 글과 동영상도 확인해 보세요.

Astra Pentest 소개

Astra Pentest는 해커의 취약점 악용으로 인한 해킹을 예방할 수 있도록 돕는 필수 네트워크 및 애플리케이션 보안 솔루션입니다. 자동화된 취약점 스캐너, 취약점 관리, 침투 테스트(penetration testing) 서비스를 하나의 패키지로 제공합니다.

이 글이 웹 서버의 다양한 취약점과 보안 문제를 해결하는 데 도움이 되기를 바랍니다! 다만 웹사이트와 웹 애플리케이션을 완벽하게 보호하려면 서버에 설치된 애플리케이션과 사용 중인 CMS까지 함께 보안해야 합니다. 이들 중 하나라도 취약점이 존재하면 웹 서버 전체가 위험에 노출될 수 있습니다. WordPress, Magento, Joomla, PrestaShop, OpenCart 보안 강화에 관한 글도 함께 참고해 보세요.