본문 바로가기
IT 보안

아파치 톰캣 Apache Tomcat 보안 조치 가이드

by 떠도리c 2024. 8. 29.
반응형

아파치 톰캣 Apache Tomcat 보안 조치 가이드

 

 

계정 설정

유추 가능한 취약한 문자열 사용을 제한하여 계정 및 패스워드 추측 공격을 방어

Default 계정, 패스워드는 제거하고 유추하기 어려운 계정, 패스워드를 설정 한다.

  • 취약 계정 : admin, administrator, manager, guest, test, scott, tomcat, root, user, operator, anonymous 등
  • 취약 패스워드 : Abcd, aaaa, 1234, 1111, test, password, public, blank 패스워드, ID와 동일한 패스워드 등
파일 : tomcat-users.xml

# rolename or username, password, roles 를 추가/변경 등 설정

< ?xml version=’1.0′ encoding=’utf-8′?> 
< tomcat-users> 
<role rolename="tomcat"/> 
<role rolename="role1″/> 
<role rolename="standard"/> 
<role rolename="manager"/> 
<user username="tomcat" password="tomcat" roles="tomcat"/> 
<user username="both" password="tomcat" roles="tomcat,role1″/> 
<user username="dlfqjsrhksflwk1" password="VotmdnjemQhrwkq%%@!" roles="role1″/>  # 예시
</tomcat-users>

관리자 페이지(manager/html ) 비활성화

Tomcat은 보안상 기본 설정이 비활성화 상태로 설치됨

tomcat-users.xml 파일과 context.xml 파일에서 권한 및 접근 설정이 되어 있을 경우에 manager가 활성화 된다.

비활성화를 하고 싶다면 tomcat-users.xml, context.xml 파일의 설정을 기본값 또는 설정 내용을 주석 처리한다.

 

 

 

인가 IP만 접근 가능하도록 IP 접근 제어 설정

설정 변경 후 서비스 재시작 필요

파일 : server.xml

<Context path="" docBase="/" reloadable="true"> 
   <Valve className="org.apache.catalina.valves.RemoteAddrValve"  
        allow="192\.168\.0\.\d" /> # 192.168.0 대역 IP 허용, allow 부분에 IP 인가 IP 지정.
</Context>

# 접근을 제한하는 경우
<Valve className="org.apache.catalina.valves.RemoteAddrValve" deny="<제한 IP>"/>

--------------- or ---------------

파일 : context.xml

<Context antiResourceLocking="false" privileged="true" >
  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
        allow="192\.168\.0\.\d" />  
<Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
</Context>

--------------- or ---------------

파일 : manager.xml

<?xml version="1.0" encoding="UTF-8"?> 
<context antiresourcelocking="false" privileged="true"> 
    <Valve className="org.apache.catalina.valves.RemoteAddrValve"  
        allow="192\.168\.0\.\d+|127\.0\.0\.1" /> 
</context>

 

 

 

버전 정보 숨기기

공격자는 버전 정보를 통해 특정 버전 취약점을 이용한 공격을 할 수 있다.

server.xml 파일에서 <connector> 태그의 server 정보 추가/수정 후 서비스 재시작

<Connector port="8080" protocol="HTTP/1.1" server="AAAname">

 

 

 

디렉토리 인덱싱 (diractory indexing)

디렉토리 인덱싱(diractory indexing)은 서버의 모든 디렉토리, 파일을 볼 수 있는 취약점이다.

web.xml 파일 내용 중 servlet(서블릿) 부분 listings의 값이 false로 설정되어 있는지 확인한다.

파일 : web.xml

<servlet> 
    <init-param> 
        <param-name>listings</param-name> 
        <param-value>false</param-value> 
    </init-param> 
</servlet>

 

 

 

Apache 디렉토리 리스팅 제거

디렉토리 리스팅 기능 설정 시 외부사용자에게 디렉토리의 모든 파일을 노출되게 된다.

즉, 해당 디렉토리 구조 및 파일정보까지 보여지기 때문에 해커들에게 중요 설정 정보들이 공개되는 것이다.

Apache conf 디렉토리로 이동하면, httpd.conf 웹서버 환경파일이 존재한다. 

<Directory "DocumentRoot"> # Options 항목에 Indexes를 제거하면 된다. 
<Directory "/home/apache/test"> 
   Options Indexes  
</Directory>

 

 

 

Apache 불필요한 파일 제거

Apache 설치 시 디폴트로 매뉴얼과 디폴트 정보 파일들이 설치가 된다

설치된 해당 파일들은 버전정보랑 각종 유용한 정보들이 포함되어 있기 때문에 외부 시스템으로부터 정보들을 노출될 수 있다.

Apache 기본 디렉토리로 이동하면, cgi-bin 디렉토리가 보일 것이다. 
cgi-bin디렉토리 안에 모든 파일들을 제거 해줌으로써 해킹으로부터 안전해질 수 있다. 

# 예
/home/apache/cgi-bin
반응형