본문 바로가기
MAKESITE
무료 스캔 문의하기 로그인

점검 항목 · 보안

서버 · 프레임워크 버전 노출

버전을 감춘다고 취약점이 사라지지는 않습니다. 다만 버전으로 표적을 골라내는 자동화 도구의 명단에서 빠지는 효과는 실제로 있습니다.

심각도 낮음 보안 무료 스캔 판정 항목 /check/server-version

01DEFINITION

한 줄로 말하면

응답 헤더에 서버와 언어의 정확한 버전이 찍혀 있으면, 공격자는 그 버전에 알려진 취약점 목록을 그대로 대조합니다. 버전을 감춘다고 취약점이 없어지지는 않지만, 버전으로 대상을 골라내는 자동화 스캐너의 표적 목록에서 빠지는 효과는 실제로 있습니다. 설정 한 줄이라 남겨 둘 이유가 없는 항목입니다.

02RISK

없으면 무슨 일이 생기나

인터넷에는 대상을 가리지 않고 돌아다니며 응답 헤더를 수집하는 자동화 도구가 상시 돌고 있습니다. 이 도구들이 하는 일은 단순합니다. 헤더에서 버전을 읽고, 그 버전에 알려진 취약점이 있으면 목록에 올립니다. 공격은 그다음에 사람이 목록을 보고 시작합니다. 버전이 안 보이면 이 단계에서 그냥 넘어갑니다.

실제 위험은 버전이 낡았을 때 커집니다. 몇 년 전 버전이 그대로 찍혀 있다면 그 사이에 공개된 취약점 전부가 후보가 되고, 공개된 취약점에는 대개 공격 코드까지 함께 나와 있습니다. 이 경우 헤더를 감추는 것은 임시방편이고 업데이트가 본 조치입니다.

헤더 말고도 버전이 새는 곳이 있습니다. 오류 화면에 경로와 스택이 그대로 출력되는 설정, 관리자 페이지의 하단 표기, 기본 설치 상태로 남아 있는 안내 페이지가 대표적입니다. 헤더만 막고 이쪽을 두면 감춘 효과가 없습니다.

03CHECK IT YOURSELF

직접 확인하는 방법

아래는 저희를 거치지 않고 지금 해 보실 수 있는 방법입니다. 결과를 저희에게 보내실 필요도 없습니다.

  1. 01
    헤더 전체를 한 번 본다

    Server 와 X-Powered-By 를 확인합니다. Apache 뒤에 세부 버전이 붙어 있거나 PHP 버전이 그대로 찍혀 있으면 이 항목에 걸립니다.

    $ curl -sI https://example.com/ | grep -iE "^server|x-powered-by"
    server: Apache/2.4.58 (Unix) OpenSSL/1.1.1w
    x-powered-by: PHP/8.1.2
  2. 02
    오류 응답도 확인한다

    없는 주소를 요청해 보십시오. 기본 오류 페이지 하단에 서버 버전과 호스트명이 그대로 적혀 있는 경우가 많고, 정상 응답의 헤더만 손봐서는 이쪽이 남습니다.

    $ curl -s https://example.com/no-such-page-here | tail -n 5
  3. 03
    디렉터리 목록이 열리는지 본다

    인덱스 파일이 없는 경로를 요청했을 때 파일 목록이 그대로 나오면, 버전보다 더 많은 정보가 새고 있는 것입니다. 같이 확인하십시오.

    $ curl -s https://example.com/data/ | head -n 20

04HOW TO FIX

고치는 방법

서버 환경에 따라 적을 자리가 다릅니다. 아래는 가장 흔한 구성 기준이고, 적용 전에 현재 설정을 백업하십시오.

Apache — 표기를 최소로 줄인다

이 두 줄은 .htaccess 가 아니라 서버 설정 파일에 넣어야 합니다. ServerTokens 는 Server 헤더를 제품명까지만 줄이고, ServerSignature 는 오류 페이지 하단 표기를 지웁니다.

ServerTokens Prod
ServerSignature Off
PHP — X-Powered-By 를 없앤다

php.ini 를 고칠 수 있으면 expose_php 를 끄는 것이 가장 깔끔합니다. 고칠 수 없는 환경에서는 응답 헤더를 지우는 방식으로 대신합니다.

; php.ini
expose_php = Off

# 못 고치는 환경에서는 .htaccess 로
Header always unset X-Powered-By
디렉터리 목록을 막는다

버전 노출과 같은 성격의 정보 노출입니다. 한 줄이면 끝나고 부작용이 없습니다.

Options -Indexes
오류 화면에 내부 정보를 내보내지 않는다

운영 환경에서는 화면에 오류를 출력하지 않고 로그에만 남깁니다. 경로, 데이터베이스 이름, 쿼리가 방문자 화면에 그대로 나오는 것이 이 항목에서 가장 값비싼 노출입니다.

display_errors = Off
log_errors = On
주의. 버전을 감추는 것은 우선순위가 높은 조치가 아닙니다. 낡은 버전이 찍혀 있는 것을 발견했다면, 헤더를 지우기 전에 그 버전을 올리는 계획부터 잡으십시오. 감춰진 낡은 서버는 여전히 낡은 서버입니다.

05FAQ

자주 묻는 질문

버전을 감추는 게 실제로 도움이 되나요

공격을 막지는 못하지만 대상이 되는 빈도를 줄입니다. 대량으로 도는 자동화 도구는 버전으로 목록을 만드는 방식이라, 읽을 버전이 없으면 그 목록에 들어가지 않습니다. 보안 자체를 만드는 조치가 아니라 노출 면적을 줄이는 조치로 보시면 정확합니다.

Server 헤더를 아예 없앨 수는 없나요

Apache 는 표준 모듈만으로는 완전히 지울 수 없고 제품명까지가 한계입니다. 완전히 없애려면 별도 모듈이 필요하며, 그렇게까지 할 실익은 크지 않습니다. 세부 버전만 빠지면 이 항목의 목적은 달성됩니다.

헤더를 지웠는데 여전히 버전이 보인다고 합니다

다른 경로로 새고 있을 가능성이 큽니다. 오류 페이지 하단, 기본 설치 안내 페이지, 관리자 화면 표기, 특정 확장 모듈이 붙이는 헤더가 흔한 출처입니다. 없는 주소를 하나 요청해 응답 전체를 확인해 보십시오.

CMS 버전도 같이 감춰야 하나요

같은 성격의 항목입니다. 설치형 CMS 는 메타 태그나 정적 파일 경로에 버전을 남기는 경우가 많고, 이쪽이 서버 버전보다 표적이 되기 쉽습니다. 다만 CMS 는 감추기보다 최신 보안 패치를 적용하는 쪽이 훨씬 중요합니다.
여기까지는 항목 일반론입니다. 무엇이고 왜 문제이며 어떻게 고치는지는 감출 이유가 없어 그대로 적었습니다. 리포트에 들어가는 것은 귀사 사이트에서 실제로 어떤 값이 나왔는지 — 어느 주소의 어느 응답인지, 그 환경에서 어떤 순서로 적용해야 하는지, 예상 공수가 얼마인지입니다. 이 페이지만 보고 직접 고치셔도 되고, 실제로 그러시라고 적어 두었습니다.

GET STARTED

내 사이트는
이 항목을 통과할까요

주소만 넣으시면 이 항목을 포함해 25가지를 판정해 점수와 실패 개수를 보여 드립니다. 로그인도, 소유 확인도 필요 없습니다 — 전부 밖에서 관찰만 하는 항목이기 때문입니다.