본문 바로가기
서버구축 (WEB,DB)

웹서버 헤더에서 PHP 버전 정보 숨기기

by 날으는물고기 2008. 12. 18.

웹서버 헤더에서 PHP 버전 정보 숨기기

웹 서버 응답 메시지 헤더 정보 숨기기

- 웹서버 해더 정보란 다음과 같이 클라이언트가 Apache 웹서버에 접속했을 때 웹서버에서는 응답 메시지의 헤더를 말한다.
[root@hcjung conf]# telnet xxx.xxx.xxx.xxx 80
Trying xxx.xxx.xxx.xxx...
Connected to xxx.xxx.xxx.xxx.
Escape character is‘ ^]’.
GET / HTTP/1.1
HTTP/1.1 400 Bad Request
Date: Tue, 15 Oct 2002 11:25:10 GMT
Server: Apache/1.3.19 (Unix) PHP/4.0.4pl1

- 이 정보는 공격자에 의해 Apache 웹서버 버전별 또는 구동되고 있는 응용프로그램에 잘 알려진 취약점을 공격하는데 유용하게 악용될 수 있으며, 인터넷 웜과 같은 자동화된 공격에서도 이러한 banner 정보가 사용되어지기도 한다. 따라서 공격자에게 웹서버의 버전과 같은 banner 정보를 숨기는 것이 안전하다.
- Apache 웹서버에서는“ServerTokens”지시자를 수정함으로써 헤더에 의해 전송되는 정보를 바꿀 수 있다.
정의방법: ServerTokens Minimal|ProductOnly|OS|Full

- ServerTokens 지시자를 이용하여 설정할 수 있는 각 키워드와 표시되는 헤더 정보는 다음
과 같다.
키워드 제공하는 정보
Prod[uctOnly] 웹서버 종류 Server: Apache
Min[imal] Prod 키워드 제공 정보 + 웹서버 버전 Server: Apache/1.3.0
OS Min 키워드 제공 정보 + 운영체제 Server: Apache/1.3.0 (Unix)
Full OS 키워드 제공 정보 +
설치된 모듈(응용프로그램) 정보
Server: Apache/1.3.0 (Unix)
PHP/3.0 MyMod/1.2

- 공격자를 속이기 위해서 서버의 헤더 정보를 앞에서 명기한 내용과는 전혀 다른 내용으로 조작하여 클라이언트에 보낼 수도 있는데 이를 위해서는 Apache 소스코드를 수정한후 재컴파일하여야 한다. 


Apache의 웹서버의 버전 숨기는 것은 httpd.conf 에서 ServerTokens 지시자를 통해서 위와같이 쉽게 설정할 수 있다. 하지만 이렇게 설정을 하더라도 웹서버 헤더에 'X-Powered-By: PHP/4.x.x'와 같이 PHP버전을 그대로 볼 수 있다.

 
$ telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
HEAD / HTTP/1.0

HTTP/1.1 200 OK
Date: Sun, 11 Apr 2004 15:17:10 GMT
Server: Apache
X-Powered-By: PHP/4.x.x  (버전이 표시되는데 글 작성할 때 4.x.x로 수정했음)
Connection: close
Content-Type: text/html

Connection closed by foreign host.
 


그러면 어떻게 숨길까?

php.ini 파일에서

expose_php = On 를
expose_php = Off 로 바꾸고 웹서버를 재실행하면 된다.
728x90

댓글