Um dos pacotes acompanhantes do NixOS apresentou uma técnica de ataque que permite acessar dados em partições de disco criptografadas, em configurações que não requerem a inserção de uma senha de desbloqueio durante a inicialização, graças ao armazenamento de informações de descriptografia no TPM2 (Trusted Platform Module). Essas configurações são frequentemente usadas em servidores ou estações de trabalho multiusuário, onde é problemático inserir manualmente a senha após cada reinicialização.
Ao aplicar um método de criptografia como esse, a descriptografia é realizada usando uma chave adicional, armazenada no TPM e fornecida apenas após a confirmação do estado original do sistema. O estado do sistema é mantido na forma de hashes nos registradores PCR (Platform Configuration Register) e vinculado a uma assinatura digital que valida o carregador, bem como a somas de verificação do carregador e do ambiente de inicialização inicial (initrd). O acesso à chave no TPM é concedido somente quando todos os registradores PCR vinculados estão no mesmo estado que quando a chave foi salva.
Pressupõe-se que a cadeia de inicialização do sistema operacional seja verificada através do UEFI Secure Boot e o acesso às chaves só pode ser obtido a partir de uma imagem initrd não modificada. Após uma verificação bem-sucedida, o disco é desbloqueado automaticamente, mas o acesso aos dados descriptografados só pode ser obtido ao entrar em sua conta no sistema. Ao tentar acessar sem uma inicialização verificada ou ao tentar substituir ou modificar o initrd para interceptar chaves, a cadeia de confiança será quebrada, o estado dos registradores PCR será alterado e o TPM2 não fornecerá as informações necessárias para a descriptografia.
O método de ataque publicado permite contornar a necessidade de alterar o conteúdo do initrd em configurações que não identificam as partições LUKS criptografadas. Observa-se que a inclusão de tal verificação de partições não é descrita em todos os manuais encontrados sobre configuração de criptografia de discos, uma vez que a identificação da partição complica consideravelmente a configuração (exige a inclusão de um registro adicional PCR para verificar a chave da partição e a geração do initrd levando em conta seu valor). Exemplos de realização do ataque foram demonstrados para o Fedora Linux em combinação com a ferramenta clevis e para o NixOS em conjunto com o systemd-cryptenroll. Para realizar o ataque, é necessário acesso físico ao computador e a possibilidade de extrair o dispositivo.
O método baseia-se no fato de que o atacante pode substituir a partição raiz criptografada existente por sua própria partição criptografada, criada com o mesmo identificador UUID e com as chaves de descriptografia conhecidas pelo atacante. O ambiente initrd transferirá o controle para o processo init na partição do atacante. Como o conteúdo do initrd não foi alterado, o estado do TPM não será comprometido e, ao obter controle em seu ambiente, o atacante poderá usar o TPM para descriptografar a chave da partição de disco original.
O ataque consiste nos seguintes passos:
- Extração do disco e realização de uma análise em outro computador dos dados não criptografados na partição /boot. Determinação das informações sobre a partição criptografada e seu identificador UUID a partir da imagem initrd presente na partição /boot.
- Criação de um backup dos primeiros 64MB da partição LUKS criptografada.
- Substituição dos 64MB indicados por uma imagem com sua própria partição raiz, criptografada usando uma chave conhecida pelo atacante e com um identificador UUID igual ao da partição antiga.
- Retornar o disco ao computador original e inicializar com a partição raiz substituída. Como a desbloqueação automática pela chave do TPM para a partição substituída falha, o initrd solicita a entrada manual da senha.
- Obtenção da chave original do TPM, usando os metadados do TPM e o token criptografado do cabeçalho LUKS da partição antiga.
- Reposicionar o disco no computador do atacante, restaurar a parte reescrita da partição LUKS a partir do backup e utilizar a chave original obtida para acessar os dados.
Fonte: opennet.ru
