NGINX 보안 취약점 점검 및 조치하기

가이드문구

1. 소스 파일 쓰기 권한 제거

■ 양호 : 전용 Web Server 계정 소유이고, 600(-rw-------) 또는 700(-rwx-------) 권한인 경우

■ 취약 : 전용 Web Server 계정 소유가 아니거나, 600(-rw-------) 또는 700(-rwx-------) 권한 초과인 경우

■ 설명 

- 일반 사용자가 웹 서버의 설정 파일 및 웹 사이트 소스 파일을 삭제, 변경할 수 있으면, 홈페이지 변조, 작업 실수로 인한 파일 삭제, 백도어 삽입 등의 피해가 발생할 수 있으며, 시스템이 오작동하여 사용 불능 상태에 빠질 우려가 있습니다.


※ 조치방법

  1. - 설정 파일 권한 설정
  2. [Unix]
  3. # chown daemon:daemon /[nginx 설치 디렉터리]/conf/*.conf
  4. # chmod 700 /[Nginx 설치 디렉터리]/conf/*.conf
  5. [Windows]
  6. 1. Administrator 또는 전용 WAS 계정으로 소유자 변경
  7. 2. 전용 WAS 계정 그룹(Administrator) - 모든 권한
  8. 3. Users 그룹 - 쓰기 권한 제거
  9. 4. Everyone 그룹 - 그룹 제거


2. 소스 파일 쓰기 권한 제거

■ 양호 : Nginx 프로세스가 관리자 권한으로 구동되지 않는 경우

■ 취약 : Nginx 프로세스가 관리자 권한으로 구동된 경우

■ 설명 

- 서비스 데몬이 root 권한으로 구동되는지 여부 점검

- 서비스 데몬을 root 권한으로 구동하지 않고 별도의 권한으로 서비스함으로써 침해사고 발생 시 피해범위 확산 방지를 목적으로 함

- 웹 프로세스 취약점 공격으로 서비스 권한이 탈취 당할 경우 해당 프로세스의 권한이 root이면 시스템 전체의 제어권을 탈취 당해 피해범위가 확산될 가능성이 있음


※ 조치방법

  1. - Nginx 프로세스가 WEB 서버 전용 계정으로 구동되도록 변경
  2. 1. 데몬 User / Group 변경
  3. # vi /[nginx 설치 디렉터리]/conf/nginx.conf
  4. user [서비스_계정] [서비스_그룹];
  5. 2. 서비스 재시작
  6. # service nginx restart
  7. 참고
  8. - "서비스_그룹" 생략 가능하며 생략시 "서비스_계정" 동일하게 적용된다


3. 홈 디렉터리 쓰기 권한 제거

■ 양호 : 홈 디렉터리가 웹서버 전용 계정 소유이며, 755 권한 이하일 경우

■ 취약 : 홈 디렉터리가 웹서버 전용 계정 소유이며, 755 권한 초과할 경우

■ 설명 

- 일반 사용자가 웹 서버 홈 디렉터리 및 관리자 서버 홈 디렉터리에 임의의 파일을 생성, 삭제, 변경할 수 있으면, 홈페이지 변조, 작업 실수로 인한 파일 삭제, 백도어 삽입 등의 피해가 발생할 수 있음. 

- 웹 서버 홈 디렉터리 이하에 대해 관리자 이외의 다른 사용자의 쓰기 권한을 제거하는 것이 바람직하다.


◆ 참고

윈도우의 경우 접근권한이 전용 웹서버 계정 소유이며, User 그룹의 쓰기 권한 제거, Everyone 그룹의 쓰기 권한이 제거 되어 있는 경우 양호하다


※ 조치방법

  1. - 관리 서버 디렉터리 권한 설정
  2. [Unix]
  3. # chown daemon:daemon /[nginx 설치 디렉터리]/
  4. # chmod 750 /[nginx 설치 디렉터리]
  5. [Windows]
  6. 1. Administrator 또는 전용 Web Server 계정으로 소유자 변경
  7. 2. 전용 Web Server 계정 그룹(Administrator) - 모든 권한
  8. 3. Users 그룹 - 쓰기 권한 제거
  9. 4. Everyone 그룹 - 그룹 제거


4. 로그 디렉터리 및 파일의 권한 제한

■ 양호 : 일반 사용자가 로그 파일의 읽기 및 쓰기가 가능하지 않은 경우

■ 취약 : 일반 사용자가 로그 파일의 읽기 및 쓰기가 가능한 경우

■ 설명 

