[여기보기]는 “여기서 보안의 기본을 챙기고 가자”의 약자로, 개발 과정에서 꼭 최소한으로 챙기면 좋을 보안 기초 설정을 앞으로 하나씩 공유할 예정입니다. 기초 내용이 주를 이루겠지만, 혹시라도 빼먹고 계신 것이 없는지 가끔 한 번씩 둘러봐 주세요.
안녕하세요, 넷마블 보안실 보안개발팀 이유진입니다.
‘서버’라는 단어를 들으면 무엇을 떠올리나요? 직군에 따라 다르겠지만 보통 서버에 가장 많이 설치하는 기능인 웹 서버나 웹 애플리케이션 서버(Web Application Server, 이하 WAS)를 떠올릴 것입니다. 아마도 IT 기술직군에 종사한다면 누구나 한 번 이상은 직접 웹 서버나 WAS를 설치해 본 적이 있을 것입니다.
WAS에는 핵심 기능을 제어하는 관리자 콘솔을 제공합니다. 그런데 처음 실무 환경에서 일할 때는 관리자 콘솔의 보안성을 소홀히 생각하기 쉽습니다. 기본으로 제공하는 계정명과 패스워드가 있기 때문입니다. 특히 외부에 공개되지 않는 서비스라면 변경하기 귀찮다는 이유로 기본 계정명과 패스워드를 그대로 두는 경우가 많습니다.
하지만 기본 계정명과 패스워드를 유지했다가 관리자 콘솔의 정보가 유출되는 경우 WAS와 관련된 모든 권한이 노출되어 대규모 보안 사고가 발생할 수 있습니다. 기본 계정명은 그대로 두고 패스워드만 바꿀 때도 ‘무작위 대입 공격’ 등으로 패스워드를 비교적 쉽게 알아낼 수 있으므로 보안 사고가 발생할 가능성이 높습니다.
- 무작위 대입 공격(Brute force Attack): 특정 암호를 풀기 위해 가능한 모든 값을 대입하는 것
이번에는 우분투와 아파치 톰캣(Apache Tomcat, 이하 톰캣)을 기반으로 관리자 콘솔의 기본 보안 관리 방법을 살펴보겠습니다.
WAS 기본 포트 사용 금지
보통 WAS를 설치했을 당시의 기본 포트를 그대로 놔두고 사용하는 사람이 꽤 있습니다. 어찌 보면 당연한 이야기겠지만, WAS의 기본 포트를 남이 잘 사용하지 않는 포트로 변경해 보안성을 높이는 것이 좋습니다. WAS에서 보통 사용하는 8080 등의 포트를 변경해주어야 합니다. 이때 다음 소개하는 문서를 참고해 여러 가지 서비스에서 사용하는 기본 포트 번호를 피해서 변경하는 것이 좋습니다.
조치 방안
톰캣이 실행 중이라면 실행 중지한 후 톰캣의 서버 환경 설정인 [Tomcat Dir]/conf/server.xml(패키지 관리 도구로 설치한 경우 우분투 리눅스는 ‘/etc/tomcat버전이름/server.xml’, CentOS는 ‘/etc/tomcat/server.xml’)을 열고 ‘<Connector port=” ” />’ 부분을 수정해 기본 포트인 8080을 다른 포트(여기에서는 8083)로 변경합니다.
<Connector port="8083" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
톰캣을 다시 실행한 후 웹 브라우저에서 http://WAS-IP:8083에 접속해 정상적으로 톰캣이 실행되는지 확인합니다.
참고로 관리자 콘솔은 꼭 필요한 경우에 한하여 사용하고 불필요한 경우 프로세스를 종료해두길 권합니다.
관리자 콘솔의 기본 계정명과 패스워드를 변경
WAS의 관리자 콘솔은 아예 처음부터 새 계정을 설정해야 하는 경우도 있고, 처음 관리자 콘솔에 접속하는 경우나 설정 변경을 위해서 admin, administrator, root 등 기본(default) 계정명을 제공하는 경우도 있습니다. 보안성을 높이려면 기본 계정명을 그대로 두지 말고 WAS 설치 직후 내부 지침 등에 따라 남들이 쉽게 유추하지 못하는 계정명과 패스워드로 바로 변경하는 것이 좋습니다.
조치 방안
톰캣이 실행 중이라면 실행 중지한 후 ‘[Tomcat Dir]/conf/tomcat-users.xml’(패키지 관리 도구로 설치한 경우 우분투 리눅스는 ‘/etc/tomcat버전번호/tomcat-users.xml’, CentOS는 ‘/etc/tomcat/tomcat-users.xml’)을 다음처럼 수정합니다. 보통 기본 계정명과 패스워드를 삭제하거나 주석 처리합니다.
<tomcat-users>
<!-- 이전 설정 생략 -->
<role rolename="admin-gui" />
<role rolename="admin-script" />
<role rolename="manager-gui" />
<role rolename="manager-status" />
<!-- 기본 계정명 주석 처리 -->
<!--
<user username="tomcat" password="tomcat" roles="tomcat" />
<user username="both" password="tomcat" roles="tomcat, role1" />
<user username="role1" password="tomcat" roles="role1" />
-->
<!-- 새로운 계정 생성 -->
<user username="새로운계정명" password="비밀번호"
roles="admin-gui, admin-script, manager-gui, manager-status" />
</tomcat-users>
다시 톰캣을 실행한 후 http://WAS-IP:8083/manager/html에 접속해 관리자 콘솔에 접속해봅니다. 계정명과 패스워드를 입력하라는 창이 등장하면 방금 설정한 새 계정 정보를 입력합니다.
로그인을 완료하면 Tomcat 웹 애플리케이션 관리자에 정상적으로 접속합니다.
참고로 기본 계정명을 변경할 수 없는 서비스라면, 관리자 콘솔을 사용할 필요가 없을 때는 기본 계정을 비활성화해두기를 바랍니다. 또는 기본 계정은 그대로 두더라도 패스워드 정책을 강화하거나 다요소 인증을 적용하는 형태로 보안성을 높이는 것이 좋습니다.
관리자 콘솔의 기본 경로를 변경
관리자 콘솔에 접속하는 경로 이름에는 보통 admin, manager, setting과 같은 단어를 사용합니다. 아니면 해당 단어를 접두사로 삼아 경로 이름을 정하기도 하죠. 그런데 이러한 이름은 개발자로 일한다면 누구나 쉽게 유추할 수 있으므로, WAS를 공격하려는 사람이라면 가장 먼저 접근할 수 있을지 확인해 보는 부분입니다. 일반적으로 사용하는 관리 콘솔 경로 이름과 전혀 상관없을 만한 이름을 사용하면 좀 더 안전합니다.
조치 방안
톰캣의 관리자 콘솔에 해당하는 http://WAS-IP:8083/manager/html의 디렉터리 경로는 ‘[Tomcat Dir]/webapps/manager’(패키지 관리 도구로 설치한 경우 우분투 리눅스는 ‘/usr/share/tomcat버전번호-admin/manager’, CentOS는 ‘/usr/share/tomcat/webapps/manager’)입니다. 그리고 관리자 콘솔 환경 설정에 해당하는 manager.xml의 디렉터리 경로는 ‘[Tomcat Dir]/webapps/host-manager/WEB-INF’(패키지 관리 도구로 설치한 경우 우분투 리눅스는 ‘/usr/share/tomcat-버전번호/host-manager/’, CentOS는 ‘/usr/share/tomcat/webapps/host-manager/’)입니다.
먼저 기존 톰캣 실행을 중지한 후 톰캣의 manager 디렉터리를 다음과 같이 수정합니다.
# 톰캣을 다운로드해서 설치한 경우
$ mv [Tomcat Dir]/webapps/manager [Tomcat Dir]/webapps/Netmarbles1231
# 패키지 관리 도구를 이용해 설치한 경우
$ mv /usr/share/tomcat버전번호-admin/manager /usr/share/tomcat버전번호-admin/Netmarbles123
다음 설정을 참고해 manager.xml의 ‘<Context path=” ” docBase=” ” />’ 중 톰캣 안에서 내부적으로 나뉘는 경로 정보를 수정합니다.
<!-- 이전 생략 -->
<!-- 변경 내용 -->
<Context path="/Netmarbles123"
docBase="[Tomcat Dir]/webapps/Netmarbles123"
privileged="true" antiResourceLocking="false" />
manager.xml의 이름도 바꿔줍니다.
# 톰캣을 다운로드해서 설치한 경우
$ mv [Tomcat Dir]/webapps/host-manager/WEB-INF/manager.xml [Tomcat Dir]/webapps/host-manager/WEB-INF/Netmarbles123.xml
# 패키지 관리 도구를 이용해 설치한 경우
$ mv /usr/share/tomcat-버전번호/host-manager/manager.xml /usr/share/tomcat-버전번호/host-manager/Netmarbles123.xml
톰캣을 다시 실행한 후 웹 브라우저에서 http://WAS-IP:8083/Netmarbles123/html에 접속해 정상적으로 톰캣 관리자 콘솔에 접속되는지 확인합니다.
익숙함과 귀찮음 대신 불편함에 적응하자
최근 클라우드 서비스 등에서 기본으로 제공하는 보안 기능만으로 보안 위험에 대처했다고 안심하는 사람들이 꽤 있습니다. 그런데 WAS 등에 발생하는 보안 위험은 가끔 전혀 예상치 못한 다른 보안 위험이 다가오기도 합니다.
오늘은 여러분이 사용하는 WAS 관리자 콘솔의 계정이 기본 계정명인지 확인하면 어떨까요? 무심코 여러분이 사용했던 기본 계정명을 바꾸는 것만으로도 좀 더 안전한 서비스를 유지할 수 있습니다. 보안은 설정의 어려움보다는 익숙함과 귀찮음을 물리치고 불편함에 적응하는 과정입니다.