WAS Security Checker

Web Application Server(WAS)의 보안설정을 점검하는 서비스입니다. 각각의 WAS에 특화된 보안설정을 점검하고 보안성 향상을 위한 가이드를 제공합니다.

점검 가능한 WAS

  • Apache(httpd) 2.2.x 기준
  • Tomcat 7.0 / 8.0 기준
  • Nginx

WAS 과금 정책

  • WAS 취약점 진단의 경우, 최초 진단 후 30일 내 동일한 대상을 다시 진단할 시, 추가 1회까지는 별도의 비용이 발생되지 않습니다.

    • 동일한 대상이라 함은 최초 진단한 서버(Instance ID 기준)와 WAS 타입이 동일한 경우를 의미합니다.
    • 재진단 가능 기간이나 횟수를 초과한 경우, 신규 진단 기준으로 요금이 발생됩니다.
    • OS 취약점 진단의 경우, 별도의 무료 재진단 정책이 적용되지 않습니다.

  • 상세 과금 예시

No 진단 구분 서버 WAS 점검일시 비고
1 최초 진단 cent75 (InstanceNo:123456) apache 2019-01-26 cent75 서버에 대한 apache 점검
2 재진단 cent75 (InstanceNo:123456) apache 2019-01-30 1번 점검 이후 30일 이내, 동일 서버/WAS 재점검
3 최초 진단 cent75 (InstanceNo:123456) apache 2019-01-30 30일 이내에 재점검은 1회만 무료로 제공
4 최초 진단 cent75 (InstanceNo:123456) tomcat 2019-01-30 30일 이내에 동일 서버에서 점검했으나, 다른 WAS(Tomcat)를 점검
5 재진단 cent75 (InstanceNo:123456) tomcat 2019-02-02 4번 점검 이후 30일 이내, 동일 서버/WAS 재점검
6 최초 진단 ubuntu1204 (InstanceNo:456789) apache 2019-02-04 ubuntu1204 서버에 대한 apache 점검
7 최초 진단 ubuntu1204 (InstanceNo:456789) nginx 2019-02-07 ubuntu1204 서버에 대한 nginx 점검
8 최초 진단 cent75 (InstanceNo:123456) apache 2019-03-15 3번 점검 이후, 30일을 초과

WAS 보안 점검 항목

Apache 점검 항목

