Contenido principal

Ocultando la cabecera Server del servidor Apache

Enero 4, 2009

La instalación de Apache, por defecto muestra en una cabecera llamada "Server" la versión y módulos utilizados por el servidor. Esta cabecera se puede eliminar o en su defecto minimizar la información que nos muestra. En esta pequeña guía aprenderemos a minimizar tal información con unos simples y pequeños pasos.

Versión ubuntu
Nota: La guía sirve igualmente en otras distribuciones o sistemas operativos. Los pasos a seguir son obviamente diferentes, tales como descarga y compilación del Apache.

Primero descargamos la versión más actual del servidor Apache, la cual puede ser consultada en esta página: http://httpd.apache.org/download.cgi

cd $HOME
wget  http://mirror.atlanticmetro.net/apache/httpd/httpd-2.2.11.tar.gz


Luego de esto, extraemos el contenido del archivo y nos movemos hacía el directorio creado.

gzip -d httpd-2.2.11.tar.gz
tar xf httpd-2.2.11.tar
cd httpd-2.2.11/

Posicionados en la carpeta del servidor y buscamos recursivamente en los archivos en busca de la cadena "form_header_field"

grep -r form_header_field *
modules/http/http_filters.c:static int form_header_field(header_struct *h,
modules/http/http_filters.c:        form_header_field(&h, "Date", proxy_date);
modules/http/http_filters.c:            form_header_field(&h, "Server", server);
modules/http/http_filters.c:        form_header_field(&h, "Date", date);
modules/http/http_filters.c:        form_header_field(&h, "Server", ap_get_server_banner());
modules/http/http_filters.c:                 form_header_field, (void *) &h, r->headers_in, NULL);
modules/http/http_filters.c:        apr_table_do((int (*)(void *, const char *, const char *)) form_header_field,
findstr /s "form_header_field" .\*

Así que el archivo que debemos editar para ocultar la cabecera "Server" es "http_filters.c" que está ubicado en la carpeta ./modules/httpd.
En este momento podemos hacer dos cosas, la primera es ocultar totalmente la cabecera "Server" y la segunda falsificarla.
Abrimos el archivo con cualquier editor

gedit modules/http/http_filters.c

Y localizamos las líneas del form_header_field, en esta versión de Apache(2.2.11), se encuentra la primera desde la línea 914. Editamos esta línea:
Ocultar la cabecera

//Línea 912-915
server = apr_table_get(r->headers_out, "Server");
if (server) {
    form_header_field(&h, "Server", server);
}
por
/*server = apr_table_get(r->headers_out, "Server");
if (server) {
    form_header_field(&h, "Server", server);
}*/

Y

//Línea 921
form_header_field(&h, "Server", ap_get_server_banner());
por
/*form_header_field(&h, "Server", ap_get_server_banner());*/

Lo que estamos haciendo es comentar tales líneas para que cuando el código llegue ahí no se ejecute nada.

Y para falsificarla

//Línea 912-915
server = apr_table_get(r->headers_out, "Server");
if (server) {
    form_header_field(&h, "Server", server);
}
por
server = "Microsoft-IIS/7.0";
if (server) {
    form_header_field(&h, "Server", server);
}

Y

//Línea 921
form_header_field(&h, "Server", ap_get_server_banner());
por
form_header_field(&h, "Server", "Microsoft-IIS/7.0");

Una alternativa a esta opción es aplicar el patch respectivo
Patch No server: Download
Patch Server Microsoft: Download

patch modules/http/http_filters.c noserver.patch
ó
patch modules/http/http_filters.c servermicrosoft.patch

En este caso, aplique el patch para falsificar la cabecera como un servidor IIS de microsoft.
Ahora seguimos los sencillos pasos de compilar e instalar el servidor.
Primero descargamos el paquete de build-essential para compilar el apache y las dependencias

sudo apt-get install build-essential
sudo apt-get build-dep apache2

Y luego a compilar e instalar

./configure --prefix=/usr/local/webserver --enable-mods-shared=all
make
sudo make install

Luego iniciamos la aplicación en la carpeta que hemos instalado el Apache, por seguridad lo instale en /usr/local/webserver, porque en caso de haber una vulnerabilidad en alguna aplicación PHP, siempre casi son las mismas rutas (/usr/local/apache,/usr/local/apache2).

sudo /usr/local/webserver/bin/apachectl start

Y hacemos una petición a la página principal para observar si ha funcionado el patch.

nc localhost 80
GET / HTTP/1.1
Host: localhost
Connection: Close

HTTP/1.1 200 OK
Date: Sun, 04 Jan 2009 20:57:07 GMT
Server: Microsoft-IIS/7.0
Last-Modified: Sat, 20 Nov 2004 20:16:24 GMT
ETag: "1bc708-2c-3e9564c23b600"
Accept-Ranges: bytes
Content-Length: 44
Connection: close
Content-Type: text/html

It works!

Y como vemos ha funcionado a la perfección.

Tip para minimizar la información y volver mas seguro el servidor
Al igual que el anterior método, podemos minimizar la información sin tener que cambiar el código fuente del Apache, pero sólo si tenemos acceso al archivo de configuración httpd.conf
Primero añadimos una cuenta dedicada al servidor

sudo adduser --system webserver
sudo gedit /usr/local/webserver/conf/httpd.conf

Localizamos las líneas que contienen el siguiente código (Sólo válido para sistemas unix)

User daemon
Group daemon

allí cambiamos por el usuario que acabamos de añadir

User webserver
Group nogroup

Y agregamos las siguientes líneas

ServerSignature off
ServerTokens prod

Archivado en: Seguridad |

1 comentario

  1. persefone Enero 16, 2009 @ 8:20 pm

    wooooow...que cosa tan rara esa!!! , y despues la loca...que rico que tu pagina siga creciendo cada dia :).

Deja un comentario