SSL Stripping: principios básicos y opciones de protección

El protocolo Secure Sockets Layer (SSL) y su sucesor el Transport Layer Security (TLS) son dos de los componentes más importantes para la seguridad de un proyecto web. Ambos cifran los datos que el servidor y el navegador intercambian por HTTP antes de que se envíen, incluso al cambiar de una web cifrada con HTTPS a una desprotegida. Esto no solo impide la transferencia de datos estándar en texto sin formato, sino que también evita que un conjunto de cookies en SSL se envíe con una conexión no cifrada. Estos certificados también garantizan al cliente solicitante la autenticidad del nombre de host del servidor. De esta forma, el protocolo TLS ofrece seguridad de varias maneras, convirtiéndolo en indispensable dondequiera que se transmitan datos confidenciales.

En general, el TLS es uno de los protocolos más seguros y, hasta ahora, ha sabido mantener su reputación superando los intentos de ataque. Sin embargo, bajo ciertas condiciones, algunas herramientas especiales (como sslstrip, la herramienta programada con fines de demostración) son capaces de obtener acceso a la transferencia de datos antes de que se haya comenzado con el cifrado. Estos accesos no autorizados de terceros se denominan SSL Stripping.

¿Qué es el SSL Stripping?

En 2002, el desarrollador Moxie Marlinspike programó una herramienta capaz de eliminar el cifrado SSL: el sslsniff. Este software proxy permite infiltrar flujos de datos SSL e intercambiar el certificado del servidor con otro certificado cualquiera. Con su programa Marlinspike quería señalar la debilidad del navegador Internet Explorer que, para ese entonces, era muy vulnerable a los ataques Man in the Middle. Microsoft fue capaz de reparar esta brecha de seguridad y, actualmente, otros clientes populares cuentan con las herramientas suficientes para prevenir y combatir dichos ataques.

El mencionado programa sslstrip fue presentado por Marlinspike en 2009 en la conferencia de seguridad Black Hat DC. Al igual que su herramienta predecesora, sslstrip es un proxy que se sitúa entre el cliente y el servidor e intenta evitar la certificación en las páginas del navegador. Para ello, la herramienta busca aquellos enlaces en las páginas web arrojadas por el servidor que redireccionan a una página de inicio de sesión protegida por SSL, como por ejemplo:

<a href="https://example.com/login.php">

Cuando el proxy encuentra este tipo de enlace, lo convierte en un enlace HTTP equivalente, con lo que, con su navegador, el usuario envía un texto sin formato en lugar de los datos ordinarios supuestamente cifrados. Gracias al sslstrip, el atacante potencial puede leerlo fácilmente como una estación intermedia y, en algunos casos, logra obtener información confidencial. Dado que el SSL Stripping no crea una conexión inválida, no se muestra ningún tipo de mensaje de advertencia. Por lo general, el usuario no se entera de que está transmitiendo sus datos sin cifrar.

Consejo

¿Los sabias? ¡Todos los packs de Hosting y Dominios 1&1 incluyen un certificado SSL Wildcard de Digiciert gratis!

¿Cómo se implementa el sslstrip?

Independientemente de si se utiliza el sslstrip o una aplicación programada de forma similar, primero es necesario que el atacante active su proxy entre el navegador y el servidor web. El software solo tiene la posibilidad de codificar direcciones URL modificadas mediante el SSL Stripping cuando puede interceptar o reenviar flujos de datos. Los tres siguientes métodos son ampliamente utilizados en su implementación:

  1. Entrada desapercibida del proxy en las opciones del navegador: a menudo y si tu sistema ha sido víctima de cibercriminales, el objetivo no es tu equipo, sino solo tu navegador. El malware se asegura entonces de que un servidor proxy externo se integre automáticamente en los ajustes sin que el usuario lo note.

  2. ARP o NDP spoofing: dentro de una subred, un atacante puede recurrir al llamado ARP spoofing (IPv4) o NDP Spoofing (IPv6) para mantener activo su proxy. Ambos protocolos sirven para resolver direcciones IP en sus direcciones de hardware (también conocidas como direcciones MAC). Valiéndose de los mensajes manipulados de estos protocolos, el atacante puede reemplazar las direcciones de hardware solicitadas con la de su propio sistema e interceptar los paquetes de datos transmitidos.

  3. Facilitar un punto de acceso propio: la tercera posibilidad solo es posible si el dispositivo en el que se ejecuta el servidor proxy también puede actuar como un router. Como puerto estándar y servidor DHCPm este dispositivo puede entonces asignar direcciones IP a los usuarios, pero también leer y reenviar paquetes que se envían más allá de los límites de la subred. Esto proporciona la base perfecta para el SSL Stripping.

Después de que ha colocado su proxy, el atacante no tiene que preocuparse por mucho más: solo ha de dejar que la herramienta se ejecute, la cual emite enlaces modificados cuando conviene, y si tiene éxito entrega información sin cifrar como datos bancarios de los usuarios o de inicio de sesión.

¿Puede un usuario identificar un ataque sslstrip?

Los servidores y los navegadores no están en situación de detectar un sslstrip. Ambas aplicaciones suponen que se están comunicando con el cliente real, por lo que no dudan en ningún momento de la integridad de los datos transmitidos. Para los usuarios, la situación es bastante similar ya que, a primera vista, la visita a la página web deseada parece ser completamente normal. En algunos casos excepcionales las páginas manipuladas por SSL Stripping pueden reconocerse debido a pequeños detalles técnicos o de diseño. Por lo tanto, si no se presenta un diseño especialmente defectuoso o no se producen retrasos considerables al cargar la página, no hay muchas pistas que dejen intuir que se ha burlado el cifrado por SSL.

