Rocky Linux - Web Server(HTTP) + Apache tomcat 버전 정보 노출 방지

     

    ※ 테스트 환경

    Rocky Linux - HTTP(2.4.x)/Apache Tomcat(10.0.10) 연동 서버

    Windows 서버에 설치했더라도 확인 방법 및 적용은 비슷합니다.

    보안 취약점 조치 관련으로 공유합니다.

     

    □ 확인 방법(순서대로)

    ※ 브라우저는 엣지(Edge)로 하였으며 크로미움 기반은 대체로 동일한 패턴입니다.

    [F12] 클릭 또는 오른쪽 상단(···) 클릭 ▷ 기타 도구 ▶ 개발자 도구(Ctrl+Shifr+I) 클릭

     

    네트워크 클릭(기본 화면으로 불러올 수 있습니다.)

     

    개발자 도구 상태에서 사이트 재 접속(새로 고침), 이름 부분에서 처음으로 불러오는 기본 페이지 이름을 선택하면 됩니다.(일반적으로 호스트로 연결되어 있다면 Index.jsp 등을 선택합니다.) 머리글을 클릭하면 정보를 불러오며 그중 응답 헤더의 Server 정보를 확인하면 됩니다. 버전 정보가 나온다면 보안 취약점에 감지될 수 있습니다.

     

    문서(에러) 페이지에서도 버전 정보 노출이 됩니다.

     

     

    □ 조치 방법

    ※ HTTP/Tomcat 연동이므로 2개 모두 설정에서 지시문 추가 또는 변경해야 합니다.

    ① 아파치(httpd.conf) 설정

    [root@localhost ROOT]# vi /etc/httpd/conf/httpd.conf

     

    ServerSignature OFF  (옵션이 없으면 추가)

    ServerTokens Prod  (옵션이 없으면 추가)

    ◎ 추가 설명

    공식 사이트 지시어 참고 : http://httpd.apache.org/docs/2.4/mod/directives.html

    ServerSignature - 서버 생성 문서의 바닥글 구성, 즉 에러 메시지 같은 문서 출력 시 하단에 정보를 ON/OFF 하는 옵션, 기본적으로 OFF로 되어 있지만 확실하게 하기 위해 지시문을 추가합니다.

     

    ServerTokens - ServerHTTP 응답 헤더를 구성합니다. 지시어가 없다면 기본적으로 OS/FULL 상태입니다.

    다음과 같이 표시가 됩니다.

     

    ServerTokens Full - 예 :Server: Apache/2.4.2 (Unix) PHP/4.2.2 MyMod/1.2

    ServerTokens OS - 예 :Server: Apache/2.4.2 (Unix)

    ServerTokens Min - 예 :Server: Apache/2.4.2

    ServerTokens Minor - 예 :Server: Apache/2.4

    ServerTokens Major - 예 :Server: Apache/2

    ServerTokens Prod - 예 :Server: Apache  (보안 조치에서 가장 많이 요구하는 지시문)

     

    ※ 웃긴 건 공식 홈페이지에서도 다음과 같이 안내문이 있습니다. ServerTokens Min 이하로 설정하면 운용성 문제(디버그)하기가 더 어렵기 때문에 권장하지 않는다고 나와있습니다. 또한 Server(헤더)를 비활성화한다고 해서 보안이 강화되지 않습니다. "숨김을 통한 보안"이라는 생각은 루머이며 잘못된 보안 상식으로 이어집니다. 굳이 할 필요 없으며 취약한 부분은 빠르게 피드백하여 패치하는 방향이 더욱 안전하다는 뜻입니다. 뭐.. 보안 솔루션 업체에서 하라고 하면 해야겠지만요

     

    ② 톰캣 설정(server.xml)

    [root@localhost ~]# vi /opt/tomcat/conf/server.xml  (톰캣 설치 경로의 Server.xml 파일 수정)

     

        <Connector port="8080" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8443" server="Apache" (임의 값 추가) />

     

        <Connector protocol="AJP/1.3"
                   address="::1"
                   port="8009"
                   secretRequired="false"

                   server="Apache" (임의 값 추가)
                   redirectPort="8443" />

    ◎ 추가 설명

    server - 들어오는 Connector 부분에 전부 추가해주면 됩니다. 기본값은 표시이지만 다음과 같이 지시문에 server="임의 값 추가" 표시하고 싶은 값을 넣으면 됩니다. 만약 빈칸으로 값을 넣을 경우는 server=" " 중간에 띄어쓰기 한번 해야 합니다.

     

    ③ 톰캣 설정(web.xml)

    [root@localhost ~]# vi /opt/tomcat/conf/web.xml  (톰캣 설치 경로의 web.xml 파일 수정)

     

    (맨 하단 추가)

       <error-page>
           <error-code>404</error-code>
           <location>/error404.html</location>
       </error-page>
       <error-page>
           <error-code>500</error-code>
           <location>/error500.html</location>
       </error-page>

    ◎ 추가 설명

    error-page - 사용자가 직접 만든 에러 페이지를 연결할 때 쓰는 지시문입니다. 여기서는 일부러 없는 경로의 페이지로 연결하여 보고서나 버전 정보를 노출되지 않도록 하는 방법입니다. location의 임의 이름. html으로 설정하면 됩니다.

     

    □ 적용 확인

    ① 설정 적용하기

    [root@localhost ~]# systemctl restart httpd  (아파치 재시작)

    [root@localhost ~]# systemctl restart tomcat  (톰캣 재시작)

     

    ※ Tomcat의 경우는 별도의 Service를 등록하여 사용한 명령어로 일반적으로는 톰캣 설치 경로의 중지 시작 스크립트를 이용

    [root@localhost ~]# /opt/tomcat/bin/shutdown.sh

    [root@localhost ~]# /opt/tomcat/bin/startup.sh

     

    ② 서버에서 명령어(Curl)로 헤더 정보 확인

    [root@localhost ~]# curl --head localhost

    HTTP/1.1 200 200
    Date: Mon, 06 Sep 2021 08:45:03 GMT
    Server: Apache  (해당 부분을 확인)
    Content-Type: text/html;charset=UTF-8

     

    ③ 브라우저에서 확인

     

    오타나 잘못된 정보가 있다면 댓글에 남겨주시기 바랍니다. 감사합니다.

    Designed by JB FACTORY