O problema está presente directamente na especificación TLS e só afecta ás conexións que utilizan cifrados baseados no protocolo de intercambio de claves DH (Diffie-Hellman, TLS_DH_*"). Cos cifrados ECDH o problema non se produce e seguen sendo seguros. Só os protocolos TLS ata a versión 1.2 son vulnerables; TLS 1.3 non se ve afectado polo problema. A vulnerabilidade prodúcese nas implementacións de TLS que reutilizan a clave secreta DH en diferentes conexións TLS (este comportamento prodúcese en aproximadamente o 4.4 % dos servidores Alexa Top 1M).
En OpenSSL 1.0.2e e versións anteriores, a chave principal DH reutilízase en todas as conexións do servidor a menos que se estableza explícitamente a opción SSL_OP_SINGLE_DH_USE. Desde OpenSSL 1.0.2f, a clave principal DH só se reutiliza cando se usan cifrados DH estáticos ("DH-*", por exemplo, "DH-RSA-AES256-SHA"). A vulnerabilidade non aparece en OpenSSL 1.1.1, xa que esta rama non usa unha chave primaria DH e non usa cifrados DH estáticos.
Cando se utiliza o método de intercambio de claves DH, ambos os dous lados da conexión xeran claves privadas aleatorias (en diante chave "a" e chave "b"), en función das cales se calculan e envían as claves públicas (ga mod p e gb mod p). Despois de que cada parte recibe as claves públicas, calcúlase unha chave primaria común (mod gab p), que se usa para xerar claves de sesión. O ataque Raccoon permítelle determinar a clave primaria mediante a análise de canles laterales, baseándose no feito de que as especificacións TLS ata a versión 1.2 requiren que todos os bytes nulos principais da clave primaria se descarten antes de realizar cálculos que a impliquen.
A inclusión da clave primaria truncada pásase á función de xeración de claves de sesión, que se basea en funcións hash con diferentes atrasos ao procesar datos diferentes. Medir con precisión o tempo das operacións clave realizadas polo servidor permítelle ao atacante determinar pistas (oráculo) que permiten xulgar se a chave primaria comeza de cero ou non. Por exemplo, un atacante podería interceptar a chave pública (ga) enviada polo cliente, retransmitila ao servidor e determinar
se a chave primaria resultante comeza de cero.
Por si só, definir un byte da clave non dá nada, pero ao interceptar o valor "ga" transmitido polo cliente durante a negociación da conexión, o atacante pode xerar un conxunto doutros valores asociados con "ga" e envialos a o servidor en sesións de negociación de conexión separadas. Ao xerar e enviar valores "gri*ga", un atacante pode, mediante a análise dos cambios nos atrasos na resposta do servidor, determinar os valores que levan a recibir claves primarias a partir de cero. Tras determinar tales valores, o atacante pode crear un conxunto de ecuacións para
Vulnerabilidades de OpenSSL
Os problemas adicionais anótanse por separado (
Fonte: opennet.ru