20 diciembre 2010

Hardening de Mod_SSL

Después de haber explicado como optimizar mod_ssl para conseguir mucho desempeño -a costa de sacrificar la seguridad- ahora vamos justo con lo contrario. El objetivo es configurar mod_ssl de la forma mas segura posible sacrificando el desempeño.

Esta configuración es ideal para entornos donde las comunicaciones deban ser muy seguras y el tipo de datos a los que se acceden sean críticos.

Certificados digitales de 2048, o mas: Es importante que nuestro certificado para mod_ssl sea como poco de 2048, lo ideal sería de 4096 pero no estoy seguro si existen muchas CAs reconocidas que firmen esos certificados. En cualquier caso si estamos creando un certificado auto-firmado o firmado por una CA que controlemos, mejor emplear 4096.

Deshabilitar SSL v2: Es importante deshacernos de SSL v2 y emplear al menos v3 o TLS, para ello editamos ssl.conf y configuramos la directriz SSLProtocol de la siguiente forma:

SSLProtocol -ALL +SSLv3 +TLSv1

Emplear solo algoritmos robustos: mod_ssl soporta un buen número de algoritmos, algunos de bastante baja calidad (en parte como legado de la época donde EEUU restringía el uso de algoritmos fuertes). Para emplear solo algoritmos de alta calidad debemos configurar la directriz SSLCipherSuite de la siguiente forma:

SSLCipherSuite HIGH:MEDIUM

Ampliar el tamaño de la semilla aleatoria: Para mejorar la calidad de la semilla aleatoria debemos configurar SSLRandomSeed de la siguiente manera:

SSLRandomSeed startup file:/dev/urandom 1024

Habilitar 'HTTP Strict Transport Security': Uno de los ataques mas dañinos a un recurso SSL es el que se realiza con la herramienta sslstrip, para hacer frente a el podemos activar HSTS de forma que cuando un navegador se conecte al recurso SSL, será notificado que siempre debe acudir a el por ese protocolo y no por HTTP. Para activar esta opción debemos editar el httpd.conf y en la sección del vhost que tengamos configurada para SSL añadir:

Header add Strict-Transport-Security: "max-age=15768000;includeSubdomains"

Es necesario tener activado mod_headers

Referencias: