Posts Tagged ‘ServerSignature’

Aumentar la seguridad de nuestro sitio

Wednesday, December 26th, 2007

Una persona mal intencionada que quiera tirar abajo nuestro sitio web, debe contar con información, esta puede ser obtenida de varias formas, pero mientras mayor sea el esfuerzo que deba realizar en conseguirla menor será su ganas de atacar.

Algunas versiones de Apache 2 por defecto trae activada una directiva que informan sobre el servidor. Por ejemplo, al contar con información del número de versión de Apache, tiene a su disposición todas las vulnerabilidades reportadas. En base a esto y ganas de hacer daño es cuestión de tiempo para bajar el sitio. Por lo cual no se recomienda que esté activada está directiva, sólo en el caso de que Apache se utilice como un servidor proxy y de esta manera poder determinar qué proxy causa un error.

Pie de imagen con información del servidor

Vamos a ver como desactivar esta información que suministra Apache. La explicación se basa en Debian y Apache 2. La directiva ServerSignature, agrega un pie en las páginas generadas detallando número de versión, nombre y puerto por el que escucha el servidor. Es importante notar que los detalles del número de versión mostrado en éste pie es controlado a través de la directiva ServerTokens, a partir de la versión 2.0.44 de Apache.

ServerSignature puede tomar los siguientes valores: On, Off, EMail. EMail, además de mostrar información detallada por ServerTokens, muestra el valor de la directiva ServerAdmin.

ServerTokens puede tomar los siguientes valores

Valor Muestra
Prod[uctOnly] Apache
Major Apache/2
Minor Apache/2.0
Min[imal] Apache/2.0.41
OS Apache/2.0.41 (Unix)
Full Apache/2.0.41 (Unix) PHP/4.2.2 MyMod/1.2

Nos vamos a


#cd /etc/apache2
#vi apache2.conf

Nota:Puede ser que la gestión de la configuración del servidor se encuentre en varios archivos y no sólo en apache2.conf. La ruta en dónde pueden encontrarse estos archivos se obtiene a través de las directivas Include dentro de apache2.conf. Por defecto podemos encontrar el resto de los archivos en /etc/apache2/sites-available. En éstos archivos también tenemos que modificar los valores de ServerSignature.

Buscamos la directiva ServerSignature y la establecemos en Off.


# Optionally add a line containing the server version and virtual host
# name to server-generated pages (internal error documents, FTP directory
# listings, mod_status and mod_info output etc., but not CGI generated
# documents or custom error documents).
# Set to "EMail" to also include a mailto: link to the ServerAdmin.
# Set to one of:  On | Off | EMail
#
ServerSignature Off

Reiniciamos Apache para que tome la nueva configuración


#/etc/init.d/apache2 force-reload

Con esto desaparecerá el pie de página

Pie de imagen sin información del servidor

Podemos comprobar que información está suministrando el servidor, a través del encabezado devuelto en las solicitudes HTTP[1]


# telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
GET / HTTP/1.1
HTTP/1.1 200 OK
Date: Wed, 26 Dec 2007 21:57:51 GMT
Server: Apache/1.3 (Debian) PHP/5.2.1
Last-Modified: Tue, 27 Nov 2007 02:16:58 GMT
ETag: “1390096-7b7-ace83a80″
Accept-Ranges: bytes
Content-Length: 1975
Connection: close
Content-Type: text/html; charset=UTF-8
…

Dentro del encabezado HTTP, se esta mostrando información detallada, tenemos que minimizarla, esto lo hacemos modificando el valor de la directiva ServerTokens


# ServerTokens
# This directive configures what you return as the Server HTTP response
# Header. The default is 'Full' which sends information about the OS-Type
# and compiled in modules.
# Set to one of:  Full | OS | Minor | Minimal | Major | Prod
# where Full conveys the most information, and Prod the least.
#
ServerTokens Prod

Ahora si hacemos un telnet aparecera[1]


# telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
GET / HTTP/1.1
HTTP/1.1 200 OK
Date: Wed, 26 Dec 2007 21:57:51 GMT
Server: Apache
Last-Modified: Tue, 27 Nov 2007 02:16:58 GMT
ETag: “1390096-7b7-ace83a80″
Accept-Ranges: bytes
Content-Length: 1975
Connection: close
Content-Type: text/html; charset=UTF-8
…


[1] También podríamos utilizar NetCat, para obtener sólo el encabezado de la solicitud HTTP. Donde a NetCat le pasamos la dirección IP del servidor (localhost) y el puerto por el que está escuchando (80). Después de presionar enter utilizamos el método de solicitud HEAD.


# nc localhost 80
HEAD / HTTP:1.0

HTTP/1.1 200 OK
Date: Thu, 17 Jan 2008 21:00:51 GMT
Server: Apache
Last-Modified: Tue, 27 Nov 2007 02:16:58 GMT
ETag: "1390096-7b7-ace83a80"
Accept-Ranges: bytes
Content-Length: 1975
Connection: close
Content-Type: text/html; charset=UTF-8

bibliografía