O problema está presente diretamente na especificação TLS e afeta apenas conexões que utilizam cifras baseadas no protocolo de troca de chaves DH (Diffie-Hellman, TLS_DH_*"). Com as cifras ECDH o problema não ocorre e elas permanecem seguras. Apenas os protocolos TLS até a versão 1.2 são vulneráveis; o TLS 1.3 não é afetado pelo problema. A vulnerabilidade ocorre em implementações TLS que reutilizam a chave secreta DH em diferentes conexões TLS (esse comportamento ocorre em aproximadamente 4.4% dos servidores Alexa Top 1M).
No OpenSSL 1.0.2e e versões anteriores, a chave primária DH é reutilizada em todas as conexões do servidor, a menos que a opção SSL_OP_SINGLE_DH_USE seja explicitamente definida. Desde o OpenSSL 1.0.2f, a chave primária DH só é reutilizada ao usar cifras DH estáticas ("DH-*", por exemplo, "DH-RSA-AES256-SHA"). A vulnerabilidade não aparece no OpenSSL 1.1.1, pois esta ramificação não usa uma chave primária DH e não usa cifras DH estáticas.
Ao usar o método de troca de chaves DH, ambos os lados da conexão geram chaves privadas aleatórias (doravante denominadas chave “a” e chave “b”), com base nas quais as chaves públicas (ga mod p e gb mod p) são calculadas e enviadas. Depois que cada parte recebe as chaves públicas, uma chave primária comum (gab mod p) é calculada, que é usada para gerar chaves de sessão. O ataque Raccoon permite determinar a chave primária por meio de análise de canal lateral, com base no fato de que as especificações TLS até a versão 1.2 exigem que todos os bytes nulos iniciais da chave primária sejam descartados antes dos cálculos que a envolvem.
Incluir a chave primária truncada é passada para a função de geração de chave de sessão, que é baseada em funções hash com atrasos diferentes ao processar dados diferentes. Medir com precisão o tempo das operações de chave realizadas pelo servidor permite ao invasor determinar pistas (oráculo) que permitem julgar se a chave primária começa do zero ou não. Por exemplo, um invasor poderia interceptar a chave pública (ga) enviada pelo cliente, retransmiti-la ao servidor e determinar
se a chave primária resultante começa do zero.
Por si só, definir um byte da chave não dá nada, mas ao interceptar o valor “ga” transmitido pelo cliente durante a negociação da conexão, o invasor pode gerar um conjunto de outros valores associados a “ga” e enviá-los para o servidor em sessões de negociação de conexão separadas. Ao gerar e enviar valores “gri*ga”, um invasor pode, através da análise de alterações nos atrasos na resposta do servidor, determinar os valores que levam ao recebimento de chaves primárias começando do zero. Tendo determinado tais valores, o atacante pode criar um conjunto de equações para
Vulnerabilidades OpenSSL
Problemas adicionais são anotados separadamente (
Fonte: opennet.ru