
Attestazione remota TPM leggera e facile da usare tramite Bluetooth
Ultrablue (User-friendly Lightweight TPM Remote Attestation over Bluetooth) è una soluzione che consente ai singoli utenti di eseguire l'attestazione dello stato di avvio con il proprio telefono. Consiste in un server, in esecuzione su un computer, che agisce come attestante, e in un'applicazione client grafica, in esecuzione su un telefono attendibile, che agisce come verificatore.
Un caso d'uso tipico è verificare l'integrità della propria bootchain prima di sbloccare il computer, per prevenire attacchi offline su un laptop incustodito. Può inoltre fungere da strumento di debug per problemi di secure boot dopo aggiornamenti del firmware o da secondo fattore per la crittografia del disco.
Una volta installato, il flusso di controllo classico di Ultrablue consiste in diversi passaggi:
L'uso di Ultrablue richiede un computer Linux di cui si desidera attestare lo stato di avvio, dotato di un TPM e di un'interfaccia Bluetooth (tipicamente un laptop), oltre a un telefono mobile.
Per registrare un telefono come verificatore, avviare il server in modalità di registrazione:
sudo ultrablue-server -enroll -pcr-extend
Questo visualizzerà un codice QR sul terminale. Dal telefono, eseguire l'app client e toccare l'icona + nell'angolo in alto a destra per visualizzare uno scanner di codici QR. Dopo la scansione, verrà stabilito un canale Bluetooth Low Energy e la registrazione verrà eseguita automaticamente. In caso di successo, una scheda del dispositivo apparirà nella home page dell'applicazione client.
Ultrablue può estendere il TPM2 PCR9 utilizzando un valore generato casualmente al momento della registrazione. Questo è utile se si desidera, ad esempio, legare la crittografia del disco al TPM2 sealing. In tal caso, ultrablue estenderà nuovamente il registro PCR9 durante l'avvio se l'attestazione ha successo ed è attendibile. L'estensione della PCR è configurata al momento della registrazione (il flag non ha effetto in modalità di attestazione):
sudo ultrablue-server -enroll -pcr-extend
Se si desidera che ultrablue venga eseguito come parte del flusso di avvio, è necessario rigenerare l'initramfs per includerlo. Rendiamo tutto più semplice fornendo l'integrazione con Dracut e systemd. Vedere anche gli script VM forniti, che offrono un modo ancora più semplice per testare il tutto.
Innanzitutto, installare server/dracut/90ultrablue nella directory dei
moduli /usr/lib/dracut/modules.d/,
Si può quindi eseguire il seguente comando dracut:
dracut --add ultrablue /path/to/initrd --force
Se si è utilizzata l'opzione --pcr-extend durante la fase di registrazione,
sarà necessario aggiungere il modulo dracut crypt e copiare
server/dracut/90crypttab.conf in /etc/dracut.conf.d (per aggirare il bug
dracut #751640):
cp server/dracut/90crypttab.conf /etc/dracut.conf.d
dracut --add "crypt ultrablue" /path/to/initrd --force
Nota: queste opzioni non sono persistenti e ultrablue verrà rimosso dall'initramfs alla sua prossima generazione. Consultare la pagina man dracut.conf(5) per la configurazione persistente.
Se è stato eseguito il passaggio di configurazione dell'initramfs, il server Ultrablue verrà eseguito automaticamente durante l'avvio. In caso contrario, avviare manualmente il server in modalità di attestazione:
sudo ultrablue-server
Una volta avviato, il server attenderà che un verificatore (telefono) si connetta. Dal telefono, fare clic sull'icona ▶️ della scheda del dispositivo. Questo eseguirà l'attestazione. Al termine, l'applicazione client visualizzerà il risultato dell'attestazione.
L'obiettivo principale dell'esecuzione di ultrablue all'avvio è utilizzarlo per la decrittazione del disco. Un esempio su come fare è fornito e documentato nel server testbed.
Il progetto Ultrablue è stato sviluppato presso l'ANSSI (ssi.gouv.fr) da Loïc Buckwell, sotto la supervisione di Nicolas Bouchinet e Gabriel Kerneis.
Per qualsiasi domanda, contattateci tramite una issue su Github, o direttamente Gabriel Kerneis [email protected].