점검 항목 점검 항목 설명
log_config_module 사용 log_config 모듈은 클라이언트 요청의 유연한 로깅을 제공하고 각 로그에 대한 정보를 제공합니다. 로깅 설정을 활성화하는 것을 권장합니다.
webdav_modules 사용 금지 WebDAV는 클라이언트가 웹 서버에서 파일과 리소스를 만들고, 이동하고, 삭제할 수 있도록 하는 HTTP프로토콜의 확장입니다. WebDAV는 널리 사용되지 않으며, 클라이언트가 웹 서버에서 무단 파일을 수정할 수 있으므로 심각한 보안 문제가 발생할 수 있으므로, 사용하지 않아야 합니다.
status_module 사용 금지 Apache mod_status Module은 현재 서버 성능 통계를 제공합니다.웹 페이지로 사용 가능한 서버 성능 상태 정보를 제공하는 것이 편리할 수 있지만, 이 모듈을 비활성화하는 것이 좋습니다.
autoindex_module 사용 금지 Apache autoindex 모듈은 서버에 있는 디렉터리의 내용을 나열한 웹 페이지를 자동으로 생성합니다. index.html와 같은 생성되지 말아야 할 페이지가 생성되므로, 비활성화해야 합니다.
proxy module 사용 금지 아파치 프록시 모듈은 서버가 프록시 또는 역 방향으로 작동하도록 허용합니다. 프록시 모듈이 로드된 프록시 및 기타 프로토콜의 프록시를 제공합니다. 아파치 설치가 다른 네트워크에 대한 프록시 요청 또는 다른 네트워크에 있지 않을 경우, 프록시 모듈을 로드해서는 안 됩니다.
userdir module 사용 금지 tilde (~)를 이용한 사용자 홈디렉토리 접근을 허용하지 않으려면 비활성화되어야 합니다.
info_module 사용 금지 아파치 mod_info 모듈은/etc/ server-info URL위치에 대한 액세스를 통해 서버 설정에 대한 정보를 제공하므로, 해당 모듈을 사용하지 않아야 합니다.
apache 사용 Group 제한 일반적으로 Apache는 포트 80 및 443에서 수신 대기하기 위해 루트 권한으로 시작되지만 웹 서비스를 수행하려면 루트가 아닌 다른 사용자로 실행될 수 있고 실행되어야합니다. Apache User 및 Group 지시문은 사용할 사용자 및 그룹을 지정하는 데 사용됩니다.
apache 사용 User 제한 일반적으로 Apache는 포트 80 및 443에서 수신 대기하기 위해 루트 권한으로 시작되지만 웹 서비스를 수행하려면 루트가 아닌 다른 사용자로 실행될 수 있고 실행되어야합니다. Apache User 및 Group 지시문은 사용할 사용자 및 그룹을 지정하는 데 사용됩니다.
apache 로그인 shell 제한 apache 계정은 일반 로그인 계정으로 사용해서는 안되며, 계정을 사용하여 로그인할 수 없도록하려면 유효하지 않거나 nologin 쉘을 할당해야합니다.
apache 계정 잠금 정책 Apache가 실행되는 사용자 계정에는 유효한 암호가 없어야 하지만 잠겨 있어야합니다.
루트 디렉토리 접근 제어 - Order Apache Directory 지시문을 사용하면 액세스 제어 및 기타 많은 기능과 옵션에 대한 디렉토리별 구성을 허용합니다. 중요한 사용법 중 하나는 특별히 허용 된 것을 제외하고 운영 체제 디렉토리 및 파일에 대한 액세스를 허용하지 않는 기본 거부 정책을 만드는 것입니다. 이것은 OS 루트 디렉토리에 대한 액세스를 거부하여 수행됩니다. Order deny,allow
루트 디렉토리 접근 제어 - Deny Apache Directory 지시문을 사용하면 액세스 제어 및 기타 많은 기능과 옵션에 대한 디렉토리별 구성을 허용합니다. 중요한 사용법 중 하나는 특별히 허용 된 것을 제외하고 운영 체제 디렉토리 및 파일에 대한 액세스를 허용하지 않는 기본 거부 정책을 만드는 것입니다. 이것은 OS 루트 디렉토리에 대한 액세스를 거부하여 수행됩니다. Deny from all
AllowOverride 설정 - none Apache OverRide 지시문을 사용하면 .htaccess 파일을 사용하여 인증, 문서 유형 처리, 자동 생성 색인, 액세스 제어 및 옵션을 비롯한 많은 구성을 무시할 수 있습니다. 서버가 AccessFileName에 지정된대로 .htaccess 파일을 찾으면 해당 파일에 선언 된 지시문이 이전 액세스 정보를 무시할 수 있어야합니다. 이 지정 문을 없음으로 설정하면 .htaccess 파일이 완전히 무시됩니다. 이 경우 서버는 파일 시스템의 .htaccess 파일을 읽지 않습니다. 이 지시문을 All로 설정하면 .htaccess Context가있는 지시문을 .htaccess 파일에 사용할 수 있습니다.
Options 설정 - none 루트(/) OS 레벨에 대한 옵션 지시는 루트 디렉토리 수준에서 최소한의 옵션만 허용하는 최소권한 정책을 따라야 합니다. 그런 다음 특정 웹 사이트 또는 웹 사이트의 일부에 필요한 경우 옵션을 추가하여 사용할 수 있습니다. Options가 활성화되어 있어야 하며, 옵션 지시자의 값은 none이어야 합니다.
기본 콘텐츠 사용제한 - server-status 아파치 설치시에 사용 용도에 적합하지 않거나 불필요한 기본 콘텐츠가 설치될 수 있습니다. 이러한 샘플 콘텐츠의 주요 기능은 기본 웹 사이트를 제공하고, 사용자 설명서를 제공하거나 웹 서버의 특수 기능을 시연하는 것입니다. 서비스에 필요하지 않은 default 콘텐츠를 제거해야 합니다.
기본 콘텐츠 사용제한 - server-info 아파치 설치시에 사용 용도에 적합하지 않거나 불필요한 기본 콘텐츠가 설치될 수 있습니다. 이러한 샘플 콘텐츠의 주요 기능은 기본 웹 사이트를 제공하고, 사용자 설명서를 제공하거나 웹 서버의 특수 기능을 시연하는 것입니다. 서비스에 필요하지 않은 default 콘텐츠를 제거해야 합니다.
기본 콘텐츠 사용제한 - perl-status 아파치 설치시에 사용 용도에 적합하지 않거나 불필요한 기본 콘텐츠가 설치될 수 있습니다. 이러한 샘플 콘텐츠의 주요 기능은 기본 웹 사이트를 제공하고, 사용자 설명서를 제공하거나 웹 서버의 특수 기능을 시연하는 것입니다. 서비스에 필요하지 않은 default 콘텐츠를 제거해야 합니다.
HTTP TRACE 사용 금지 Apache TraceEnable 명령을 사용하여 HTTP TRACE 요청 방식을 비활성화합니다.
에러로그 수준 설정 - LogLevel notice LogLevel 지시문은 에러 로그의 수준을 구성하는 데 사용됩니다. 로그 수준 값은 emerg, alert, crit, error, warn, notice, info 및 debug의 표준 syslog 수준입니다. emerg 레벨에서 notice 레벨까지의 모든 에러가 기록할 수 있도록 notice 레벨로 설정하는 것을 권장합니다.
에러로그 수집 설정 ErrorLog 지시문은 에러 로그 파일 이름을 구성합니다.
로그 포맷 정의 LogFormat 지시문은 액세스 로그 항목에 포함될 형식 및 정보를 정의합니다.
CustomLog 포맷 정의 CustomLog 지시문은 로그 파일, syslog 기능 또는 파이프 로깅 유틸리티를 지정합니다.
ssl_module 사용 SSL (Secure Sockets Layer) 또는 TLS (Transport Layer Security)느 트래픽을 암호화하는데 사용되므로 개인 정보 및 사용자 자격 증명의 기밀성을 제공합니다. 그러나 전송 중 데이터를 암호화했기 때문에 클라이언트가 제공하는 데이터가 서버에있는 동안 보호 된다는 의미는 아닙니다. mod_ssl 모듈은 Apache용 SSL / TLS를 구현하는 가장 많이 사용되는 표준 모듈입니다. Red Hat 시스템에서 발견 된 새로운 모듈은 mod_ssl을 보완하거나 대체 할 수 있으며 동일한 기능과 추가 보안 서비스를 제공합니다. mod_nss는 Mozilla의 NSS (Network Security Services) 소프트웨어를 Apache 모듈로 구현 한 것으로, TLS 외에도 광범위한 암호화 기능을 구현합니다. 데이터의 보호를 위하여 mod_ssl 또는 mod_nss를 설치하여야 합니다.
ServerTokens 설정 서버의 버전에 대하여 최소한의 정보만을 제공하도록 Apache ServerTokens 지시문을 구성하십시오. 값을 Prod 또는 ProductOnly로 설정하는 것을 권장합니다.
ServerSignature 설정 오류 페이지와 같은 서버 생성 문서 맨 아래 서명 등에 추가되는 정보를 제한하기 위하여, ServerSignature 지시문을 off 하는 것을 권장합니다.
KeepAlive 설정 KeepAlive 지시문은 아파치가 그 클라이언트의 후속 HTTP 요청을 처리하기 위해 클라이언트당 동일한 TCP 연결을 재사용할지 여부를 제어합니다. KeepAlive 지정 문을 On으로 설정하는 것을 권장합니다.
MaxKeepAliveRequests 설정 MaxKeepAliveRequests 지시문은 KeepAlive가 설정된 경우 연결당 허용되는 요청 수를 제한합니다. 0으로 설정하면 무제한 요청이 허용됩니다. MaxKeepAliveRequests 지시문을 100 이상으로 설정하는 것을 권장합니다.
Timeout 설정 TimeOut 지시문은 Apache HTTP 서버가 입/출력 호출이 완료될 때까지 대기하는 최대 시간 (초)을 제어합니다. TimeOut 지시문을 10 이하로 설정하는 것을 권장합니다.
KeepAliveTimeout 설정 KeepAliveTimeout 지시문은 Apache가 활성 상태로 유지되는 연결을 닫기 전에 후속 요청을 대기하는 시간 (초)을 지정합니다. 15초 이하로 설정하는 것을 권장합니다.

