El problema está presente directamente en la especificación TLS y sólo afecta a las conexiones que utilizan cifrados basados en el protocolo de intercambio de claves DH (Diffie-Hellman, TLS_DH_*"). Con los cifrados ECDH el problema no ocurre y permanecen seguros. Sólo los protocolos TLS hasta la versión 1.2 son vulnerables; TLS 1.3 no se ve afectado por el problema. La vulnerabilidad ocurre en implementaciones TLS que reutilizan la clave secreta DH en diferentes conexiones TLS (este comportamiento ocurre en aproximadamente el 4.4% de los servidores Alexa Top 1M).
En OpenSSL 1.0.2e y versiones anteriores, la clave principal DH se reutiliza en todas las conexiones del servidor a menos que la opción SSL_OP_SINGLE_DH_USE esté configurada explícitamente. Desde OpenSSL 1.0.2f, la clave primaria DH solo se reutiliza cuando se utilizan cifrados DH estáticos ("DH-*", por ejemplo, "DH-RSA-AES256-SHA"). La vulnerabilidad no aparece en OpenSSL 1.1.1, ya que esta rama no usa una clave primaria DH y no usa cifrados DH estáticos.
Cuando se utiliza el método de intercambio de claves DH, ambos lados de la conexión generan claves privadas aleatorias (en adelante clave “a” y clave “b”), en función de las cuales se calculan y envían las claves públicas (ga mod p y gb mod p). Después de que cada parte recibe las claves públicas, se calcula una clave primaria común (gab mod p), que se utiliza para generar claves de sesión. El ataque Raccoon le permite determinar la clave principal a través del análisis de canal lateral, basándose en el hecho de que las especificaciones TLS hasta la versión 1.2 requieren que todos los bytes nulos iniciales de la clave principal se descarten antes de realizar cálculos que la involucren.
La inclusión de la clave primaria truncada se pasa a la función de generación de claves de sesión, que se basa en funciones hash con diferentes retrasos al procesar diferentes datos. Medir con precisión el tiempo de las operaciones clave realizadas por el servidor permite al atacante determinar pistas (oráculo) que permiten juzgar si la clave primaria comienza desde cero o no. Por ejemplo, un atacante podría interceptar la clave pública (ga) enviada por el cliente, retransmitirla al servidor y determinar
si la clave primaria resultante comienza desde cero.
Por sí solo, definir un byte de la clave no proporciona nada, pero al interceptar el valor "ga" transmitido por el cliente durante la negociación de la conexión, el atacante puede generar un conjunto de otros valores asociados con "ga" y enviarlos a el servidor en sesiones separadas de negociación de conexión. Al generar y enviar valores “gri*ga”, un atacante puede, mediante el análisis de cambios en los retrasos en la respuesta del servidor, determinar los valores que conducen a recibir claves primarias comenzando desde cero. Una vez determinados dichos valores, el atacante puede crear un conjunto de ecuaciones para
Vulnerabilidades de OpenSSL
Los problemas adicionales se indican por separado (
Fuente: opennet.ru