- 로그 파일에는 공격자에게 유용한 정보가 들어있을 수 있으므로 권한 관리가 필요하다.

- 일반 사용자에 의한 정보 유출이 불가능 하도록 권한 설정이 필요하다.

WINDOWS : 로그 디렉토리 및 파일이 관리자 또는 전용 WAS 계정 소유이고, 전용 WAS 계정 그룹(Administrator)(모든 권한), Users 그룹(쓰기 권한 제거), Everyone 그룹(그룹 제거) 으로 설정된 경우 양호하다.

UNIX : 로그 디렉토리는 소유자가 전용 WAS 계정이며 740 이하 이고, 로그 파일은 소유자가 전용 WAS 계정이며 소유자가 640 이하 면  양호하다.


※ 조치방법

  1. - 로그 디렉터리 파일 권한 확인
  2. [Unix]
  3. default 로그 디렉터리 파일 권한 설정
  4. # chown daemon: daemon /[nginx 설치 디렉터리]/logs/
  5. # chmod 750 /[nginx 설치 디렉터리]/logs/
  6. nginx.conf 파일에서 로그 디렉터리 위치 확인
  7. # cat /[nginx 설치 디렉터리]/conf/nginx.conf | grep "error_log\|access_log"
  8. error_log logs/error.log;
  9. access_log logs/access.log combined;
  10. 로그 디렉터리 파일 권한 설정
  11. # chown R daemon: daemon /[nginx 설치 디렉터리]/logs/
  12. # chmod 750 /[nginx 설치 디렉터리]/logs/
  13. # chmod 640 /[nginx 설치 디렉터리]/logs/[로그파일]
  14. [Windows]
  15. 1. Administrator 또는 전용 WAS 계정으로 소유자 변경
  16. 2. 전용 WAS 계정 그룹(Administrator) - 모든 권한
  17. 3. Users 그룹 - 쓰기 권한 제거
  18. 4. Everyone 그룹 - 그룹 제거


5. SSL v3.0 POODLE 취약점

■ 양호 : 암호화 통신 프로토콜에서 SSL 설정이 제거되고, TLS만 설정된 경우

■ 취약 : 암호화 통신 프로토콜에서 SSL 설정이 되어 있는 경우

■ 설명 

- TLS(Transport Layer Security)은 인터넷에서 정보를 암호화해서 송수신하는 프로토콜로 넷스케이프 커뮤니케이션스사가 개발한 SSL(Secure Socket Layer)에서 표준화된 기술로, 국제 인터넷 표준화 기구에서 표준으로 인정받은 프로토콜이다. 표준에 명시된 정식 명칭은 TLS 이지만 아직도 SSL이라는 용어가 많이 사용되고 있다.

- SSL 3.0버전은 1996년 발표된 통신규약으로 현재도 많은 웹서버와 브라우저에서 과거 개발된 시스템과 어플리케이션과의 호환성 문제로 SSL 통신이 가능하게 설정되어 있으나 최근 발표된 POODLE 취약점(CVE-2014-3566)을 비롯해 지속적으로 SSL 프로토콜의 취약점이 발견되어 시스템과 어플리케이션 등에서 SSL통신 설정을 제거하고 국제 표준인 TLS 통신만 사용 가능하도록 설정해야 한다.

- POODLE 취약점(CVE-2014-3566)은 공격자가 클라이언트에게 서버가 TLS를 지원하지 않는다고 속여 클라이언트로 하여금 SSL v.3.0을 사용하게 강제한 후 이 과정에서 중간 공격자가 보호된 HTTP 쿠키의 암호를 풀 수 있게 되는 취약점으로 시스템과 어플리케이션에서 암호화 통신 프로토콜 설정 중 SSL통신을 제거함으로써 예방 가능하다.


◆ 참고

    진단 사이트 : poodlebleed.com


※ 점검방법

  1. - SSL V3.0 활성화 여부를 확인한다
  2. # nmap --script ssl-enum-ciphers -p 443 [진단사이트_아이피]


※ 조치방법

  1. - 암호화 통신 프로토콜 설정을 변경한다
  2. 1. 암호화 통신 프로토콜 변경
  3. nginx.conf -> ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  4. 2. 서비스 재시작
  5. # service nginx restart


6. HTTP Method 제한

■ 양호 : 불필요한 HTTP Method 를 제한한 경우

■ 취약 : 불필요한 HTTP Method 를 제한하지 않은 경우

■ 설명 

- PUT, DELETE 와 같이 서비스에서 사용하지 않는 불필요한 메소드를 비활성화 하는 지 점검

