ASA-2019-00392 – AMD Secure Encrypted Virtualization (SEV): Recuperação da chave da plataforma DH via ataque de curva inválida


For the English version of this alert, click here.

Allele Security Alert

ASA-2019-00392

Identificador(es)

ASA-2019-00392, CVE-2019-9836

Título

Recuperação da chave da plataforma DH via ataque de curva inválida

Fabricante(s)

AMD

Produto(s)

AMD EPYC server platforms

Versão(ões) afetada(s)

As plataformas de servidor AMD EPYC (codinome “Naples”) executando firmware do SEV na versão 0.17 build 11 e abaixo são afetadas

Versão(ões) corrigida(s)

Plataformas de servidores AMD EPYC (codinome “Naples”) executando firmware do SEV na versão 0.17 build 22

Prova de conceito

Desconhecido

Descrição

A implementação da curva elíptica do SEV (ECC) mostrou-se vulnerável a um ataque de curva inválida. No comando launch-start, um atacante pode enviar pequenos pontos ECC de pedidos, não nas curvas oficiais do NIST, e forçar o firmware SEV a multiplicar um pequeno ponto de pedido pelo escalar DH privado do firmware.

Coletando resíduos modulares suficientes, um atacante pode recuperar a chave privada completa do PDH. Com o PDH, um atacante pode recuperar a chave de sessão e o segredo de lançamento da VM. Isso quebra as garantias de confidencialidade oferecidas pela SEV.

Detalhes técnicos

Troca de chaves durante o lançamento da VM

1. O PSP publica sua chave pública PDH por meio do comando SEV_PDH_CERT_EXPORT. Essa chave é calculada multiplicando-se o gerador ECC (as curvas NIST P256 / P384 são suportadas) pela chave privada PDH: A<-G*k, onde k, a chave privada, é gerada aleatoriamente no intervalo (1, ordem (G) )).

2. O cliente gera sua chave DH privada, s, e calcula a chave compartilhada C<-A*s=G*k*s. C é o ponto compartilhado na curva. Sua coordenada x é dividida e usada como segredo mestre compartilhado. Duas chaves KEK/KIK são derivadas do segredo mestre e usadas para proteger (criptografia + integridade) as chaves de sessão.

3. O cliente calcula sua chave pública B<-G*s e a envia para o PSP através do comando SEV_LAUNCH_START.

4. O PSP calcula a chave compartilhada C multiplicando a chave pública do cliente por seu escalar privado do PDH: C<-B*k=G*s*k. Como o cliente, o PSP toma a coordenada x de C, calcula o segredo mestre compartilhado e deriva o KEK/KIK. Estes são usados ​​para desembrulhar as chaves da sessão. Veja a especificação da API [3] para detalhes.

A segurança do ECDH depende do ponto gerador, G, que tem uma ordem grande e do problema do logaritmo discreto sendo difícil para a curva.

Observe que na etapa 4, o PSP realiza uma computação com sua chave privada nos dados fornecidos pelo usuário – o ponto público do cliente.

Ataque de curva inválida

A multiplicação de pontos de ECC depende de uma primitiva de adição de pontos. Existem diferentes implementações para adição de pontos de ECC. Um comum é baseado na forma curta de Weierstrass ECC, como descrito em [4]. Observe que o parâmetro da equação “b” da curva nunca é usado.

Um ataque de curva inválida é onde a multiplicação de pontos do ECDH é feita em uma curva diferente – parâmetros diferentes (a, b). Isso se torna possível na função de adição curta do Weierstrass, já que o parâmetro “b” não é usado. Nesta curva, o ponto tem uma pequena ordem principal. Tentando todos os valores possíveis para o pequeno ponto de ordem, um atacante pode recuperar os bits escalares privados (modulo a ordem). Os resíduos modulares são montados off-line usando o Teorema Chinês do Restante, levando a uma recuperação completa da chave. Veja o artigo original [5] sobre ataques de curva inválidas, ou um artigo mais recente [6] sobre o assunto.

Créditos

Cfir Cohen (Google Cloud Security Team)

Referência(s)

AMD-SEV: Platform DH key recovery via invalid curve attack (CVE-2019-9836)
https://seclists.org/fulldisclosure/2019/Jun/46

AMD Product Security | AMD
https://www.amd.com/en/corporate/product-security

Secure Encrypted Virtualization API Version 0.17
https://developer.amd.com/wp-content/resources/55766.PDF

Short Weierstrass curves
https://www.hyperelliptic.org/EFD/g1p/auto-shortw.html

Differential Fault Attacks on Elliptic Curve Cryptosystems (Extended Abstract)
https://www.iacr.org/archive/crypto2000/18800131/18800131.pdf

Breaking the Bluetooth Pairing – Fixed Coordinate Invalid Curve Attack
https://www.cs.technion.ac.il/~biham/BT/bt-fixed-coordinate-invalid-curve-attack.pdf

amd_sev_fam17h_model0xh_0.17b22.zip
https://developer.amd.com/wp-content/resources/amd_sev_fam17h_model0xh_0.17b22.zip

CVE-2019-9836
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-9836

CVE-2019-9836
https://nvd.nist.gov/vuln/detail/CVE-2019-9836

Se encontrou algum erro neste alerta ou deseja uma análise compreensiva, entre em contato.

Última modificação: 5 agosto 2019

Não somos responsáveis por qualquer perda de dados, corrupção de dispositivos ou qualquer outro tipo de problema devido ao uso de qualquer informação mencionada em nossos alertas de segurança.