Tomcat 점검 항목

점검 항목 점검 항목 설명
서비스에 불필요한 파일 제거 Tomcat을 설치할 때 기본적으로 제공되는 애플리케이션과 설명문서, 기타 디렉토리는 삭제하는 것을 권장합니다. 샘플 리소스는 불필요한 정보를 외부에 유출할 우려가 있어 삭제하는 것이 바람직합니다.
서버 정보 노출을 방지를 위한 server.info 문자열 변경 "기본적으로 server.info 속성에는 애플리케이션 서비스의 이름과 버전 정보가 포함되어 있습니다. 이 값은 클라이언트가 tomcat 서버에 연결할 때 Tomcat 클라이언트에 표시되어 서버의 정보를 노출시키게 됩니다. server.info 속성을 변경하여 정보를 차단하면, 공격자가 서버 플랫폼에 영향을 주는 취약성을 판단하기가 더 어려워 질 수 있습니다."
서버 정보 노출을 방지를 위한 server.number 문자열 변경 "server.number 속성은 실행중인 Tomcat의 상세 버전을 나타냅니다. 이 값은 연결될 때 Tomcat 클라이언트에게 표시됩니다. 서버의 상세 버전을 노출하면 공격자가 서버 플랫폼에 영향을 미치는 취약점을 찾기가 쉬워집니다. 서버 버전 문자열을 변경하여 공격자가 어떤 취약점이 서버 플랫폼에 영향을 미치는지 판단하기 어렵게 하는 것이 좋습니다."
서버 정보 노출을 방지를 위한 server.built 날짜 변경 "server.built 날짜는 Tomcat이 컴파일되고 패키징 된 날짜를 나타냅니다. 이 값은 클라이언트가 서버에 연결할 때 Tomcat 클라이언트에 제공됩니다. 서버의 설치 날짜를 노출하면 공격자가 서버 플랫폼에 영향을 미치는 취약점을 찾기가 쉬워집니다. Server.bulit 문자열을 변경하여 공격자가 어떤 취약점이 서버 플랫폼에 영향을 미치는지 판단하기 어렵게 하는 것이 좋습니다."
X-Powered-By HTTP Header 사용하지 않음 "xpoweredBy 설정은 Apache Tomcat이 XPowered-By HTTP 헤더를 통해 존재 여부를 알릴 것인지 결정합니다. 이 값을 false로 설정하는 것이 좋습니다. server 속성은 Apache Tomcat을 추가적으로 마스킹하는 HTTP 헤더에서 보내지는 기본값을 덮어 씁니다. Tomcat이 이러한 방식으로 자신의 존재를 광고하는 것을 방지하면 공격자가 서버 플랫폼에 어떤 취약점이 영향을 미치는지 판단하기가 더 어려워 질 수 있습니다."
Stack Traces 정보 노출 제한 "요청 처리 중에 런타임 오류가 발생하면 Apache Tomcat은 요청자에게 디버깅 정보를 표시합니다. 이러한 디버그 정보는 요청자에게 노출하지 않는 것이 좋습니다. 호출 스택과 같은 디버깅 정보에는 공격자가 유용 할 수있는 중요한 정보가 포함되어있는 경우가 많습니다. Tomcat이 이 정보를 제공하지 못하도록 함으로써 민감한 정보가 잠재적인 공격자에게 누설될 위험이 줄어 듭니다."
HTTP TRACE 사용하지 않음 "HTTP TRACE는 주어진 요청에 대한 디버깅 및 진단 정보를 제공합니다. TRACE 요청에 대한 응답에서 발견된 진단 정보에는 공격자에게 유용한 정보가 포함되어 있는 경우가 많습니다. Tomcat이 이 정보를 제공하지 못하도록 함으로써 민감한 정보가 잠재적인 공격자에게 누설 될 위험이 줄어 듭니다."
Shutdown 옵션 nondeterministic 설정 "Tomcat은 종료 명령을 처리하기 위해 기본적으로 TCP 8005 포트를 사용합니다. 이 포트에 연결하고 SHUTDOWN명령을 전송하면 Tomcat 내의 모든 응용 프로그램이 중지됩니다. 정지 포트는 루프 백 인터페이스에 바인딩 되어 있으므로 네트워크에 노출되지 않습니다. $CATALINANAL_HOME/conf/server.xml의 Shutdown 특성에 'nondeterministic' 값을 설정하는 것이 좋습니다. Shutdown 옵션을 'nondeterministic' 값으로 설정하면 악성 로컬 사용자가 Tomcat을 종료하지 못할 수 있습니다."
Shutdown port 사용 금지 "Tomcat은 TCP 포트 8005에서 수신 대기 요청을 허용합니다. 이 포트에 연결하고 SHUTDOWN 명령을 보내면 Tomcat 내의 모든 응용 프로그램이 중지됩니다. 종료 포트는 루프백 인터페이스에 바인딩되어 있으므로 네트워크에 노출되지 않습니다. 이 기능을 사용하지 않으면 종료 포트를 사용하지 않는 것이 좋습니다. 종료 포트를 비활성화하면 shutdown 명령을 사용하여 Tomcat 서버를 비활성화하는 악성 로컬 엔티티의 위험이 제거됩니다."
접근 제한 설정 : $CATALINA_HOME "$CATALINA_HOME은 루트 Tomcat 디렉토리에 대한 경로를 보유하는 환경 변수입니다. 허가되지 않은 수정으로부터 Tomcat 바이너리와 라이브러리를 보호하기 위해이 액세스를 보호하는 것이 중요합니다. $CATALINA_HOME의 소유권은 tomcat_admin : tomcat입니다. 또한 $CATALINA_HOME에 대한 권한으로 인해 world (o-rwx)에 대한 읽기, 쓰기 및 실행이 금지되고 그룹 (g-w)에 대한 쓰기 액세스가 금지되는 것이 좋습니다. $CATALINA_HOME이 보호되지 않으면 Tomcat을 탐색하거나 의존하는 프로세스 및 데이터의 보안이 손상 될 수 있습니다."
접근 제한 설정 : $CATALINA_BASE "$CATALINA_BASE는 대부분의 상대 경로가 해석되는 기본 디렉토리를 지정하는 환경 변수입니다. $CATALINA_BASE는 일반적으로 실행중인 Tomcat의 인스턴스가 여러 개인 경우에 사용됩니다. Tomcat 관련 바이너리와 라이브러리를 무단으로 수정하지 못하도록하기 위해서는 이 액세스를 보호하는 것이 중요합니다. $CATALINA_BASE의 소유권은 tomcat_admin : tomcat이어야합니다. 또한 $CATALINA_BASE에 대한 권한으로 인해 world (o-rwx)에 대한 읽기, 쓰기 및 실행이 금지되고 그룹 (g-w)에 대한 쓰기 액세스가 금지되는 것이 좋습니다. $CATALINA_BASE가 보호되지 않으면 Tomcat에서 트래버스하거나 의존하는 프로세스 및 데이터의 보안이 손상 될 수 있습니다."
접근 제한 설정 : $CATALINA_HOME/conf/ "$CATALINA_HOME/conf/ 디렉토리에는 Tomcat 구성 파일이 들어 있습니다. 이 디렉토리의 소유권은 tomcat_admin : tomcat입니다. 또한 이 디렉토리에 대한 사용 권한이 전체 (o-rwx)에 대한 읽기, 쓰기 및 실행을 금지하고 그룹 (g-w)에 대한 쓰기 액세스를 금지하는 것이 좋습니다. 이러한 디렉토리에 대한 액세스를 제한하면 로컬 사용자가 악의적으로 또는 실수로 Tomcat의 구성을 변경하는 것을 방지 할 수 있습니다."
접근 제한 설정 : $CATALINA_HOME/logs/ "$CATALINA_HOME/logs/ 디렉토리에는 Tomcat 로그가 들어 있습니다. 이 디렉토리의 소유권은 tomcat_admin : tomcat입니다. 또한 이 디렉토리의 사용 권한이 전체 (o-rwx)에 대한 읽기, 쓰기 및 실행을 금지하는 것이 좋습니다. 이러한 디렉토리에 대한 액세스를 제한하면 로컬 사용자가 악의적으로 또는 부주의하게 Tomcat의 로그를 변경하는 것을 방지 할 수 있습니다."
접근 제한 설정 : $CATALINA_HOME/temp/ "$CATALINA_HOME/temp/ 디렉토리는 임시 정보를 디스크에 저장하기 위해 Tomcat에서 사용됩니다. 이 디렉토리의 소유권은 tomcat_admin : tomcat입니다. 또한 이 디렉토리의 사용 권한이 전체(o-rwx)에 대한 읽기, 쓰기 및 실행을 금지하는 것이 좋습니다. 이러한 디렉토리에 대한 액세스를 제한하면 로컬 사용자가 악의적으로 또는 부주의하게 Tomcat의 무결성을 조작하는 것을 방지 할 수 있습니다."
접근 제한 설정 : $CATALINA_HOME/bin/ "$CATALINA_HOME/bin/ 디렉토리는 Tomcat 런타임의 일부인 실행 파일을 포함합니다. 이 디렉토리의 소유권은 tomcat_admin : tomcat입니다. 또한 이 디렉토리에 대한 권한으로 인해 전체(o-rwx)에 대한 읽기, 쓰기 및 실행이 금지되고 그룹 (g-w)에 대한 쓰기 액세스가 금지되는 것이 좋습니다. 이러한 디렉토리에 대한 액세스를 제한하면 로컬 사용자가 악의적으로 또는 부주의하게 Tomcat 프로세스의 무결성을 조작하는 것을 방지 할 수 있습니다."
접근 제한 설정 : $CATALINA_HOME/webapps/ "$CATALINA_HOME/webapps 디렉토리에는 Tomcat을 통해 배포되는 웹 응용 프로그램이 포함되어 있습니다. 이 디렉토리의 소유권은 tomcat_admin : tomcat입니다. 또한 $CATALINA_HOME/webapps에 대한 권한은 전체(o-rwx)에 대한 읽기, 쓰기 및 실행을 금지하고 그룹 (g-w)에 대한 쓰기 액세스를 금지하는 것이 좋습니다. 이러한 디렉토리에 대한 액세스를 제한하면 로컬 사용자가 악의적으로 또는 부주의하게 웹 애플리케이션의 무결성을 조작하는 것을 방지 할 수 있습니다."
접근 제한 설정 : catalina.policy "catalina.policy 파일은 Tomcat에 대한 보안 정책을 구성하는 데 사용됩니다. 이 파일에 대한 액세스 권한이 변경되지 않도록 적절하게 보호 할 수 있는 적절한 권한이 있는 것이 좋습니다. 이 파일에 대한 액세스를 제한하면 로컬 사용자가 톰캣의 보안 정책을 악의적으로 또는 우연히 변경하는 것을 방지 할 수 있습니다."
접근 제한 설정 : catalina.properties "catalina.properties는 클래스 로더 정보, 보안 패키지 목록 및 성능 등록 정보를 포함하여 Tomcat에 대한 설정을 포함하는 Java 등록 정보 파일입니다. 이 파일에 대한 액세스 권한이 변경되지 않도록 적절하게 보호 할 수 있는 적절한 권한이 있는 것이 좋습니다. 이 파일에 대한 액세스를 제한하면 로컬 사용자가 톰캣의 보안 정책을 악의적으로 또는 우연히 변경하는 것을 방지 할 수 있습니다."
접근 제한 설정 : context.xml "context.xml 파일은 모든 웹 응용 프로그램에 의해 로드되고 특정 구성 옵션을 설정합니다. 이 파일에 대한 액세스 권한이 변경되지 않도록 적절하게 보호 할 수 있는 적절한 권한이 있는 것이 좋습니다. 이 파일에 대한 액세스를 제한하면 로컬 사용자가 톰캣의 보안 정책을 악의적으로 또는 우연히 변경하는 것을 방지 할 수 있습니다."
접근 제한 설정 : logging.properties "logging.properties는 로깅 구성을 지정하는 Tomcat 파일입니다. 이 파일에 대한 액세스 권한이 변경되지 않도록 적절하게 보호 할 수 있는 적절한 권한이 있는 것이 좋습니다. 이 파일에 대한 액세스를 제한하면 로컬 사용자가 톰캣의 보안 정책을 악의적으로 또는 우연히 변경하는 것을 방지 할 수 있습니다."
접근 제한 설정 : server.xml "server.xml에는 Tomcat 서블릿 정의 및 구성이 포함되어 있습니다. 이 파일에 대한 액세스 권한이 변경되지 않도록 적절하게 보호 할 수 있는 적절한 권한이 있는 것이 좋습니다. 이 파일에 대한 액세스를 제한하면 로컬 사용자가 톰캣의 보안 정책을 악의적으로 또는 우연히 변경하는 것을 방지 할 수 있습니다."
접근 제한 설정 : tomcat-users.xml "tomcat-users.xml에는 Tomcat 응용 프로그램에 대한 인증 정보가 들어 있습니다. 이 파일에 대한 액세스 권한이 변경되지 않도록 적절하게 보호 할 수 있는 적절한 권한이 있는 것이 좋습니다. 이 파일에 대한 액세스를 제한하면 로컬 사용자가 톰캣의 보안 정책을 악의적으로 또는 우연히 변경하는 것을 방지 할 수 있습니다."
접근 제한 설정 : web.xml "web.xml은 응용 프로그램 구성 설정을 저장하는 Tomcat 구성 파일입니다. 이 파일에 대한 액세스 권한이 변경되지 않도록 적절하게 보호 할 수 있는 적절한 권한이 있는 것이 좋습니다. 이 파일에 대한 액세스를 제한하면 로컬 사용자가 톰캣의 보안 정책을 악의적으로 또는 우연히 변경하는 것을 방지 할 수 있습니다."
안전하지 않은 Realms 사용 제한 "realm이란 사용자의 유효한 웹 응용 프로그램을 식별하는 데 사용되는 사용자 이름과 암호의 데이터베이스입니다. Realms 구성을 검토하여 Tomcat이 아래에 나열된 realm은 사용하지 않도록 설정해야 합니다. - MemoryRealm, JDBCRealm, UserDatabaseRealm, JAASRealm"
LockOut Realms 사용 LockOut realm은 로그인 실패가 여러번 발생할 때, 사용자 로그인을 잠글 수 있는 기능입니다. 여러번 로그인을 실패한 계정을 잠그면 무작위 대입 공격에 대하 위협을 줄일 수 있습니다.
Connector 옵션 : clientAuth=true로 설정 Client-cert 인증에는 서버에 연결하는 각 클라이언트에 인증에 사용되는 인증서가 있어야 합니다. 이는 일반적으로 암호만으로 인증을 하는 방식에 비해, 클라이언트 인증서도 함께 가지고 있어야 하므로 암보 기반 인증보다 강력한 인증으로 간주됩니다.
Connector 옵션 : SSLEnabled, secure 옵션 확인 "보안 속성은 커넥터 보안 상태를 커넥터를 통해 작동하는 응용 프로그램에 전달하는 데 사용됩니다. 이것은 일반적으로 request.isSecure()를 호출하여 수행됩니다. SSLEnabled 속성이 true로 설정된 커넥터에 대해 secure 속성이 true로 설정되었는지 확인하십시오. 커넥터의 보안 상태를 정확하게 보고하는 것은 Tomcat에 기반한 애플리케이션이 의도하지 않은 보안 통제 장치에 의존하지 않는다는 것을 보장하는 데 도움이 됩니다."
Connector 옵션 : sslProtocol=TLS 사용 "sslProtocol 설정은 Tomcat이 트래픽 보호에 사용할 프로토콜을 결정합니다. sslProtocol 특성을 TLS로 설정하는 것이 좋습니다. TLS 프로토콜에는 SSLv1 또는 SSLv2와 같이 다른 보안 전송 프로토콜에 영향을주는 약점이 없습니다. 따라서 TLS는 전송 중에 데이터의 기밀성과 무결성을 보호하기에 적합합니다."
Tomcat이 Security Manager를 이용하여 실행되어야 함 "Security Manager를 사용하여 샌드 박스에서 실행되도록 응용 프로그램을 구해야 합니다. Security Manager는 Tomcat이 액세스 할 수 있는 클래스를 제한하여 실수 또는 트로이 목마, 악성 코드로부터 서버를 보호합니다. Security Manager로 Tomcat을 실행하면 신뢰할 수 없는 코드가 파일 시스템의 파일에 액세스하지 못 하도록 막을 수 있는 샌드 박스에서 응용 프로그램이 실행됩니다."
자동 배포(autoDeploy) 기능 사용 금지 autoDeploy 옵션은 Tomcat이 실행되는 중에 응용 프로그램의 자동 배포를 허용합니다. 이 기능은 사용하지 않는 것이 좋습니다. 실행시에 자동배포 가능한 경우, 악의적이거나 검증되지 않은 애플리케이션이 배포될 수 있는 우려가 있습니다.
시동시 자동배포(deployOnStartup) 기능 사용 금지 deployOnStartup 옵션은 Tomcat이 시동될 때 응용 프로그램의 자동 배포를 할지 결정하는 flag입니다. 이 기능을 사용하지 않도록 설정하는 것이 좋습니다. 이를 통해 악성 또는 검증되지 않은 응용 프로그램을 배포할 수 있으며 사용하지 않도록 설정해야 합니다.
RECYCLE_FACADES 옵션 사용 "RECYCLE_FACADES 옵션은 각 요청에 대해 새 façade가 작성되는지 여부를 지정할 수 있습니다. 새로운 façade가 만들어지지 않으면 다른 세션에서 정보 유출 가능성이 있으므로 true로 설정하는 것이 좋습니다. RECYCLE_FACADES가 false로 설정되면 Tomcat은 요청 사이에 세션 façade를 재활용합니다. 이렇게하면 서로 다른 요청간에 정보가 유출 될 수 있습니다."
경로 구분 기호를 추가하는 옵션 (ALLOW_BACKSLASH) 사용 금지 Tomcat에서 다른 경로 구분 기호를 지정할 수 있으면, 공격자가 이전에 mod_proxy와 같은 프록시에서 차단 한 응용 프로그램에 액세스 할 수 있는 가능성이 생깁니다. 추가적인 경로 구분 기호를 허용하면 공격자가 이전에 표시되지 않은 응용 프로그램이나 영역을 가져올 우려가 있으므로 ALLOW_BACKSLASH 옵션은 사용하지 않는 것이 좋습니다.
경로 구분 기호를 추가하는 옵션 (ALLOW_ENCODED_SLASH) 사용 금지 Tomcat에서 다른 경로 구분 기호를 지정할 수 있으면, 공격자가 이전에 mod_proxy와 같은 프록시에서 차단 한 응용 프로그램에 액세스 할 수 있는 가능성이 생깁니다. 추가적인 경로 구분 기호를 허용하면 공격자가 이전에 표시되지 않은 응용 프로그램이나 영역을 가져올 우려가 있으므로 ALLOW_ENCODED_SLASH 옵션은 사용하지 않는 것이 좋습니다.
사용자 정의 상태 메시지 (USE_CUSTOM_STATUS_MSG_IN_HEADER) 옵션 사용금지 "사용자 정의 상태 메시지를 지정할 수 있으면 추가 헤더를 삽입 할 수 있는 우려가 있습니다. 사용자 지정 헤더 상태 메시지가 필요한 경우 US-ASCII 형식인지, 사용자가 제공한 데이터는 포함되어 있지 않은지 확인하십시오. 헤더에서 사용자가 제공 한 데이터를 허용하면 XSS가 가능합니다."
enableLookups 옵션 사용 금지 "Connector에서 enableLookups 옵션을 true로 설정하려면 정보를 로깅 하기 전에 DNS look-up이 필요합니다. 로깅을 추가할 때는 리소스가 추가됩니다. enableLookups를 허용하면 드물게 추가 오버 헤드가 추가될 수 있습니다."

