Libera tu mente y alcanza tus metas
Marvin: fallo criptográfico en RSA que nunca se arreglará
Marvin: fallo criptográfico en RSA que nunca se arreglará

Marvin: fallo criptográfico en RSA que nunca se arreglará

Durante la ESORICS 2023 (por sus siglas en inglés Simposio europeo sobre investigación en seguridad informática) que se celebro del 25 al 29 de septiembre en Países Bajos, un investigador de seguridad que trabaja para Red Hat, presentó "Marvin Attack", una técnica de ataque que permite determinar los datos originales midiendo los retrasos durante las operaciones de descifrado basándose en el algoritmo RSA.

Marvin Attack, es una variación del método Bleichenbacher, propuesto en 1998, y continúa el desarrollo de los ataques ROBOT y New CAT publicados en 2017 y 2019. El ataque Marvin es el regreso de una vulnerabilidad de 25 años que permite realizar operaciones de firma y descifrado RSA como un atacante con la capacidad de observar solo el tiempo de la operación de descifrado realizada con la clave privada.

Llevan tres años analizando de nuevo el problema y han descubierto, entre otras cosas, que nunca se va a solucionar.

Este antiguo ataque de oráculo de temporización dirigido al cifrado RSA ha resurgido, según identificó Hubert Kario, un investigador del equipo checo de Red Hat. Este ataque de oráculo, descubierto inicialmente en 1998 por Daniel Bleichenbacher, ha demostrado ser aún explotable con el paso del tiempo.

A lo largo de los años, esta vulnerabilidad ha reaparecido en múltiples ocasiones, siendo la más reciente en 2018 cuando los investigadores Hanno Böck, Jurau Somorovsky y Craig Young lo reintrodujeron en su publicación titulada "ROBOT", un acrónimo para "El Regreso de la Amenaza de Oráculo de Bleichenbacher".

Para conseguirlo han tenido que realizar logros tan impresionantes como ser capaces de percibir cambios en el tiempo de procesamiento del orden de unos pocos ciclos de CPU de diferencia en la respuesta, a través de una red en producción a kilómetros saltando seis enrutadores en el camino. Lo han bautizado como Marvin.

En la novela "La guía del autoestopista galáctico" (de donde también sale el término "42"), Marvin es el Android que dura hasta el final del universo.

El fallo viene de 1998, cuando Daniel Bleichenbacher descubrió que los mensajes de error lanzados por servidores SSL al procesar el padding (relleno) del formato PKCS#1 (v1.5) permitían a atacantes descifrar la clave precompartida. Entender el fallo original no es tan difícil y ayuda mucho a ver por qué Marvin es un nuevo-viejo problema.

Básicamente se menciona que la esencia del método es que un atacante, basándose en diferentes reacciones del servidor y diferentes tiempos de ejecución, puede separar los bloques de Oracle correctos e incorrectos agregados con el estándar PKCS #1 v1.5 para alinear los datos cifrados a lo largo del límite del bloque. Al manipular información sobre la exactitud de los bloques de relleno, un atacante puede usar la fuerza bruta para recrear un texto cifrado adecuado.

De dónde viene el problema con Marvin

Bleichenbacher descubrió inicialmente que los servidores SSL emitían mensajes de error relacionados con el relleno PKCS #1 v1.5. Estos mensajes facilitaban inadvertidamente un ataque al texto cifrado, comprometiendo la confidencialidad esencial para los protocolos de Seguridad de la Capa de Transacción (TLS) que utilizan encriptación RSA. Bajo esta vulnerabilidad, una persona que pudiera observar el tiempo requerido para el proceso de descifrado utilizando la clave privada podría, teóricamente, descifrar mensajes RSA interceptados.

PKCS#1 es un formato usado dentro del conjunto de algoritmos RSA que formatea los mensajes cuando son demasiados cortos. Para evitar que sea fácil descifrarlos, se hace relleno. En SSL/TLS se envía un mensaje como clave de intercambio (pre shared key), que no es muy larga y por tanto debe rellenarse con padding hasta la longitud del módulo.

