Existen distintos métodos para identificar qué versión corre un programa concreto que se encuentra instalado en un servidor. Si además este servidor tiene una conexión pública el riesgo al que se expone es muy elevado, sobre todo cuando no se sigue una política periódica de actualizaciones.
Alguno de estos método tienen como objetivo obtener el banner que se muestra al realizar una conexión TCP/IP, utilizando programas como Telnet, NetCat, OpenSSL, Wget, …
Con esta información un atacante solo tendría que buscar el CVE correspondiente a la versión publicada en el servidor objetivo, y comenzar a explotar sus vulnerabilidades.
Una buena práctica es ocultar esta información, que además algunos programas publican por defecto tras su instalación. A continuación se muestra la manera de ocultarlo para programas tan populares como Postfix, Dovecot y Apache corriendo bajo un servidor con Debian 9.
Tabla de contenidos
Postfix
Para ocultar el banner en Postfix debemos de editar el archivo /etc/postfix/main.cf y cambiar la configuración del parámetro smtpd_banner. Recuerda hacer un backup previo del archivo.
# sudo cp /etc/postfix/main.cf /etc/postfix/main.cf.orig # sudo nano /etc/postfix/main.cf
Ocultamos cualquier información que nos exponga a un riesgo:
#smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu) smtpd_banner = $myhostname ESMTP
Reiniciamos el servicio de Postfix:
# sudo systemctl restart postfix
Con el comando NetCat, nc, comprobamos que no se muestra información de software ni versiones instaladas:
# nc email.tiraquelibras.com 25 220 email.tiraquelibras.com ESMTP
Dovecot
Para ocultar el banner en Dovecot editamos el archivo /etc/dovecot/dovecot.conf y editamos el parámetro login_greeting. Recordar hacer un backup previo del archivo:
# sudo cp /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.orig # sudo nano /etc/dovecot/dovecot.conf
Editamos el parámetro logging_greeting que muestra el banner al realizar una conexión:
# Greeting message for clients. #login_greeting = Dovecot ready. login_greeting = MailServer managed by Tiraquelibras.
Reiniciamos el servicio Dovecot:
# sudo systemctl restart dovecot
Si realizamos una conexión a uno de los puertos por los que escuche Dovecot observamos el nuevo banner:
# openssl s_client -connect 127.0.0.1:993 ... --- * OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE AUTH=PLAIN AUTH=LOGIN] MailServer managed by Tiraquelibras.
Apache
Para ocultar el banner publicado por Apache debemos de editar el archivo /etc/apache2/apache2.conf y agregar las siguientes líneas, previo backup del archivo:
# sudo cp /etc/apache2/apache2.conf /etc/apache2/apache2.conf.orig # sudo nano /etc/apache2/apache2.conf
Agregamos las siguientes líneas al final del documento, si no existieran:
# OCULTAR LA VERSION DE APACHE ServerTokens Prod ServerSignature Off
Y si ademas usamos PHP debemos de editar su archivo de configuración. En mi caso uso PHP7. Para obtener el archivo de configuración ejecutamos el siguiente comando:
# sudo php -i | grep "Loaded Configuration File" Loaded Configuration File => /etc/php/7.0/cli/php.ini
Editamos el archivo resultante, previo backup:
# sudo cp /etc/php/7.0/cli/php.ini /etc/php/7.0/cli/php.ini.orig # sudo nano /etc/php/7.0/cli/php.ini
Cambiamos la configuración del parámetro expose_php a Off:
; Decides whether PHP may expose the fact that it is installed on the server ; (e.g. by adding its signature to the Web server header). It is no security ; threat in any way, but it makes it possible to determine whether you use PHP ; on your server or not. ; http://php.net/expose-php ;;;expose_php = On expose_php = Off
Reiniciamos el servicio de Apache:
# sudo systemctl restart apache2
Confirmamos el banner publicado:
# lynx -head -mime_header http://localhost HTTP/1.1 200 OK Date: Mon, 11 Nov 2019 12:54:01 GMT Server: Apache X-XSS-Protection: 1; mode=block Expires: Mon, 26 Jul 1997 05:00:00 GMT Last-Modified: Mon, 11 Nov 2019 12:54:01 GMT Cache-Control: no-store, no-cache, must-revalidate, max-age=0 Cache-Control: post-check=0, pre-check=0 Pragma: no-cache Connection: close Content-Type: text/html; charset=utf-8
Antes se mostraba la versión, por ejemplo Server: Apache/x.x.xx (Debian).
Conclusión
Con estos sencillos pasos podemos securizar un poquito más nuestros servicios publicados en Internet, ocultando las pistas que los atacantes intentan obtener previamente con técnicas de Fingerprinting.