Web/WAS 서비스 구축시 보안 유의사항
Web /WAS 기반의 서비스 구축시 보안에 유의해야할 사항 정리
SELinux
Linux 계열의 OS 를 사용한다면 SELinux 를 꼭 켜야 합니다(기본적으로 켜져 있습니다). SELinux 는 zero-day attack 이나 기타 보안 취약점으로 인해 서버가 공격받았을 경우 MAC(mandatory Access Control) 기반의 강력한 보호를 통해 2차 피해를 최소화해 해줍니다.
특히 SELinux 는 Web Server 에 대해 잘 설계된 policy 와 context 를 적용하고 있으므로 웹서버를 통해 해킹당했을 경우 피해를 최소화 합니다.
SElinux 를 켜려면 다음 절차를 따르세요.
sestatus 후 아래처럼 enforcing mode 인지 확인
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: enforcing
Mode from config file: enforcing
Policy version: 24
Policy from config file: targeted- vi /etc/sysconfig/selinux 후 SELINUX=enforcing 로 변경
- reboot
- sestatus 로 설정 확인
Apache Web Server
Web Server information hide
apache web server 는 browser에게 HTTP header에 다음과 같이 서버의 정보와 버전, 모듈등의 정보를 보냅니다.
HTTP/1.1 200 OK
Date: Sun, 10 Feb 2012 07:24:47 GMT
Server: Apache/2.2.17 (Win32) PHP/5.2.17
Vary: Accept-Encoding,Cookie
이런 정보는 공격자에게 유용한 정보이므로 숨겨야 합니다. httpd.conf 에 다음 설정을 수정합니다.
ServerTokens ProductOnly ServerSignature Off
위 설정을 적용하고 나면 다음과 같이 HTTP header 가 보내집니다.
HTTP/1.1 200 OK
Date: Sun, 10 Feb 2012 07:24:47 GMT
Server: Apache
Vary: Accept-Encoding,Cookie
참고 자료: How to hide apache information with ServerTokens and ServerSignature directives
민감한 resource가 있는 Location 제한
web 과 was 가 한 서버에 있는데 실수로 was 의 WEB-INF 를 DocumentRoot 에 설정했거나 tomcat 의 host-manager context 를 기본 암호로 설정하고 enable 했을시등 심각한 보안문제가 발생할수 있습니다.
apache web 에서 다음 설정으로 보안 문제를 해결할 수 있습니다.
tomcat manager를 지정한 IP 에서만 연결가능
## Deny tomcat manager url
<Location /manager>
Order deny,allow
Deny from all
Allow from
127.0
.
0.1
192.168.0.
0
/
24
tomcat
tomcat 은 root 가 아닌 일반 사용자로 구동합니다.
Context deploy 를 위해 host-manager Context 를 사용할 경우 default Context name(manager) 을 변경하고 암호를 새로 설정해 사용합니다. 기본 암호가 설정되어 있고 3번 접근 IP 제한이 안 걸려 있을 경우 외부에서 악성코드를 war 에 담아서 deploy 할 우려가 있습니다.
공격예82.117.233.102 - - [03/Apr/2013:13:30:38 +0900] "PUT /manager/deploy?path=/ApacheLoader HTTP/1.1" 200 57
82.117.233.102 - - [03/Apr/2013:13:30:43 +0900] "GET /manager/undeploy?path=/ApacheLoader HTTP/1.1" 200 59
username 에 tomcat 같이 유추가 쉬운 id 사용하지 않기
<role rolename="manager"/> <user username="darren" password="ReallyComplexPassword" roles="manager"/>
host manager 와 manager 는 특정 IP 나 내부에서만 연결 가능하게 설정합니다. 다음 설정은 톰캣이 구동된 서버 또는 192.168.152. 대역 서버와 localhost 에서만 연결 가능합니다.
conf/Catalina/localhost/manager.xmlconf/Catalina/localhost/manager.xml<?xml version="1.0" encoding="UTF-8"?> <Context antiResourceLocking="false" privileged="true"> <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192\.168\.152\.\d+|127\.0\.0\.1"/> </Context>
tomcat 셧다운은 Server 가 사용하는 포트(기본 8005)만 알면 로컬 시스템에 계정이 있다면 누구나 종료 시킬수 있습니다. 다음과 같이 telnet 으로 포트를 열고 종료 명령어를 보내봅시다.
$ telnet localhost 8005 Connected to localhost. Escape character is '^]'.
연결됐다는 프롬프트가 보이면 SHUTDOWN 을 입력하고 엔터를 치면 톰캣이 종료됩니다.
<Server port="8005" shutdown="goingdown">
이제 톰캣을 종료하려면 telnet 으로 서버 포트를 열어서 goingdown 를 입력해야 종료가 됩니다. 변경된 shutdown인 goingdown 은 유출되지 않게 주의해야 합니다. 다른 방법으로는 Server Port 를 사용하지 않는 방법도 있습니다. 다음과 같이 설정하면 서버 포트를 사용하지 않으므로 톰캣 종료시 kill 명령어를 사용해야 합니다.
<Server port="-1" shutdown="goingdown">
참고 자료: Best Practices for Securing Apache Tomcat 7
같이 보기