Yubikey Crittografia full-disk di autenticazione a due fattori tramite LUKS


27

Di recente ho acquistato uno Yubikey Neo, un piccolo dispositivo di autenticazione hardware secondo fattore. È principalmente destinato all'uso con One Time Passwords e il protocollo emergente U2F, ma dalla versione 2 di Yubikey supporta anche l'autenticazione HMAC-SHA1 challenge-response. HMAC-SHA1 combina una chiave segreta (memorizzata all'interno di Yubikey) e la combina con una passphrase per generare una risposta.

Come posso combinare Yubikey con la mia configurazione Ubuntu FDE per utilizzare 2FA con il mio disco rigido crittografato?

Risposte:


30

Un gruppo chiamato PrivacyIdea ha creato un piccolo pacchetto per aggiungere una routine di risposta alla sfida HMAC-SHA1 a initramfs, il che significa che Ubuntu può interrogarti per una sfida da passare a Yubikey e quindi utilizzare la risposta per sbloccare il volume LUKS. Per la maggior parte, sto seguendo queste istruzioni , con alcuni commenti aggiunti. Il processo è in realtà molto facile da fare.

Ho provato questo su Ubuntu 14.04, 16.04 e 18.04; usando un Yubikey Neo. Dovrebbe funzionare con qualsiasi recente Yubikey, con firmware 2.0+ e con qualsiasi versione di Ubuntu dopo il 14.04. Ho anche testato Ubuntu 19.04 con uno Yubikey 5C, era necessario del lavoro aggiuntivo ma può essere fatto funzionare. Potrebbero esserci anche altri dispositivi hardware HMAC-SHA1 di risposta alle sfide con cui funziona, ma non ne sono a conoscenza. Come sempre, assicurati di avere un backup dei tuoi dati prima di procedere: non dovrebbero esserci problemi qui, ma c'è sempre la possibilità che questo distrugga tutto sul tuo computer. Queste istruzioni non sono coperte da garanzia.

Aggiornamento: da Ubuntu 16.04, i pacchetti necessari sono nei repository principali e non è necessario PPA.

Aggiungi un commento se hai domande!


0. Prerequisiti

Affinché ciò funzioni, devi già avere la crittografia LUKS a disco intero impostata e funzionante. Puoi farlo selezionando l'opzione appropriata durante l'installazione di Ubuntu. Per la massima sicurezza, durante l'installazione è necessario disporre di una passphrase molto potente selezionata. Se la tua passphrase non è all'altezza, dovresti cambiarla con una migliore prima di continuare ( istruzioni più dettagliate qui ).

Il metodo seguente non sostituirà alcuna passphrase esistente, ma aggiungerà invece un'altra passphrase a uno degli slot LUKS. Quindi se perdi il tuo Yubikey puoi comunque sbloccare il tuo computer usando qualsiasi passphrase esistente - ti suggerisco di prenderne nota e nasconderlo in un posto sicuro - ne avrai bisogno anche alcune volte durante questa procedura. La tua nuova passphrase di sfida Yubikey dovrebbe essere ancora abbastanza forte, ma non deve essere lunga quanto la passphrase che hai usato durante l'installazione di Ubuntu.


1. Aggiungi PrivacyIdea PPA e installa il pacchetto

Su Ubuntu 14.04

Apri un terminale ed esegui il seguente comando:

sudo add-apt-repository ppa:privacyidea/privacyidea 

Premi Invio quando richiesto, quindi esegui:

sudo apt-get update

Quindi installare il pacchetto con:

sudo apt-get install yubikey-luks

Su Ubuntu 16.04, 18.04

Non è necessario un PPA, è possibile installare il pacchetto con:

sudo apt-get install yubikey-luks

Su Ubuntu 19.04

Vedi questa risposta per come compilare il yubikey-lukspacchetto dal sorgente per Ubuntu 19.04.


2. Installa il software Yubikey

Se stai usando la funzionalità HMAC-SHA1 di Yubikey per qualcos'altro, puoi saltare questa sezione. Cancellerà qualsiasi configurazione nel secondo slot Yubikey, quindi non eseguire questo passaggio se si utilizza HMAC-SHA1 per altri scopi con questo Yubikey.

Dovrai configurare il tuo Yubikey in modo che funzioni con Ubuntu installando il software richiesto, da Yubico PPA su Ubuntu 14.04 o dal repository principale di Ubuntu su 16.04 e versioni successive.

Su Ubuntu 14.04

Se non l'hai ancora fatto, aggiungi il PPA e installa il pacchetto con:

sudo add-apt-repository ppa:yubico/stable
sudo apt-get update
sudo apt-get install yubikey-personalization

Su Ubuntu 16.04, 18.04 (e versioni successive)

sudo apt-get install yubikey-personalization

3. Inizializzare lo slot Yubikey per HMAC-SHA1

Ora dobbiamo programmare il secondo slot di Yubikey con una configurazione HMAC-SHA1. Questo cancellerà la tua precedente configurazione di slot, che è vuota per impostazione predefinita. Ancora una volta, se si utilizza HMAC-SHA1 per qualcos'altro , non emettere questo comando: cancellerà la configurazione. È possibile utilizzare in modo sicuro la stessa chiave segreta all'interno di Yubikey per questa configurazione LUKS come per gli altri usi. (Ad esempio, con un altro computer che utilizza LUKS + Yubikey).

ykpersonalize -2 -ochal-resp -ochal-hmac -ohmac-lt64 -oserial-api-visible

Il terminale visualizzerà alcune informazioni sulle modifiche apportate. Non è necessario annotare questo, ma mostrerà la chiave segreta utilizzata da Yubikey nell'algoritmo HMAC-SHA1 per calcolare la risposta quando viene data una sfida.


4. Iscrivere Yubikey allo slot LUKS

Ora modificheremo la configurazione LUKS per aggiungere la risposta di Yubikey come una delle chiavi di decrittazione.

La partizione che dobbiamo specificare dipende dal fatto che si stia utilizzando BIOS o UEFI per avviare il computer. Per BIOS, il volume crittografato è /dev/sda5attivo per impostazione predefinita, per UEFI è impostato su /dev/sda3. Puoi verificarlo aprendo l' disksutilità e confermando il percorso della partizione - dovrebbe essere sda3o sda5. NOTA: sui computer più recenti con dischi NVMe, il percorso sarà simile /dev/nvme0n1p3.

Esegui questo in un terminale:

sudo yubikey-luks-enroll -d /dev/sda3 -s 7

Questo scriverà nello slot 7 della configurazione LUKS, segui le istruzioni nel programma di installazione (variano leggermente a seconda della versione in esecuzione).

Allora hai finito! Dovresti essere in grado di riavviare il computer e, se Yubikey è inserito, puoi digitare la password della sfida e utilizzare Yubikey come secondo fattore per sbloccare la partizione LUKS e avviare il sistema. Dopo aver decifrato il disco rigido, puoi rimuovere Yubikey.

Se perdi il tuo Yubikey puoi comunque inserire la tua passphrase originale (si spera molto lunga) per decrittografare il disco rigido, quindi puoi seguire di nuovo questa procedura per registrare un nuovo Yubikey.


Modifica della passphrase di verifica della crittografia

Modificare la password in un secondo momento è abbastanza semplice, basta usare questo comando per resettare la chiave segreta. Non è del tutto necessario ripristinare la chiave segreta, ma non farà male. Tieni presente che questo distruggerà la chiave segreta precedente, non farlo se usi HMAC-SHA1 per qualcos'altro con questo Yubikey. (Ad esempio, con un altro computer che utilizza LUKS + Yubikey).

 ykpersonalize -2 -ochal-resp -ochal-hmac -ohmac-lt64 -oserial-api-visible

Quindi, in modo simile al passaggio 4 sopra, per registrare una nuova password nello slot della chiave LUKS, tranne che per cancellare lo slot 7 con questo comando:

sudo yubikey-luks-enroll -d /dev/sda3 -s 7 -c

Quando richiesto Enter any remaining passphrase, utilizzare la passphrase di backup, non la passphrase di sfida di Yubikey. Quindi inserisci una nuova passphrase di sfida Yubikey, due volte, quindi alla fine dovrai inserire l'ultima passphrase di backup.

Ora la tua vecchia passphrase di sfida Yubikey è stata rimossa e solo la tua nuova decodificherà il disco rigido. La passphrase di backup precedente sarà sempre la stessa. È possibile modificare tale passphrase seguendo i collegamenti nel passaggio 0 .


Nota sulle implicazioni di sicurezza

L'aggiunta di un Yubikey aggiungerà un certo livello di sicurezza al tuo sistema: qualcuno deve conoscere sia la passphrase di sfida che il tuo Yubikey per poter sbloccare il disco rigido (o trovare la passphrase iniziale, che ora stai utilizzando come backup) . Tuttavia, è tecnicamente fattibile per un utente malintenzionato decrittografare il disco rigido se conoscono la passphrase della sfida (ad esempio, "navigando sulle spalle" durante la digitazione) e possono accedere a Yubikey solo per un breve periodo. Usando la passphrase di sfida potevano ottenere la risposta dallo Yubikey e archiviarlo, quindi utilizzarlo per decrittografare il disco rigido in qualsiasi momento senza lo Yubikey. O, ancora una volta, se un utente malintenzionato o un malware conosceva la tua passphrase ed era in grado di eseguire il codice su una macchina collegata al tuo Yubikey, poteva anche lanciare la sfida e archiviare la risposta. È quindi ancora estremamente importante essere vigili quando si inserisce la passphrase della sfida e assicurarsi di avere sempre Yubikey in un luogo sicuro. Dovresti anche collegarlo sempre e solo a una macchina di cui ti fidi. Se perdi traccia di Yubikey e sospetti che qualcuno possa averlo usato per provare ad apprendere la chiave di decodifica, esegui di nuovo i passaggi 2 e 3 per ripristinare la chiave segreta all'interno di Yubikey e scegli una nuova passphrase di sfida. Nota che se un avversario è riuscito a imparare una delle tue passphrase (o la risposta HMAC-SHA1 da Yubikey o il tuo backup), potrebbe fare un backup della chiave master LUKS, e quindi usarlo per decrittografare il tuo disco rigido anche se si cambia la passphrase in futuro. e per assicurarti di avere sempre Yubikey in un luogo sicuro. Dovresti anche collegarlo sempre e solo a una macchina di cui ti fidi. Se perdi traccia di Yubikey e sospetti che qualcuno possa averlo usato per provare ad apprendere la chiave di decodifica, esegui di nuovo i passaggi 2 e 3 per ripristinare la chiave segreta all'interno di Yubikey e scegli una nuova passphrase di sfida. Nota che se un avversario è riuscito a imparare una delle tue passphrase (o la risposta HMAC-SHA1 da Yubikey o il tuo backup), potrebbe fare un backup della chiave master LUKS, e quindi usarlo per decrittografare il tuo disco rigido anche se si cambia la passphrase in futuro. e per assicurarti di avere sempre Yubikey in un luogo sicuro. Dovresti anche collegarlo sempre e solo a una macchina di cui ti fidi. Se perdi traccia di Yubikey e sospetti che qualcuno possa averlo usato per provare ad apprendere la chiave di decodifica, esegui di nuovo i passaggi 2 e 3 per ripristinare la chiave segreta all'interno di Yubikey e scegli una nuova passphrase di sfida. Nota che se un avversario è riuscito a imparare una delle tue passphrase (o la risposta HMAC-SHA1 da Yubikey o il tuo backup), potrebbe fare un backup della chiave master LUKS, e quindi usarlo per decrittografare il tuo disco rigido anche se si cambia la passphrase in futuro. eseguire nuovamente i passaggi 2 e 3 per ripristinare la chiave segreta all'interno di Yubikey e scegliere una nuova passphrase di sfida. Nota che se un avversario è riuscito a imparare una delle tue passphrase (o la risposta HMAC-SHA1 da Yubikey o il tuo backup), potrebbe fare un backup della chiave master LUKS, e quindi usarlo per decrittografare il tuo disco rigido anche se si cambia la passphrase in futuro. eseguire nuovamente i passaggi 2 e 3 per ripristinare la chiave segreta all'interno di Yubikey e scegliere una nuova passphrase di sfida. Nota che se un avversario è riuscito a imparare una delle tue passphrase (o la risposta HMAC-SHA1 da Yubikey o il tuo backup), potrebbe fare un backup della chiave master LUKS, e quindi usarlo per decrittografare il tuo disco rigido anche se si cambia la passphrase in futuro.La pagina man di cryptsetup spiega questo, guarda la sezione luksHeaderBackup . Se si sospetta che ciò sia accaduto, è necessario creare un volume LUKS completamente nuovo per proteggere i dati.


Aggiornamento: ho anche provato questo con 15.04, sembra che il PPA non abbia una build del pacchetto richiesto, quindi devo cambiare la linea DEB nelle Sorgenti software per usare il repository "fidato" invece di "vivido ". Dopo aver apportato questa modifica, la mia configurazione LUKS + Yubikey ora funziona il 15.04.
seanlano,

4
Non utilizzare più il repository privacyidea! Il pacchetto è ora contenuto in debian upstream!
cornelinux,

1
Esiste un modo per evitare il login senza yubikey: cambia la passphrase di luks ogni volta che l'utente accede. C'è l'implementazione per Gentoo qui: github.com/flowolf/initramfs_ykfde Può essere adattato per Ubuntu in breve tempo.
Senza nome_1

1
Immagino che la stessa procedura funzioni per la nuova versione LTS 18.04?
Mark Veenstra,

2
Ho provato con Ubuntu 18.04 e funziona benissimo.
Jetole,

0

Aggiornamento per Ubuntu 19.04:

Sembra che a partire da Ubuntu 19.04 (e forse 18.10, non ho provato quella versione), cryptsetupè cambiato quanto basta per interrompere il modo yubikey-luksdi lavorare. Questo commit dal repository upstream sembra implementare una correzione, ma il repository originale non sembra essere stato aggiornato da ottobre 2018. Ho trovato questo fork del repository che ha la correzione, così come alcuni altri bit di riordino- e sono riuscito a creare un pacchetto che funziona il 19.04.

Dal momento che non sono riuscito a trovare una build esistente del fork aggiornato, il metodo per farlo yubikey-luksfunzionare prevede il recupero del codice sorgente e la creazione locale del pacchetto DEB, quindi l'installazione.

Seguire i passaggi nella mia risposta precedente , tranne sostituire il passaggio 1 con il seguente:


1. Recupera il sorgente yubikey-luks, compila e installa il pacchetto

Installa dipendenze di build con:

sudo apt install dh-exec devscripts expect yubikey-personalization

Quindi scaricare ed estrarre l'archivio di origine:

mkdir ~/tmp
cd ~/tmp
wget -O yubikey-luks.zip https://github.com/thuandt/yubikey-luks/archive/master.zip
unzip yubikey-luks.zip
cd yubikey-luks-*

Costruisci il pacchetto con:

make builddeb NO_SIGN=1

Quindi installalo:

sudo dpkg -i DEBUILD/yubikey-luks_*.deb

Quindi continua a seguire il resto dei passaggi nella mia prima risposta.

Si spera che entro il 19.10 la versione di yubikey-luksnell'archivio principale di Ubuntu possa essere aggiornata in modo che non sia necessaria la costruzione manuale.

Come bonus, la versione più recente ha un file di configurazione, che può essere trovato su /etc/ykluks.cfg. Il messaggio mostrato all'avvio può essere configurato in questo file.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.