웹 취약점 진단 항목 중에 서버 버전 및 정보의 노출을 확인하는 것이 있다. OWASP에서는 Fingerprint Web Server라고 명시하며, 노출 된 웹 서버의 버전이나 정보를 통해 공격자가 공격을 위한 힌트를 얻을 수 있기 때문에 노출을 자제하도록 권고한다.

OWASP Fingerprint Web Server

Risk는 크지 않지만 자주 나오는 취약점이기도 하다. Apache2를 사용할 때, 서버 버전이 노출되는지 확인하는 방법은 HTTP Response를 확인하는 것이다. Burp Suite로 HTTP Response를 잡아 확인 해 보면 아래와 같이 Server: Apache/2.4.18 (Ubuntu)가 출력된다.

이 정보를 통해 공격자가 해당 버전의 CVE 등을 찾아 공격을 시도 해 볼 수 있으므로 숨기는게 좋다고 한다.

내가 테스트 한 버전은 아래와 같다.

  • Ubuntu 16.04
  • Apache 2.4.18

일반적으로 Apache는 httpd.conf를 고치면 된다고 하는데, 찾아보니 Ubuntu에서는 httpd.conf가 사라졌다고 한다.

Why don’t I have a httpd.conf file in /etc/apache2?

때문에 Ubuntu에서는 서버 버전 정보를 숨기기 위해서는 /etc/apache2/conf-available/security.conf 파일을 수정해야 한다.

/etc/apache2/conf-enabled/에도 security.conf 파일이 있으나, 이는 conf-available 디렉터리의 파일과 연결 된 Symbolic Link 파일이다.

다시 /etc/apache2/conf-available/ 디렉터리에 가 보면 아래와 같이 security.conf 파일이 있다.

해당 파일을 열어 ServerTokens로 검색을 해 보면 아래와 같은 설정을 확인할 수 있다.

원래 초기값은 아래와 같다.

1
2
ServerTokens OS
ServerSignature On

해당 값을 아래와 같이 변경 해 준다.

1
2
ServerTokens Prod
ServerSignature Off

ServerTokens의 경우, Full, OS, Minimal, Minor, Major, Prod 중 하나로 설정할 수 있는데, Full이 가장 많은 정보를 출력하고 Prod가 가장 적은 정보를 출력 해 보안 상 권장 설정은 Prod다.

ServerSignatureOn, Off, EMail 중 하나로 설정할 수 있으며, 각각 출력하는 정보는 아래와 같다.

  • On : 서버 버전, 가상 호스트명
  • Off : 정보를 추가하지 않음
  • EMail : 서버버전, 가상호스트명과 함께 ServerAdmin 정보도 함께 보여 줌

설정을 위와 같이 변경했다면, 아래의 명령어를 통해 apache를 재실행 해 준다.

1
$ service apache2 restart

Apache를 재실행 한 후 다시 HTTP Response를 확인 해 보면 Server: Apache라는 정보만 나올 뿐 버전 정보나 OS 정보는 출력되지 않는 것을 확인할 수 있다.