Saltar a contenido

Index

Ataque DROWN en SSLv2/TLS

Descripción

Esta vulnerabilidad indica que el servidor es susceptible a los ataques DROWN, que explotan el soporte de SSLv2 para descifrar conexiones TLS modernas mediante ataques de relleno (padding oracle) de Bleichenbacher entre protocolos.

DROWN (Decrypting RSA with Obsolete and Weakened encryption) ocurre cuando los servidores admiten el protocolo obsoleto SSLv2 junto con el TLS moderno. Incluso si los clientes nunca usan SSLv2, los atacantes pueden explotar la débil implementación del relleno RSA de SSLv2 para descifrar sesiones TLS capturadas que comparten la misma clave privada.

Cómo funciona:

  1. El atacante captura cientos de conexiones TLS entre el cliente y el servidor.
  2. Usando la misma clave privada RSA, el atacante se conecta al servicio SSLv2 en el mismo u otro servidor.
  3. Envía mensajes de handshake SSLv2 especialmente diseñados con un texto cifrado RSA modificado.
  4. Las respuestas del servidor SSLv2 filtran información sobre la clave privada a través del padding oracle.
  5. Después de aproximadamente 40,000 sondas, el atacante puede descifrar una de las sesiones TLS capturadas.

Requisitos:

  • El servidor objetivo o el servidor relacionado soporta SSLv2 con la misma clave privada RSA.
  • Intercambio de claves RSA utilizado en conexiones TLS (no ECDHE/DHE).
  • Acceso a la red para capturar el tráfico TLS y sondear los servicios SSLv2.
  • Recursos computacionales para ataques criptográficos ($440 en la nube).

Escenario de ejemplo: El sitio web HTTPS de un banco deshabilita correctamente SSLv2, pero su servidor de correo SMTP en la misma infraestructura admite SSLv2 utilizando el mismo certificado RSA. Un atacante captura las sesiones TLS de los clientes en el sitio web y luego realiza miles de conexiones SSLv2 manipuladas al servidor de correo. El débil padding oracle de SSLv2 revela suficiente información para descifrar las sesiones HTTPS capturadas, exponiendo credenciales de inicio de sesión y datos financieros.

El ataque explota las antiguas restricciones de criptografía de grado de exportación de la década de 1990, demostrando cómo el debilitamiento criptográfico impuesto por los gobiernos continúa amenazando la seguridad moderna décadas después.

Recomendación

Para mitigar los ataques DROWN:

Defensa principal - Deshabilitar SSLv2 completamente:

# Apache - deshabilitar SSLv2
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite HIGH:!aNULL:!MD5:!SSLv2:!SSLv3
# Nginx - deshabilitar SSLv2 (ya deshabilitado por defecto)
ssl_protocols TLSv1.2 TLSv1.3;

Actualizar OpenSSL:

Actualice a las versiones parcheadas: - OpenSSL 1.0.2g o posterior - OpenSSL 1.0.1s o posterior - Estas versiones deshabilitan SSLv2 y los cifrados de exportación de forma predeterminada.

Revisar TODOS los servicios que utilizan la misma clave privada:

Crítico: asegúrese de que ningún otro servicio admita SSLv2:

# Comprobar soporte de SSLv2 en todos los servicios
nmap --script ssl-enum-ciphers -p 443,993,995,25,587,465 example.com

# Probar servicio específico para SSLv2
openssl s_client -connect mail.example.com:993 -ssl2

Servicios comúnmente vulnerables: - Servidores SMTP (puertos 25, 587, 465) - Servidores IMAP (puerto 993) - Servidores POP3 (puerto 995) - Servidores web secundarios - Balanceadores de carga y proxies

Generar nuevas claves si es necesario:

Si no puede confirmar que SSLv2 esté deshabilitado en todas partes:

# Generar nueva clave privada RSA
openssl genrsa -out new-private-key.pem 2048

# Crear nueva solicitud de firma de certificado
openssl req -new -key new-private-key.pem -out new-csr.pem

Protecciones adicionales:

  • Use suites de cifrado ECDHE/DHE para una Perfect Forward Secrecy.
  • Implemente el certificate pinning donde sea posible.
  • Supervise los registros en busca de intentos de conexión SSLv2 inusuales.
  • Considere el filtrado a nivel de red del tráfico SSLv2.

Conocimiento clave: CUALQUIER servicio que comparta su clave privada y que admita SSLv2 hace que TODOS sus servicios TLS sean vulnerables, incluso si deshabilitan SSLv2 individualmente.

Enlaces

Estándares

  • SOC2_CONTROLS:
    • CC_6_7
    • CC_7_1
  • CCPA:
    • CCPA_1798_150
  • GDPR:
    • ART_32
  • PCI_STANDARDS:
    • REQ_4_1
    • REQ_6_2
    • REQ_11_3
  • HIPAA_CONTROLS:
    • SECURITY252
    • SECURITY212
    • SECURITY213