
Atestação Remota de TPM Leve e Fácil de Usar via Bluetooth
Ultrablue (User-friendly Lightweight TPM Remote Attestation over Bluetooth) é uma solução que permite a usuários individuais realizar atestação do estado de inicialização com seu telefone. Consiste em um servidor, executando em um computador, atuando como atestador, e um aplicativo cliente gráfico, executando em um telefone confiável, atuando como verificador.
Um caso de uso típico é verificar a integridade da sua cadeia de inicialização antes de desbloquear o computador, para prevenir ataques offline em um laptop sem supervisão. Também pode servir como ferramenta de depuração para problemas de secure boot após atualizações de firmware ou como um segundo fator para criptografia de disco.
Uma vez instalado, o fluxo de controle clássico do Ultrablue consiste em várias etapas:
Usar o Ultrablue requer um computador Linux cujo estado de inicialização você deseja atestar, com um TPM e uma interface Bluetooth (normalmente um laptop), bem como um telefone móvel.
Para registrar um telefone como verificador, inicie o servidor no modo de registro:
sudo ultrablue-server -enroll -pcr-extend
Isso exibirá um código QR no terminal. No telefone, execute o aplicativo cliente e toque no ícone + no canto superior direito para mostrar um leitor de código QR. Ao escanear, um canal Bluetooth Low Energy será estabelecido e o registro será executado automaticamente. Em caso de sucesso, um cartão de dispositivo aparecerá na página inicial do aplicativo cliente.
O Ultrablue pode estender seu TPM2 PCR9 usando um valor gerado aleatoriamente no momento do registro. Isso é útil se você quiser, por exemplo, vincular sua criptografia de disco à selagem TPM2. Nesse caso, o ultrablue estenderá de volta o registrador PCR9 durante a inicialização se a atestação for bem-sucedida e confiável. A extensão de PCR é configurada no momento do registro (a flag não tem efeito no modo de atestação):
sudo ultrablue-server -enroll -pcr-extend
Se você quiser que o ultrablue execute como parte do seu fluxo de inicialização, você precisa regenerar seu initramfs para incluí-lo. Facilitamos isso fornecendo integração com Dracut e systemd. Veja também os scripts de VM fornecidos, que oferecem uma maneira ainda mais fácil de testar isso.
Primeiro, instale server/dracut/90ultrablue no diretório de módulos
/usr/lib/dracut/modules.d/,
Você pode então executar o seguinte comando dracut:
dracut --add ultrablue /path/to/initrd --force
Se você usou a opção --pcr-extend durante a fase de registro, precisará
adicionar o módulo dracut crypt e copiarserver/dracut/90crypttab.conf em
/etc/dracut.conf.d (para contornar o bug #751640 do dracut):
cp server/dracut/90crypttab.conf /etc/dracut.conf.d
dracut --add "crypt ultrablue" /path/to/initrd --force
Observe que essas opções não são persistentes e o ultrablue será removido do seu initramfs na próxima vez que ele for gerado. Consulte a página de manual dracut.conf(5) para configuração persistente.
Se você fez a etapa de configuração do initramfs, o servidor Ultrablue será executado automaticamente durante a inicialização. Caso contrário, inicie manualmente o servidor no modo de atestação:
sudo ultrablue-server
Após iniciado, o servidor aguardará um verificador (telefone) se conectar. No telefone, clique no ícone ▶️ do cartão do dispositivo. Isso executará a atestação. Quando terminar, o aplicativo cliente exibirá o resultado da atestação.
O principal objetivo de executar o ultrablue no momento da inicialização é usá-lo para a descriptografia de disco. Um exemplo de como fazer isso é fornecido e documentado no testbed do servidor.
O projeto Ultrablue foi desenvolvido na ANSSI (ssi.gouv.fr) por Loïc Buckwell, sob a supervisão de Nicolas Bouchinet e Gabriel Kerneis.
Se você tiver alguma dúvida, entre em contato por meio de uma issue no Github, ou diretamente com Gabriel Kerneis [email protected].