아파치 톰캣(apache tomcat) 보안 강화하기

일반 사용자로 구동

일반적으로 WAS 는 웹 서버 기능도 내장하고 있는 경우가 많지만 웹 서버는 apache httpd 나 nginx 같은 제품을 사용하고 Reverse Proxy 로 WAS 와 연결하는 것이 보안과 확장성 측면에서 더 좋습니다.

reverse proxy


WAS 는 웹 서버를 겸용하지 않을 경우 1024 이후의 포트를 사용하면 되므로 root 가 아닌 일반 사용자로 구동해야 합니다.


톰캣 정보 숨기기

톰캣 제품명 숨기기

아파치 톰캣은 기본적으로 아래와 같이 HTTP 헤더에 Server 정보를 전송합니다.

$ curl -v -I localhost:8080

Server: Apache-Coyote/1.1
Content-Type: text/html;charset=UTF-8
Transfer-Encoding: chunked


이 정보를 가리려면 conf/server.xml 내의 Connector 에 Server 정보를 설정해 주고 재구동하면 됩니다.

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" 
               Server="Apache" />


톰캣 버전 정보 숨기기

톰캣은 기본적으로 404 나 500 같은 에러 발생시 기본 에러 페이지에 다음과 같이 버전을 표시합니다.

톰캣 버전 노출

제품명과 버전을 가리려면 다음과 같이 설정해 주면 됩니다.


톰캣 설치 폴더로 가서 lib 폴더로 들어간 후에 catalina.jar 파일 압축을 풀어줍니다.

cd $TOMCAT_HOME/lib
jar xvf catalina.jar

에디터로 tomcat  서버 정보를 담고 있는 프로터티 파일을 엽니다.

 vi org/apache/catalina/util/ServerInfo.properties


이제 프로퍼티에서 server.info 를 바꾸려면 이름(Ex: MyWAS) 으로 변경하고 저장합니다.

server.info=MyWAS
server.number=7.0.47.0
server.built=Oct 18 2013 01:07:38

톰캣을 다시 구동하고 에러 페이지에 가서 버전이 가려지는지 확인합니다.


커맨드 라인에서 현재 사용중인 톰캣의 버전을 확인하려면 터미널에서 다음 명령어를 입력합니다.

$ ./bin/version.sh

Server version: Apache Tomcat/8.0.44
Server built:   May 10 2017 17:21:09 UTC
Server number:  8.0.44.0
OS Name:        Linux
OS Version:     4.9.27-14.31.amzn1.x86_64


manager 기능 접근 제어

톰캣에는 host-manager 라는 관리자 기능이 포함되어 있고 기본 설정은 비활성화입니다.

이 기능을 사용하면 웹에서 새로운 Context 를 deploy 할 수 있기 때문에 host-manager Context 를 활성화하는 경우가 있습니다.

사용하지 않는 것을 강력히 권장하지만 만약 사용할 경우 설정 파일(conf/user.xml) 내 default Context name(manager) 을 변경하고 암호를 새로 설정해 사용합니다.


<role rolename="manager"/>
<user username="darren" password="ReallyComplexPassword" roles="manager"/>


그리고 manager 권한으로 연결할 수 있는 IP 를 제한합니다.


conf/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>


기본 암호가 설정되어 있고 접근 IP 제한이 안 걸려 있을 경우 외부에서 악성코드를 war 에 담아서 deploy 해서 톰캣을 악성 코드 경유지로 사용할 우려가 있습니다. 이런 공격을 당했을 경우 tomcat 이 일반 사용자로 구동되었다면 해당 계정을 삭제하면 되지만 root 로 구동되었다면 운영체제부터 새로 설치해야 할 수 있습니다.

Ref