Unlock LUKS via SSH
È possibile ottenere Unlock LUKS via SSH in modo facile ?
La risposta è si, vediamo come possiamo ottenerlo con pochi e semplici passaggi.
Il metodo più efficace per cifrare un disco Linux è l’utilizzo di LUKS il cui acronimo sta per: Linux Unified Key Setup.
Una volta cifrato il disco, per poter essere letto, deve essere sbloccato, per sbloccarlo serve la passphrase.
Ma cosa succede se ad essere cifrato è l’intero disco del sistema operativo ?
Quando il sistema parte, come prima cosa carica il kernel, questo deve trovarsi su una partizione leggibile, dunque non non cifrata.
Il kernel non contiene dati sensibili, dunque anche se su una partizione in chiaro, non può essere utilizzato per chissà quali scopi, a meno di non essere esposti ad un attacco della cameriera malvagia, come descritto in questo mio precedente articolo.
Dunque, un server chiuso in una camera blindata, con una sorveglianza armata, a 10000 metri di profondità, nel abisso Challenger della fossa delle Marianne, dovrebbe essere abbastanza protetto da questo genere di attacchi, tuttavia per sbloccare il disco in caso di riavvio o di boot, diventa poco pratico e noleggiare un sommergibile mi sembra costoso.
Unlock LUKS via SSH
SSH ci viene nuovamente in aiuto, vediamo come ottenere un Unlock LUKS via SSH.
Forgiatura delle chiavi.
Come prima cosa, forgiamo una chiave specifica necessaria allo Sblocco del disco LUKS via SSH, in questo mio precedente articolo spiego come fare.
La chiave la generiamo sul client, quindi sul computer che useremo per collegarci al server da sbloccare, nel mio esempio la chiave si chiama Unlock_Luks.
Sempre sul client, nella directory ~/.ssh/ creiamo il file config con il seguente contenuto:
# vi ~/.ssh/config
#: Descrizione_SERVER0
Host NOMEHOST
Hostname INDIRIZZO_IP_DEL_SERVER
User root
Port PORTA_SSH_DIVERSA_DA_22
IdentityFile ~/.ssh/Unlock_Luks
HostKeyAlgorithms ssh-rsa
#: Descrizione_SERVER1
Host NOMEHOST
Hostname INDIRIZZO_IP_DEL_SERVER
User root
Port PORTA_SSH_DIVERSA_DA_22
IdentityFile ~/.ssh/Unlock_Luks
HostKeyAlgorithms ssh-rsa
…. etc etc …
quindi, salviamo e usciamo, il classico ESC : wq
Giunti fin qui abbiamo sistemato il client. Passiamo al server
Server
Do per scontato che il disco sia già cifrato ed il sistema operativo già montato e correttamente funzionante.
Dobbiamo soltanto rendere operativo il sistema di Unlock LUKS via SSH oppure Sblocco disco LUKS via SSH, come vi aggrada di più, la parola non cambia il concetto. 🙂
Dunque installiamo dropbear con i comandi
# apt update && apt full-upgrade -y && apt -y install dropbear-initramfs && apt autoremove -y
Con questa mossa, in un solo colpo colpo abbiamo aggiornato i database, aggiornato il sistema operativo, installato dropbear e rimosso software non più necessario.
Passiamo dunque alla configurazione del daemone che ci permetterà Unlock LUKS via SSH.
Come prima cosa copiamo la chiave pubblica sul server, dopo aver installato dropbear.
# scp .ssh/Unlock_Luks.pub root@IPDELSERVER:/etc/dropbear-initramfs/authorized_keys
ATTENZIONE !!!
Per ragioni di sicurezza, la chiave ssh DEVE essere differente dalla chiave di autenticazione al sistema operativo, alla fine spiego il motivo.
Adesso passiamo alla configurazione del daemone dropbear
# echo ‘DROPBEAR_OPTIONS=”-RFEsjk -p57000 -c /bin/cryptroot-unlock”‘ >/etc/dropbear-initramfs/config
-p 57000 sta ad indicare la porta sulla quale deve ascoltare “la porzione di ssh” destinato allo Sblocco del disco LUKS via SSH.
Il daemone SSH è lo stesso, sia prima dello sblocco che dopo lo sblocco, ma la configurazione è completamente differente fra il prima e il dopo il boot, per questo motivo lo chiamo impropriamente PORZIONE.
Andiamo a definire la scheda di rete e l’indirizzo ip
echo “IP=INDIRIZZO_IP:GATEWAY:NETMASK::NOME_DELLA_SCHEDA_DI_RETE” >/etc/initramfs-tools/conf.d/ip
Io ho configurato così:
#echo “IP=192.168.13.144:192.168.13.254:255.255.255.0::eth0” >/etc/initramfs-tools/conf.d/ip
Generazione del bootloader
# update-initramfs -k all -u
al termine reboot
Unlock LUKS via SSH
Dal client abilitato all’ottenimento del Unlock LUKS via SSH dobbiamo scrivere:
ssh NOMEHOST
il NOMEHOST lo abbiamo definito nel file ~/.ssh/config
Questo è tutto, gente …
Pochi passaggi, pochissime configurazioni …… ed abbiamo ottenuto l’ Unlock LUKS via SSH o Sblocco del disco LUKS via SSH.
PS Questa guida è stata ottenuta partendo da quest’altra guida che NON FUNZIONA , a causa di errori che ho trovato riportati in tantissime altre guide, chissà chi sarà stato il primo a scrivere minchiate ?
https://www.dwarmstrong.org/remote-unlock-dropbear/
Il resto l’ho ottenuto leggendo il man (mal documentato), facendo prove da pazzo, e cercando di capire il codice sorgente, anch’esso documentato poco.
La distribuzione usata è la devuan chimaera, scaricabile da https://www.devuan.org/get-devuan
Configurazione in DHCP
Anche in questo caso, le guide trovate sono tutte fatte male.
Per configurare il sistema affinché riceva l’ IP dal server DHCP, è sufficiente configurare il parametro come segue:
# echo “IP=:::::eth0:dhcp” >/etc/initramfs-tools/conf.d/ip
e poi l’immancabile
# update-initramfs -k all -u
per rigenerare il boot-loader
Consiglio
Sarebbe cosa buona e giusta assegnare l’ indirizzo ip con DHCP in modo statico, diversamente sarà molto facile ottenere un indirizzo IP differente fra il prima e il dopo il boot.
Cose che non mi piacciono ma bisogna farsene una ragione
Prima dello sblocco, a video compaiono i dati ottenuti dal server DHCP, non ho trovato nessun modo per poter mascherare questo dato. Personalmente avrei preferito ci fosse un flag per mostrare/nascondere il dato. Fino ad ora io non l’ho trovato, se lo trovo, aggiorno l’articolo.
Nella partizione di boot, quella in chiaro, è presente la chiave pubblica e tutta la configurazione del daemone. Questo è inevitabile, perché come detto prima un malintenzionato potrebbe modificare il kernel e la sua configurazione, dunque invito alla massima prudenza.
Sarebbe una disdetta, possedere un disco cifrato e farsi fregare da qualcuno che ha modificato il server SSH o il kernel, facendogli scrivere la passphrase su un file nella partizione in chiaro, destinata al boot.
Non oso immaginare la reazione che potrei avere …
Unlock LUKS via SSH
Un bel progettino potrebbe anche essere quello di far scaricare un boot tramite rete, un boot che poi viene destituito una volta effettuato lo start del sistema operativo….
Unlock LUKS via SSH
Aggiornamento della sera:
Mi sono reso conto che la cosa funziona SOLO se è presente un solo disco, se sono presenti più dischi, il sistema fallisce miseramente.
Dunque io ho risolto in una maniera poco ortodossa ma funzionante.
Partendo dal presupposto che se il disco di root non è aperto, non è possibile accedervi, mi è bastato costruire una chiave random in questo modo:
# dd if=/dev/urandom of=chiave.key bs=1024 count=6
aggiungerla al secondo disco cifrato, con il comando
# cryptsetup luksAddKey /dev/SDX chiave.key
e andare a modificare il file /etc/crypttab inserendo il percorso della chiave al posto del none
un onesto riavvio e il nostro Unlock LUKS via SSH funziona perfettamente.
Se si possiedono più dischi si può utilizzare la stessa chiave per tutti i dischi aggiuntivi.
Dunque, per riepilogare, SSH permette l’apertura SOLO del primo disco, questo contiene la chiave per aprire automaticamente tutti gli altri.