Sin embargo, desde hace algún tiempo, las barras de direcciones de los navegadores tratan de proporcionar información relevante en este sentido de maneras muy diferentes. Por ejemplo, para marcar páginas web como conexiones seguras, las versiones anteriores de Internet Explorer mostraban la barra de direcciones completamente verde. Otros navegadores resaltaban el nombre de la empresa hasta que, con la aparición de los primeros dispositivos web móviles habilitados para la web, fueron reemplazados por algunos de los símbolos comunes actuales, como el típico candado de seguridad. No obstante, estas pistas visuales no siempre garantizan que la página visitada no ha sido manipulada por herramientas como sslstrip. Debido a que el atacante controla la totalidad de la transferencia de datos, también tiene la posibilidad de presentar un símbolo similar como favicon y engañar así completamente al usuario. 

¿Qué mecanismos de protección existen?

La dificultad de detectar páginas maliciosas hace que el SSL Stripping sea muy peligroso para los usuarios. La razón de ser de los certificados de cifrado utilizados por los administradores web es garantizar la seguridad y la fiablidad, eliminando las dudas de los usuarios a la hora de proporcionar sus datos privados. En principio, SSL también proporciona la protección necesaria, pues el hecho de que sea posible interceptar y leer paquetes de datos no es consecuencia de una brecha de seguridad en el protocolo, sino de la obstaculización del protocolo en sí mismo. Para protegerse del sslstrip es recomendable que cada usuario refuerce las conexiones HTTPS cifradas mediante:

  1. Entrada manual del URL: una medida extremadamente tediosa pero eficaz es introducir manualmente la dirección URL HTTPS completa.

  2. Extensión para el navegador: existen diferentes extensiones del navegador que pueden ayudarte a acceder a las versiones cifradas, siempre y cuando las haya. La extensión HTTPS Everywehere utiliza listas de dominios y reglas para generar una conexión HTTPS para cada solicitud de una página web. En la página de la Electronic Frontier Foundation, que desarrolla y gestiona la extensión HTTPS Everywhere junto con el proyecto Tor proporciona versiones para Firefox, Firefox para Android, Chrome y Opera.

  3. Guardar direcciones URL seguras como favoritos: si utilizas un servicio web protegido con SSL (banca online, almacenamiento en la nube, etc.) frecuentemente, es recomendable que guardes su versión HTTPS como marcador y accedas a dicho servicio siempre a través de esta. El requisito previo es que te encuentres en una red segura cuando la marques como favorita. De lo contrario, correrás el riesgo de incluir un URL ya manipulado en la lista de favoritos.

Los administradores web también tienen la posibilidad de combatir activamente el SSL Stripping. Un paso básico podría consistir en habilitar el cifrado para todas las páginas de un proyecto web y forzar el reenvío de las conexiones HTTP entrantes a páginas seguras. Lo mismo se aplica a las cookies: si no quieres prescindir de este práctico registro de datos por motivos de analítica web, debes asegurarte de que estas no se devuelvan a través de conexiones HTTP no seguras. Para ello, simplemente asigna el atributo “Secure” a las cookies y asegúrate de que tu servidor solo reciba solicitudes vía HTTPS. Otra medida de seguridad es la norma IETF HSTS, la cual describiremos con más detalle en el siguiente apartado.

HSTS: la ayuda contra el SSL Stripping

Tres años después de que el software de Marlinspike atrajera la atención sobre la vulnerabilidad del certificado SSL, con el RFC 6797 el IETF (Internet Engineering Task Force) lanzó oficialmente el mecanismo de seguridad HSTS (HTTP Strict Transport Security), que permite a los servidores web notificar a los clientes solicitantes que pueden acceder a la web a través de una conexión HTTPS durante un periodo de tiempo específico. Para ello, el servidor utiliza el campo “Strict Transport Security” junto con la directiva “max-age”, definiendo así el periodo de validez en segundos de la instrucción. Para que un dominio esté disponible por un año exclusivamente a través de una conexión cifrada, la respuesta HTTP del servidor web tiene que contener la siguiente línea de código:

Strict-Transport-Security: max-age=31536000

El parámetro “includeSubDomains” también se puede utilizar para extender el comando a todos los subdominios de la página web. Si un navegador recibe un mensaje desde el servidor web con la instrucción “Strict Transport Security”, todas las solicitudes no cifradas del dominio correspondiente se convierten automáticamente en solicitudes cifradas. Si la conexión no es segura, se muestra un mensaje de error y se deniega el acceso a la página solicitada.

El HSTS es una solución permanente para proteger a un proyecto web y a sus visitas del sslstrip y de otros ataques similares. Sin embargo, el requisito para que el mecanismo de seguridad pueda actuar es una conexión, la cual es igualmente fácil de manipular, como ya se ha demostrado en este artículo. Para hacer frente a este problema, Google ha introducido una lista de precarga para su navegador Chrome, que contiene proyectos web que solo están disponibles a través de HTTPS. Otros proveedores de navegadores web han optado por el mismo principio, implementando listas de precarga HSTS basadas en la lista de Chrome. Para añadir tu proyecto web al listado, solo tienes que enviar una solicitud a la página web oficial del proyecto de Google.

Hecho

Las páginas web deben cumplir con ciertos requisitos para incluirse en la lista de precarga. Lógicamente tienen que tener un certificado válido y ejecutar todos sus subdominios a través de HTTPS. Además, el campo HSTS en las respuestas del servidor web al dominio principal debe considerar los siguientes aspectos:

  • La directriz “max-age” debe tener un periodo mínimo de validez de 18 semanas (10886400 segundos).
  • Se debe especificar la directiva “includeSubDomains”.
  • También se debe establecer la directriz “preload”.
  • En caso de que haya una redirección, esta también debe contener el encabezado HSTS