Básicamente se menciona que la esencia del método es que un atacante, basándose en diferentes reacciones del servidor y diferentes tiempos de ejecución, puede separar los bloques de Oracle correctos e incorrectos agregados con el estándar PKCS #1 v1.5 para alinear los datos cifrados a lo largo del límite del bloque. Al manipular información sobre la exactitud de los bloques de relleno, un atacante puede usar la fuerza bruta para recrear un texto cifrado adecuado.

En este caso, el ataque no recupera directamente la clave privada, sino que sólo permite descifrar el texto cifrado o generar un mensaje firmado falso. Para llevar a cabo un ataque con éxito, es necesario enviar un volumen muy grande de mensajes de prueba para descifrarlos.

El uso de un ataque contra servidores TLS que utilizan cifrado basado en claves RSA permite al atacante almacenar pasivamente el tráfico interceptado y luego descifrarlo. Para los servidores que soportan PFS, llevar a cabo un ataque se vuelve mucho más difícil y el éxito depende de qué tan rápido se lleve a cabo el ataque.

Además, el método permite generar una firma digital ficticia que verifica el contenido de los mensajes ServerKeyExchange en TLS 1.2 o los mensajes CertificateVerify en TLS 1.3 transmitidos en la etapa de intercambio de claves, que se puede utilizar para realizar ataques MITM para interceptar la conexión TLS entre el cliente y el servidor.

Se menciona que la diferencia entre el método Marvin se reduce a una tecnología mejorada para separar datos incrementales correctos e incorrectos, filtrar falsos positivos, determinar con mayor precisión los retrasos en los cálculos y utilizar canales adicionales de terceros durante la medición.

En la práctica, el método propuesto permite descifrar el tráfico o generar firmas digitales sin conocer la clave RSA privada. Para probar la aplicabilidad del ataque, se publicó un script especial para verificar servidores TLS y herramientas para identificar problemas en bibliotecas.

El problema afecta a varias implementaciones de protocolos que utilizan RSA y PKCS. A pesar de que las bibliotecas criptográficas modernas contienen algún tipo de protección contra ataques basados ​​en el método Bleichenbacher, el estudio reveló que las bibliotecas tienen canales de fuga abiertos y no proporcionan un tiempo de procesamiento constante para paquetes con relleno correcto y erróneo. Por ejemplo, la implementación del ataque GnuTLS por parte de Marvin no está ligada al código que realiza directamente cálculos relacionados con RSA, sino que utiliza diferentes tiempos de ejecución para el código que decide si mostrar un mensaje de error en particular.

El autor del estudio también cree que la clase de vulnerabilidades considerada no se limita a RSA y puede afectar a muchos otros algoritmos criptográficos que dependen de bibliotecas estándar para cálculos de números enteros.

Para confirmar la posibilidad de llevar a cabo el ataque Marvin en la práctica, el investigador demostró la aplicabilidad del método a aplicaciones basadas en las bibliotecas M2Crypto y pyca/criptografía, en las que unas pocas horas fueron suficientes para comprometer el cifrado al realizar un experimento en un portátil promedio.

No hay solución

La lista de implementaciones criptográficas susceptibles incluye OpenSSL, GnuTLS, NSS de Mozilla (a pesar de los parches existentes, según los hallazgos de Kario), pyca/cryptography (que solo ha sido parcialmente remediado), M2Crypto y OpenSSL-ibmca.

Kario aboga firmemente por la discontinuación del uso de la encriptación RSA PKCS#1 v1.5, incluso en casos en los que pueda haber una necesidad percibida de compatibilidad con versiones anteriores. Según la investigación publicada, cualquier uso de la API genérica PKCS#1 v1.5 sin el método de Marvin se clasificaría bajo CWE-242, denotando el "Uso de Función Inherentemente Peligrosa".

Sin un código verificado libre de canales secundarios por parte del llamante, se consideraría automáticamente vulnerable el código del llamante. Para una comprensión más profunda, Red Hat ha publicado el documento de investigación completo, que delinea el vector de amenaza, el patrón de ataque y datos adicionales relacionados con esta vulnerabilidad perdurable.

La "solución" es dejar de usar PKCS#1 en RSA para TLS (TLS 1.3 ya lo hace, abandona todo padding en lo posible después de muchos parches en sus versiones anteriores). Hoy en día es también posible pasarse a ECDSA en vez de RSA.

Fuente: TelefonicaTech | Cibertip | DesdeLinux