- 불필요한 메소드를 이용하여 악의적인 공격자가 임의의 파일을 삭제하거나 업로드하여 서버의 정상 운영에 지장을 줄 수 있다


◆ 참고

- HTTP 메소드 :

GET 메소드 : 데이터를 요청할 때 사용하는 메소드 

POST 메소드 : 데이터를 요청하거나 변경할 때 사용하는 메소드 

PUT 메소드 : 데이터를 생성할 때 사용하는 메소드로 웹서버에 임의의 파일 생성 가능

HEAD 메소드 : 데이터를 요청하는 경우 HTTP Header 정보만 전송하는 메소드로 해당 자원이 존재하는 지 확인할 때 사용

DELETE 메소드 : 데이터를 삭제할 때 사용하는 메소드

OPTIONS 메소드 : 응답가능한 HTTP 메소드 정보를 요청하는 메소드 

TRACE 메소드 : 요청한 내용을 그대로 반환하는 메소드


- 불필요한 메소드 :

PUT, DELETE 메소드는 웹 서버에 파일을 생성 또는 삭제 할 수 있어 제한이 필요

OPTIONS 메소드는 웹 서버에서 허용한 메소드 정보를 알 수 있어 공격자에게 불필요한 정보를 줄 수 있고, 특정 메소드에서만 발생할 수 있는 취약점때문에 제한이 필요 ( 예 : Optionsbleed 취약점 )

TRACE 메소드는 CROSS-SITE TRACING (XST) 공격을 할 수 있어 제한이 필요


※ 조치방법

  1. - nginx 서버는 Default 값으로 GET, POST, HEAD Method만을 허용
  2. 예) 설정파일 : [Nginx 설치 디렉터리]/conf/nginx.conf
  3. # [Nginx 설치 디렉터리]/conf/nginx.conf
  4. location / {
  5. root /data/www;
  6. if ($request_method !~ ^(GET|POST)$ ) {
  7. return 404;
  8. }
  9. }
  10. - WebDAV 모듈 사용 제한
  11. 1. 설정파일 변경
  12. # vi [Nginx 설치 디렉터리]/conf/nginx.conf
  13. <수정 전>
  14. location / {
  15. root /data/www;
  16. dav_methods PUT DELETE MKCOL COPY MOVE;
  17. }
  18. <수정 후>
  19. location / {
  20. root /data/www;
  21. dav_methods off
  22. }
  23. 2. 서비스 재시작
  24. # service nginx restart


7. 기본 페이지 변경

■ 양호 : Nginx 의 기본 페이지 설정 값을 변경한 경우

■ 취약 : Nginx 의 기본 페이지 설정 값을 변경하지 않은 경우

■ 설명 

- 웹 서비스에서 기본 설치되는 기본 페이지를 변경하여 사용하는지 점검

- 기본페이지 노출 시 해당 서버의 버전과 중요정보를 쉽게 노출 될 수 있어 기본 페이지를 변경하여 사용해야 한다


◆ 참고

DirectoryIndex 지시어 : 클라이언트가 디렉토리를 요청할 때 표시할 페이지 목록


※ 조치방법

  1. - 기본 페이지 설정을 변경한다
  2. # vi /[nginx 설치 디렉터리]/conf/nginx.conf
  3. <수정전>
  4. location / {
  5. root html;
  6. index index.html;
  7. }
  8. <수정후>
  9. location / {
  10. root html;
  11. index example_main.html;
  12. }


8. 응답 메시지 헤더 정보 노출 제한

■ 양호 : ServerTokens 지시자의 설정값이 "OFF"로 설정되어 있는 경우 

■ 취약 : ServerTokens 지시자의 설정값이 "ON"으로 설정되어 있는 경우 

■ 설명 

- 에러 페이지, 웹 서버 종류, OS 정보, 사용자 계정 이름 등 웹 서버와 관련된 불필요한 정보가 노출되지 않도록 하여야 한다. 

- 불필요한 정보가 노출될 경우 해당 정보를 이용하여 시스템의 취약점을 수집할 수 있다.

- server_tokens 지시자를 설정한 경우 서버의 Response 에 Nginx 버전이 전송된다.


※ 조치방법

  1. - ServerTokens 지시자 설정을 변경한다
  2. # vi /[nginx 설치 디렉터리]/conf/nginx.conf
  3. server_tokens on; -> server_tokens off;



작성자 소개
초이 프로필
WrapUp 블로거

초이

반려견을 좋아하고, 차를 좋아하고, 여행을 좋아하고, 맛집을 찾아 즐기는 웹 개발자 입니다^^