Secure Boot: gestire le chiavi con KeyTool

Avevo detto “adesso installo Linux” e continuo a parlare d’altro, ma questo argomento è di notevole importanza.

Stando a quanto ho trovato su internet, tutti i BIOS UEFI semidecenti dovrebbero avere delle opzioni per attivare la Setup Mode e gestire le chiavi\database di chiavi (PK, KEK, DB, DBX, anche se alcuni sono certificati e altri hash e altri database di chiavi\certificati\hash, ma chiamiamole comunque chiavi perché tutti le chiamano chiavi).

Da ciò posso concludere che tutti i 3 BIOS UEFI che ho visto finora sono indecenti perché non hanno nessuna di quelle opzioni.

Fortunatamente, esiste un aggeggio chiamato KeyTool che fa parte di PreLoader, o almeno su Arch sta nel pacchetto di PreLoader.
L’obiettivo è avviare KeyTool.efi.

Sulla ISO live di Arch non si riesce perché il KeyTool non è nella ESP, che è in sola lettura. Sul sistema installato si può e forse si riesce anche sulla live di altre distro. La procedura, in linea generale, è questa:

  1. Ottenere una distro che non richieda i quintupli salti mortali per scaricare PreLoader.
  2. Cercare KeyTool.efi. Su Arch risiede in /usr/lib/prebootloader.
    Se non c’è, fare pacman -Sy && pacman -S preloader o comando equivalente per la propria distro.
    Se ancora non c’è, googlare per capire dove la propria distro lo nasconde.
  3. Andare a cercare la ESP, cioè la partizione FAT di EFI, cioè /boot.
    Su Arch che ho installato (la live è diversa e ha /boot in sola lettura), dentro ci sono il kernel, l’initramfs e le cartelle EFI e loader. Quest’ultima contiene i file di configurazione del bootloader, che nel mio caso è systemd-boot, un tempo noto come gummiboot.
    I file avviabili dal bootloader stanno in /boot/EFI/systemd.
  4. Copiare i file .efi da /usr/lib/prebootloader a /boot/EFI/systemd, o da qualche altra parte in /boot visto che probabilmente funziona comunque.
  5. Se Secure Boot è attivato, avviare HashTool e fare “enroll hash” per KeyTool.efi.
  6. Avviare KeyTool.efi

Per avviare PreLoader.efi e KeyTool.efi, la via più facile in teoria è riavviare, entrare nella UEFI Shell che c’è nella ISO, cercare di capire dove sta la partizione /boot usando map, poi andare a cercare i file e semplicemente eseguirli, con qualcosa come fs0:\boot\EFI\boot\KeyTool.efi.
Purtroppo sulla ISO fs0: è la directory /boot della ISO, quella in sola lettura. blk0: sembra invece essere la partizione /boot sul disco, ma non c’è verso di accedervi o montarla, perché il comando mount della UEFI Shell vuole due parametri, e qualsiasi cosa metta come secondo parametro non va bene.

Quindi, dalla ISO non funziona assolutamente nulla e la UEFI Shell si conferma nuovamente un sistema inutile e progettato con i piedi.

Avendo già installato Arch, la seconda via più semplice è mettere nel menu del bootloader anche KeyTool e HashTool. Con systemd-boot bisogna creare il file /boot/loader/entries/keytool.conf, con contenuto:
title KeyTool
efi /EFI/systemd/KeyTool.efi

e /boot/loader/entries/hashtool.conf, con:
title HashTool
efi /EFI/systemd/HashTool.efi

I percorsi sono relativi a /boot (ovvero: i file stanno in /boot/EFI/systemd/HashTool.efi), /boot è sempre la ESP, cioè la partizione FAT di EFI.

Una volta fatto, riavviare, “enrollare” l’hash di KeyTool e avviare KeyTool.

Tutto questo partendo dall’assunto che Arch sia installato e avviabile e il bootloader funzioni. Per maggiori dettagli consultare l’articolo su systemd-boot, sui bootloader e la guida all’installazione.

La prima informazione che KeyTool mi ha fornito è che “platform is in User Mode”, cioè non è nella setup mode che non c’è verso di attivare ma deve esistere per dare un senso a Secure Boot. E che Secure Boot è attivato. Purtroppo non si può cambiare modalità.

Poi ho potuto ammirare la PK, che si può sostituire, volendo. Ma non ho idea se funzioni davvero. Il certificato della PK la dichiara proveniente da Phoenix Technologies Ltd (produttore del BIOS) e c’è scritto “Example” dentro, da cui si evince la considerazione e la cura che l’OEM ha usato per la sicurezza di questo computer: nulla.
Eppure ha deciso di infilare giù nella gola di tutti i suoi clienti Secure Boot, per il puro gusto di farlo.

Oh, certo, tutto funziona, tutto bello, ma Secure Boot a ogni avvio deve notificarmi per 3 volte di fila che Image failed to verify with *ACCESS DENIED* che è un altro bello schifo (a ogni avvio. Per 3 volte. Che importa che gli hash siano “enrollati”!) e non so se sia colpa dell’OEM, di Phoenix o di chi altro, e poi avviare Linux comunque con indifferenza, ma se nel certificato c’è scritto “Example” dubito fortemente che dovessero lasciarlo lì così.
Beh, almeno da quel thread deduco che anche altri hanno incontrato BIOS buggati che fanno a pugni con PreLoader. Non so se esserne felice o deprimermi per la generale qualità tendente a zero di tutte le implementazioni di Secure Boot esistenti in questo momento.

La KEK in realtà sono due chiavi non rimuovibili o modificabili: una è quella Microsoft, l’altra è un’altra Example.

Nel DB ci sono due chiavi Microsoft (Microsoft Root Certificate Authority 2010Microsoft Corporation Third Party Marketplace Root) che in realtà sono certificati e un hash SHA256 che non so di cosa sia, e nessuna di queste si può rimuovere o modificare.

Nel DBX ci sono vari hash, probabilmente di malware che non deve essere eseguito, immagino.

Poi si possono gestire le MOK, cioè gli hash “enrollati”, evviva! Ancora non ho capito se vengano salvati nella NVRAM o in che altro luogo, ma almeno si possono eliminare quelli vecchi e inutili, “enrollarne” altri, sostituirli, etc…

Beh, meglio che niente.

Annunci

Un pensiero su “Secure Boot: gestire le chiavi con KeyTool

  1. Pingback: Secure Boot: troppo facile da aggirare | while(false) do {/*nothing*/};

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...