본문 바로가기
Security/보안가이드

[보안가이드] Tomcat Version 정보 노출 방지

by 선인장 🌵 2023. 1. 10.
728x90
728x90

Tomcat Version 정보 노출 방지

Tomcat은 Apache와 연계하여 많이 사용하지만 연계된 Port 오픈 혹은 독립적으로 Web Server로 사용하는 경우가 있다.

이때 기본 설정 그대로 사용할 경우 Response Header 및 Default Error Page 등에서 Tomcat Version이 노출된다.

Tomcat Version 정보가 노출이 되어도 문제가 없다고 생각할 수 있으나 매우 큰 오산이다.

이렇게 Version 정보가 노출이 된 경우 해당 Tomcat Version에 알려진 취약점을 이용하여 좀 더 쉽게 공격이 가능하다.

쉽게 이야기해보자면 Version 정보를 모른다면 100번 만에 공격이 성공될 수 있겠지만 정확한 Version 정보를 알고 있다면 해당 Version에 맞는 취약점등을 이용한다면 단 한 번의 공격으로도 성공될 수 있다.

그러니 별 문제가 아니라고 생각하지 말고 반드시 서비스에 사용하거나 외부에 공개되는 경우라면 Tomcat Version 정보는 제거하여 사용하도록 하자.

그렇다면 어떻게 적용하면 되는지 한번 알아보도록 하자.

[보안가이드] Tomcat Version 정보 노출 방지

728x90

1. 기본 Version 정보 확인

일단 Tomcat 최초 설치 후 아무런 설정을 하지 않은 상태로 구동을 하였다면 아마도 아래와 같이 Response Header 및 Default Error Page에서 설치한 Tomcat Version 정보에 대해서 확인할 수 있을 것이다.

  • $ curl -i {서비스 주소}
# Response Header 및 Default Error Page Tomcat Version 확인

$  curl -i http://127.0.0.1:8080
HTTP/1.1 404
Server: Apache-Coyote/1.1
Content-Type: text/html;charset=utf-8
Content-Language: en
Content-Length: 682
Date: Mon, 09 Jan 2023 08:12:39 GMT

... 이하 생략 ...
<h3>Apache Tomcat/9.0.70</h3>
... 이하 생략 ...

Response Header에서는 "Apache-Coyote/1.1"라는 Version 정보를 Default Error Page에서는 "Apache Tomcat/9.0.70"라는 Version 정보를 확인할 수 있다.

Tomcat이 설치된 위치에서 Version 정보를 확인해보면 동일하게 나오는 것을 확인할 수 있다.

  • $ version.sh
# Tomcat Version 확인

$ ./version.sh
Using CATALINA_BASE:   /usr/local/tomcat
... 이하 생략 ...
Server version: Apache Tomcat/9.0.70
Server built:   Dec 1 2022 14:05:47 UTC
Server number:  9.0.70.0
OS Name:        Linux
OS Version:     5.15.49-linuxkit
Architecture:   aarch64
JVM Version:    17.0.5+8
JVM Vendor:     Eclipse Adoptium
728x90

2. Tomcat Version 제거 설정 하기

그럼 이제 Tomcat Version 정보가 노출이 되지 않도록 설정하는 방법을 각각 알아보도록 하자.

2.1 Header Version 제거 설정 하기

Response Header에서 Version 정보가 노출이 되지 않도록 설정하려면 Tomcat의 기본 설정 파일인 server.xml에서 사용하는 Connector 항목에서 Header 정보를 추가하면 된다.

# server.xml 설정 및 확인

$ vi server.xml
... 이하 생락 ...
<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" server="Web Server" />
... 이하 생략 ...


# 적용 및 재시작 후 확인
$ curl -i http://127.0.0.1:8080
HTTP/1.1 404
Content-Type: text/html;charset=utf-8
Content-Language: en
Content-Length: 672
Date: Mon, 09 Jan 2023 08:46:31 GMT
Server: Web Server

설정한 대로 Response Header에 나오는 것을 확인할 수 있다.

2.2 Default Error Page 제거 설정 하기

이번에는 Default Error Page에 노출되는 Version 정보를 제거해보도록 하자.

해당 부분을 적용하기 위해서는 Tomcat이 설치된 위치에서 "{Tomcat Path}/lib/org/apache/catalina/util" 경로로 접근 후 "ServerInfo.properties" 파일을 수정해 주면 된다.

만약 해당 경로 및 파일이 존재하지 않는 경우 생성해 주면 된다.

# ServerInfo.properties 설정 및 확인

$ vi ServerInfo.properties
server.info=Web Server
server.number=


# 적용 및 재시작 후 확인
$ curl -i http://127.0.0.1:8080
HTTP/1.1 404
Content-Type: text/html;charset=utf-8
Content-Language: en
Content-Length: 672
Date: Mon, 09 Jan 2023 08:46:31 GMT
Server: Web Server

... 이하 생략 ...
<h3>Web Server</h3>
... 이하 생략 ...

ServerInfo (Apache Tomcat 10.1.4 API Documentation)

public class ServerInfo extends Object Simple utility module to make it easy to plug in the server identifier when integrating Tomcat. Author: Craig R. McClanahan

tomcat.apache.org

설정한 대로 Default Error Page에서도 나오는 것을 확인할 수 있다.

2.3 ErrorReport 제거 설정 하기

ErrorReport가 발생될 경우 노출되는 Version 정보를 제거해보도록 하자.

Tomcat의 기본 설정 파일인 server.xml에서 사용하는 아래 내용을 추가해주면 된다.

  • <Valve className="org.apache.catalina.valves.ErrorReportValve" showReport="false" showServerInfo="false" />
# ErrorReportValve 설정을 통한 버전 정보 노출 수정

$ vi server.xml
... 이하 생략 ...
<Valve className="org.apache.catalina.valves.ErrorReportValve" showReport="false" showServerInfo="false" />

이번에는 Tomcat Version 정보를 제거하는 방법에 대해서 알아보았다.

물론 이 방법만으로 모든 공격을 막아낼 수는 없다.

하지만 조금이라도 정보 노출을 줄여 쉽게 공격을 당하지 않도록 설정하여 서비스를 하는 편이 더 좋을 것이라고 생각한다.

728x90
728x90


🌵댓글

 

loading