Nginx 점검 항목

점검 항목 점검 항목 설명
버퍼 오버플로우 방지 - client_body_buffer_size 설정 클라이언트 요청의 body 내용을 읽기 위한 버퍼 크기를 설정합니다. 요청 본문이 버퍼보다 큰 경우, 본문 전체 또는 해당 파트만 임시 파일에 기록됩니다. 기본적으로 버퍼 크기는 메모리 페이지 두개와 같습니다. 32비트(x86) 플랫폼 및 x86-64에서 8K 사이즈로 기본 설정됩니다. 일반적으로 64비트 플랫폼에서는 16K 사이즈로 설정합니다.
버퍼 오버플로우 방지 - client_header_buffer_size 설정 클라이언트 요청 헤더를 읽기 위한 버퍼의 크기를 설정합니다. 대부분의 요청은 1K바이트 버퍼로도 충분합니다. 하지만 요청에 긴 쿠키가 포함되어 있거나 WAP 클라이언트의 요청인 경우 1K 사이즈가 부족할 수 있습니다. 요청 또는 요청 헤더 필드가 이 버퍼에 맞지 않으면 large_client_header_buffers 명령으로 구성된 더 큰 버퍼를 할당해야 합니다.
버퍼 오버플로우 방지 - client_max_body_size 설정 "클라이언트 요청 body의 허용되는 최대 크기를 설정합니다. 이 크기는 ""Content-Length"" 요청 헤더 필드에 지정됩니다. 요청의 크기가 구성된 값을 초과하면 413(Request Entity Too Large) 오류가 클라이언트로 반환됩니다. 브라우저에서 이 오류를 올바르게 표시할 수 없습니다. 크기를 0으로 설정하면 클라이언트 요청 바디 크기를 확인할 수 없습니다. 100K 이상으로 설정하는 것을 권장합니다."
버퍼 오버플로우 방지 - large_client_header_buffers 설정 클라이언트 요청 헤더를 읽는 데 사용되는 버퍼의 최대 크기를 설정합니다. 요청 행은 버퍼 크기를 초과할 수 없으며, 414 (Request-URI Too Large) 오류가 클라이언트로 반환됩니다. 요청 헤더 필드는 버퍼 크기를 초과할 수 없으며, 그렇지 않으면 400 (Bad Request) 오류가 클라이언트로 반환됩니다. 버퍼는 수요가 있을 때만 할당된다. 기본적으로 버퍼 크기는 8K 바이트입니다. 요청 처리가 끝난 후 연결이 keep-alive 상태로 전환되면 버퍼가 해제됩니다.
버전 정보 삭제 server_tokens 옵션은 Nginx에게 오류 페이지에 현재 버전을 표시할 것인지를 설정합니다. 이는 특정 버전의 알려진 취약점으로 인한 웹 서버 공격을 방지하기 위해, 해당 정보를 공유하지 않도록 설정되어야 합니다.
Slow HTTP DoS 공격 차단 - client_body_timeout 클라이언트 요청에 대한 본문 읽기 시간 제한을 정의합니다. 이 제한시간은 전체 요청 본문의 전송이 아닌, 두개의 연속 읽기 작업 사이의 기간에 대해서 설정됩니다. 클라이언트가 이 시간 내에 전송하지 않으면 408(Request Time-out)) 오류가 클라이언트로 반환됩니다.
Slow HTTP DoS 공격 차단 - client_header_timeout 클라이언트 요청 헤더를 읽기 위한 제한시간을 정의합니다. 클라이언트가 이 시간 내에 전체 헤더를 전송하지 않으면 408((Request Time-out) 오류가 클라이언트로 반환됩니다.
Slow HTTP DoS 공격 차단 - keepalive_timeout keep-alive 제한시간을 설정합니다. 첫번째 매개 변수는 서버 측에서 keep-alive 클라이언트 연결이 열린 상태로 유지될 시간 제한을 설정합니다. 0 값은 keep-alive클라이언트 연결을 사용하지 않도록합니다. 선택적인 두번째 파라미터는 "keep-alive:timeout=time"응답 헤더 필드에 값을 설정합니다. 두개의 파라미터는 서로 다를 수 있습니다. "keep-alive:timeout=time"헤더 필드는 Mozilla와 Konqueror에 의해 인식됩니다. MSIE는 자체적으로 keep-alive 연결을 60초 후에 닫습니다.
Slow HTTP DoS 공격 차단 - send_timeout 클라이언트에 응답을 전송하기 위한 시간 제한을 설정합니다. 이 제한시간은 전체 응답을 전송하기 위한 것이 아니라, 두개의 연속 쓰기 작업 사이에서만 설정됩니다. 클라이언트가 이 시간 내에 아무 것도 수신하지 못하면 연결이 닫힙니다.
SSL/TLS 설정 가능하면 SSLv2, SSLv3 등을 사용하지 않도록 설정해야 합니다. 대신 TLS를 사용하는 것을 권장합니다.
BEAST 공격 차단을 위한 서버 사이드 설정 BEAST 또는 "SSL/TLS에 대한 브라우저 익스플로잇"은 SSL/TLS와 함께 사용되는 암호 블록 체인(CBC)에 대한 공격입니다. 이 공격을 방지하기 위해서, 클라이언트 대신에 서버에 의해 결정되도록 암호에 대한 선호도를 설정해야 합니다.
안전하지 않은 암호방식 사용 금지 트리플 DES는 상대적으로 오래 된 암호로, 지난 18년 동안 여러가지 취약점이 확인되었습니다. 때문에 DES를 포함한 취약한 암호화 방식은 사용하지 않도록 설정하여야 합니다.
클릭재킹 방지 구성에서 전체적으로 적용되는 보호 헤더를 클릭합니다. HSTS 헤더는 HTTPS에만 존재합니다. 중요한 데이터는 캐시 또는 저장되지 않습니다.
content-type 스니핑 차단 설정 HTTP 응답의 헤더에 MIME 형식을 추가하여 전송하여 보안 위험을 방지합니다. 헤더가 브라우저에 파일 형식을 정의된 대로 콘텐츠 스니핑을 허용하지 않도록, nosniff 옵션을 추가하여야 합니다.
Cross-site scripting (XSS) 필터 설정 Cross-site scripting (XSS) 공격을 방지하기 위하여 X-XSS-Protection 옵션을 설정해야 합니다. X-XSS-Protection 옵션을 설정하여 어느 정도의 XSS공격을 방지할 수 있으며 이는 IE8+, 크롬, 오페라, 안드로이드 사파리와 호환됩니다.
안전한 SSL 보안 설정 ssl stripping 공격을 당하면 피해자 시스템의 모든 트래픽은 해커가 생성한 프록시를 통해 라우팅 되며 이는 MITM(Man-In-the-Middle)공격으로 간주할 수 있습니다. 공격을 방지하기 위하여 nginx의 보안 설정에 Strict-Transport-Security 헤더를 추가해야 합니다.

""에 대한 건이 검색되었습니다.

    ""에 대한 검색 결과가 없습니다.

    처리중...