본문 바로가기
SW Developer/Server

우분투 ubuntu 아파치 톰캣 apache tomcat 웹서버 정보 노출 보안 설정 및 강화 변경 방법

by ashespia 2021. 10. 21.
SMALL

apache tomcat이 현재 10 버전 까지 나와있지만 현재 사용하고 있는 Tomcat 서버는 tomcat6과 tomcat7이다.

업체에 보안 이슈개선 요청으로 해당 부분 tomcat 정보 표시 안되도록 개선 한 내용 정리

 

whereis 명령어로 tomcat 관련 설정파일의 위치를 확인 할 수 있다. 

 

root@ubuntu: ~]whereis tomcat7
tomcat7: /etc/tomcat7 /usr/share/tomcat7

 

이외에 러닝 상태의 tomcat 웹서버는 /var/lib/tomcat7 이 있다. 

 

tree -L 명령어로 구조를 확인 할 수 있다.

 

root@ubuntu: /var/lib/tomcat7]tree -L 2
|-- common
|-- conf -> /etc/tomcat7
|-- logs -> ../../log/tomcat7
|-- policy
|   `-- catalina.policy
|-- server
|   `-- classes
|-- shared
|   `-- classes
|-- webapps
|   |-- Fota_Web
|   |-- ROOT

 

아파치 톰캣 apache tomcat 웹서버의 정보 노출은 크게 3가지 영역에 존재한다. 

해당 부분 수정을 통해 웹서버 관련 정보를 노출되는 것을 개선할 수 있다. 

 

1. Root 영역에 표시되는 정보 수정 

 

브라우저 주소창에 myweb.co.kr:8080 입력하면, tomcat7의 루트 경로에 접근 시에 index.html 파일을 화면에 보여준다.이하 이미지에서 처럼 web server가 tomcat7임을 알 수 있다.

 

보안상 현재 서버의 웹서버의 종류를 알 수 있기에 변경해어야한다.

수정 필요 파일 

/var/lib/tomcat7/webapps/ROOT/index.html

 

head에서와 html 본문 내부에 주요 파일 위치 및 apache tomcat의 관련 파일 정보들이 노출되어 있다.

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <title>Apache Tomcat</title>
</head>

<body>
<h1>It works !</h1>

<p>If you're seeing this page via a web browser, it means you've setup Tomcat successfully. Congratulations!</p>
 
<p>This is the default Tomcat home page. It can be found on the local filesystem at: <code>/var/lib/tomcat7/webapps/ROOT/index.html</code></p>

<p>Tomcat7 veterans might be pleased to learn that this system instance of Tomcat is installed with <code>CATALINA_HOME</code> in <code>/usr/share/tomcat7</code> and <code>CATALINA_BASE</code> in <code>/var/lib/tomcat7</code>, following the rules from <code>/usr/share/doc/tomcat7-common/RUNNING.txt.gz</code>.</p>

<p>You might consider installing the following packages, if you haven't already done so:</p>

<p><b>tomcat7-docs</b>: This package installs a web application that allows to browse the Tomcat 7 documentation locally. Once installed, you can access it by clicking <a href="docs/">here</a>.</p>

<p><b>tomcat7-examples</b>: This package installs a web application that allows to access the Tomcat 7 Servlet and JSP examples. Once installed, you can access it by clicking <a href="examples/">here</a>.</p>

<p><b>tomcat7-admin</b>: This package installs two web applications that can help managing this Tomcat instance. Once installed, you can access the <a href="manager/html">manager webapp</a> and the <a href="host-manager/html">host-manager webapp</a>.<p>

<p>NOTE: For security reasons, using the manager webapp is restricted to users with role "manager-gui". The host-manager webapp is restricted to users with role "admin-gui". Users are defined in <code>/etc/tomcat7/tomcat-users.xml</code>.</p>

</body>
</html>

 

index.html 변경 후 현재 사용중인 web server가 tomcat7임을 알 수 없다.

2.  HTTP 헤더에 표시되는 정보 노출 보안 처리 

 

HTTP 헤더에 서버(Server) 정보 확인을 위해 curl 명령어로 어떤 정보가 노출되는지 확인 할 수 있다.

 curl -v -I localhost:8080
* Rebuilt URL to: localhost:8080/
* Hostname was NOT found in DNS cache
*   Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 8080 (#0)
> HEAD / HTTP/1.1
> User-Agent: curl/7.35.0
> Host: localhost:8080
> Accept: */*
>
< HTTP/1.1 200 OK
HTTP/1.1 200 OK
* Server Apache-Coyote/1.1 is not blacklisted
< Server: Apache-Coyote/1.1
Server: Apache-Coyote/1.1
< Accept-Ranges: bytes
Accept-Ranges: bytes
< ETag: W/"306-1634628465000"
ETag: W/"306-1634628465000"
< Last-Modified: Tue, 19 Oct 2021 07:27:45 GMT
Last-Modified: Tue, 19 Oct 2021 07:27:45 GMT
< Content-Type: text/html
Content-Type: text/html
< Content-Length: 306
Content-Length: 306
< Date: Tue, 19 Oct 2021 07:39:03 GMT
Date: Tue, 19 Oct 2021 07:39:03 GMT

<
* Connection #0 to host localhost left intact

 

수정 전 화면

 

 

 

Header 정보는 ServerInfo.properties 파일에 존재하며, catalina.jar 파일에 포함되어 있다.

 

구글 검색을 통해서 알아 보면 보통 아래의 경로에 있다고 되어있다. 

 

$TOMCAT_HOME/lib/catalina.jar

$CATALINA_BASE/lib/catalina.jar

운영하고 있는 내 우분투 서버의 경로는 달랐다. 

 find 명령어로 catalina.jar 파일을 찾았다.

 

root@ubuntu: /]find . -name catalina.jar
./usr/share/tomcat7/lib/catalina.jar

 

root@ubuntu: /usr/share/tomcat7/lib]ls -al
total 8
drwxr-xr-x  2 root root 4096 Jun 11  2018 .
drwxr-xr-x 11 root root 4096 Jun 11  2018 ..
lrwxrwxrwx  1 root root   37 May 30  2018 catalina.jar -> ../../java/tomcat-catalina-7.0.52.jar

 

해당 파일은 링크되어있어서 원본 파일을 jar xvf 명령어로 압축을 푼 후 수정

 

 

root@ubuntu: /usr/share/java]jar xvf tomcat-catalina-7.0.52.jar

 

 

 

수정 전 ServerInfo.properties 내용 

root@ubuntu: /usr/share/java]vi org/apache/catalina/util/ServerInfo.properties

 

#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

server.info=Apache Tomcat/7.0.52 (Ubuntu)
server.number=7.0.52.0
server.built=May 30 2018 11:25:41

 

수정 후 ServerInfo.properties 내용 

server.info=Web/1.0.0
server.number=1.0.0
server.built=May 30 2018 11:25:41

 

원본 catalina.jar 파일 backup 폴더 생성 후 

적용전 백업 처리

 

root@ubuntu: /usr/share/java]mkdir lib_backup
root@ubuntu: /usr/share/java]mv tomcat-catalina-7.0.52.jar ./lib_backup/

 

수정 한 ServerInfo.properties 파일을 다시 jar 명령어로 압축 후 서비스 재기동 하였다.

 

root@ubuntu: /usr/share/java]jar cvf tomcat-catalina-7.0.52.jar ./org

 

apache tomcat7 restart 통해서 재기동

 

root@ubuntu: /usr/share/java]service tomcat7 restart
 * Stopping Tomcat servlet engine tomcat7                                                                                       [ OK ]
 * Starting Tomcat servlet engine tomcat7                                                                                         [ OK ]

 

 

수정 후 web 화면 

 

 

크롬부라우저 F12 디버깅 화면을 통해 http response headers 정보에도 server에 변경 수정한 web로 표시되는걸 확인할 수 있다.

 

 

 

 

curl 명령어로 HTTP 헤더 정보에 서버정보가 변경한 web로 변경됨을 확인 할 수 있다.

* Server Apache-Coyote/1.1 is not blacklisted < Server: Apache-Coyote/1.1 Server: Apache-Coyote/1.1

-> 
* Server Web is not blacklisted < Server: Web Server: Web

root@ubuntu: ~]curl -v -I localhost:8080
* Rebuilt URL to: localhost:8080/
* Hostname was NOT found in DNS cache
*   Trying 127.0.0.1...
* Connected to localhost (127.0.0.1) port 8080 (#0)
> HEAD / HTTP/1.1
> User-Agent: curl/7.35.0
> Host: localhost:8080
> Accept: */*
>
< HTTP/1.1 200 OK
HTTP/1.1 200 OK
< Accept-Ranges: bytes
Accept-Ranges: bytes
< ETag: W/"306-1634628465000"
ETag: W/"306-1634628465000"
< Last-Modified: Tue, 19 Oct 2021 07:27:45 GMT
Last-Modified: Tue, 19 Oct 2021 07:27:45 GMT
< Content-Type: text/html
Content-Type: text/html
< Content-Length: 306
Content-Length: 306
< Date: Tue, 19 Oct 2021 07:44:11 GMT
Date: Tue, 19 Oct 2021 07:44:11 GMT
* Server Web is not blacklisted
< Server: Web
Server: Web

<
* Connection #0 to host localhost left intact

 

tomcat의 version.sh 명령어로 톰캣 버전 정보 확인

 

root@ubuntu: /usr/share/tomcat7]./bin/version.sh
Using CATALINA_BASE:   /usr/share/tomcat7
Using CATALINA_HOME:   /usr/share/tomcat7
Using CATALINA_TMPDIR: /usr/share/tomcat7/temp
Using JRE_HOME:        /usr/lib/jvm/java-7-oracle
Using CLASSPATH:       /usr/share/tomcat7/bin/bootstrap.jar:/usr/share/tomcat7/bin/tomcat-juli.jar
Server version: Web/1.0.0
Server built:   May 30 2018 11:25:41
Server number:  1.0.0
OS Name:        Linux
OS Version:     4.4.0-31-generic
Architecture:   amd64
JVM Version:    1.7.0_80-b15
JVM Vendor:     Oracle Corporation

 

3.  Server.xml에서 보안 처리 

아파치 톰캣 apache tomcat의 서버 설정 파일에서 Server 항목을 추가하고 명시해주는 방법이다.

 

/var/lib/tomcat7/conf/server.xml

 

    <!-- A "Connector" represents an endpoint by which requests are received
         and responses are returned. Documentation at :
         Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
         Java AJP  Connector: /docs/config/ajp.html
         APR (HTTP/AJP) Connector: /docs/apr.html
         Define a non-SSL HTTP/1.1 Connector on port 8080
    -->
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               URIEncoding="UTF-8"
               redirectPort="8443" />

 

Connector 부분에 Server에 원하는 문구 입력하여 server.xml 수정 후 변경 됨을 확인할 수 있다. 

나의 경우 Server 문구에 web 이라고 변경하였다. 

 

    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               URIEncoding="UTF-8"
               redirectPort="8443"
               Server="Web" />

 

 

결론

웹서버를 직접설치해서 운영 관리한다고 하면 ServerInfo.properties 파일 수정으로 모든 error 발생 시 노출되는 서버정보를 막을 수 있다. 웹서버 환경에서 페이지와 사이트만 운영한다고 하는경우에는 자신의 릴리즈 파일 내부에서 처리해줘야 한다. 

LIST

댓글