seozie-img

Riuscire ad ottenere una efficace protezione dei dati è una delle componenti essenziali di una politica di sicurezza, soprattutto se questi possono essere sensibili.

Considerando che i dati di un computer solitamente sono mantenuti su disco, un eventuale furto (o copia) dello stesso comporterebbe la possibilità di acquisirne tutti i contenuti.

Per prevenire questa situazione la soluzione utilizzata maggiormente è quella di cifrare il contenuto del disco, cosicchè non si riesca ad accedere ai suoi contenuti senza una opportuna autenticazione da parte di chi lo vorrebbe utlizzare.

Per cifrare i contenuti di un intero disco sui sistemi Linux, viene normalmente utilizzato LUKS, acronimo di “Linux Unified Key Setup“, che si propone come standard per la crittografia dei dischi, offrendo un formato di cifratura “on-disc”, avendo più di una coppia chiave-passphrase per l’accesso ai contenuti ed una gestione sicura di tutte le chiavi.

E’ possibile installare direttamente il sistema cifrando il disco, come avviene su varie distribuzioni (ad esempio Debian e derivate); in questo caso tutte le operazioni vengono gestite dal programma di installazione e non le tratteremo qui, prenderemo in esame invece come effettuare la stessa operazione nel caso in cui si aggiunga un disco esterno.

Tenendo in considerazione che cifrare il disco ha comunque un impatto sulle prestazioni, in genere la cifratura del disco non viene effettuata per i server, confidando sulla sicurezza dell’accesso fisico dei server stessi, che si presume non consenta l’acquisizione dei loro dischi da parte di terzi malintenzionati. Ma in questo caso, l’esigenza di cifrare il contenuto di un disco rimane, soprattutto quando si usano dischi di backup rimovibili (che in genere devono essere spostati in una diversa collocazione per la realizzazione di una procedura elementare di disaster recovery) cosi da proteggere i dati contenuti.

Si ha questa esigenza ogni volta che si vuole proteggere i dati che sono stati salvati su un supporto esterno o su un disco aggiunto in un secondo tempo. In questo caso bisogna eseguire manualmente le operazioni di gestione dei dischi cifrati, nelle modalità che esamineremo più avanti.

In conclusione, possiamo dire che un disco cifrato con LUKS, è accessibile anche dai sistemi Windows usando LibreCrypt, nma a condizione che lo si sia formattato con una filesystem compatibile (es. vfat), 

Come creare un disco cifrato

Se vogliamo utilizzare LUKS da Linux è necessaria avere una versione del programma cryptsetup che lo supporti, questa versione è ormai disponibile come pacchetto su tutte le distribuzioni. Si potrebbe comunque verificare la presenza del supporto con il comando cryptsetup --help controllando in coda la presenza delle opzioni relative a LUKS.

Se invece questo comando non fosse presente, su Debian lo si può installare semplicemente con:

apt-get install cryptsetup

Ora sarà possibile iniziare il lavoro di preparazione del dispositivo, nel nostro esempio assumeremo il caso una chiavetta USB rilevata dal sistema come /dev/sdd.

Il primo passo da compiere è verificare se il dispositivo sia affidabile e, allo stesso tempo, riempire tutto lo spazio disponibile con dati casuali, questo renderà molto più difficoltosi eventuali tentativi di attacco e compromissione del filesystem cifrato creato in seguito.

E’ importante tenere sempre a mente che a seconda della dimensione del disco, questo processo può richiedere molte ore, quindi se dovete lanciarlo su di un disco molto grande, vi conviene farlo di sera.

shred -n2 -v -x /dev/sdd

In caso vogliate ancora più sicurezza potete aggiungere l’opzione --random-source=/dev/urandom che usa il generatore di numeri casuali del sistema come sorgente di dati casuali. La casualità dei dati sarà migliore rispetto a quella vista con il metodo precedente, ma l’operazione farà un uso intensivo della CPU e richiederà ancora più tempo.

Dopo aver completato la sovrascrittura, il disco dovrà essere partizionato. In questo caso l’obiettivo è creare un’unica partizione che occupi tutto lo spazio disponibile e per farlo ci sono diverse alternative, sia grafiche come gparted e qtparted che da linea di comando come fdisk o cfdisk. Si assumerà di avere creato una sola partizione, riconosciuta dal sistema come /dev/sdd1.

Ora sarà possibile cifrare la partizione con LUKS e poi “agganciarla” al device mapper, cosicchè possa essere presentata in maniera “trasparente” al sistema.

E’ fondamentale la scelta di una passphrase abbastanza lunga e complessa in quanto l’utilizzo di una frase corta e/o facilmente indovinabile renderebbe inutile l’utilizzo della crittografia.

La prima cosa da fare è inizializzare il disco per la cifratura con LUKS; per questo si usa il comando:

# cryptsetup --verbose --verify-passphrase luksFormat /dev/sdd1

WARNING!
========
Questo sovrascriverà i dati in /dev/sdd1 in modo irreversibile.

Are you sure? (Type uppercase yes): YES
Inserire la passphrase: 
Verifica passphrase: 
Comando eseguito con successo.

sarà necessario confermare la formattazione del disco e poi inserire la passphrase, ripetendola due volte per verifica.

A questo punto si potrà attivare il disco cifrato con:

# cryptsetup luksOpen /dev/sdd1 cifrato
Inserire la passphrase per /dev/sdd1: 

dove si dovrà inserire la passphrase fornita con il comando precedente, per poter accedere in chiaro ai dati del disco.

Se tutto è stato fatto correttamente, l’output del comando ls /dev/mapper/ dovrebbe indicare anche la parola cifrato fra i file presenti, confermando così l’avvenuto “aggancio” della partizione criptata al device mapper, il quale fornirà su /dev/mapper/cifrato il dispositivo su cui operare in chiaro.

Bene, giunti a questo punto, si potrà creare un filesystem sulla partizione criptata con:

mkfs.ext4 /dev/mapper/cifrato

e sarà possibile montarlo con:

mount /dev/mapper/cifrato /mnt

Per finire, i comandi per smontare il filesystem e disabilitare l’accesso alla partizione criptata sono:

umount /mnt
cryptsetup luksClose /dev/mapper/cifrato

dove il secondo comando distacca il disco dal device mapper, rendendo impossibile l’accesso ai dati del disco (si potrà verificare che /dev/mapper/cifrato non è più disponibile).

E’ importante sapere che una volta formattato un disco utilizzando luksFormat, questo potrà essere identificato, oltre che con il nome di dispositivo classico, anche attraverso l’UUID ad esso associato rendendo il riconoscimento dello stesso indipendente dall’eventuale presenza di altri dischi e dall’ordine con cui il kernel assegna i vari nomi /dev/sdX.
In particolare nel nostro caso potremo individuare eventuali dischi cifrati con:

# blkid -t TYPE="crypto_LUKS" 
/dev/sdd1: UUID="695fb63b-bb47-45d5-9561-15f6664c0296" TYPE="crypto_LUKS" PARTUUID="05548b2f-01" 

ed in tutti i comandi riguardanti LUKS si potrà usare, al posto dell’indicazione del dispositivo specifico (nel caso /dev/sdd1) l’indicazione dell’UUID (nella forma UUID=695fb63b-bb47-45d5-9561-15f6664c0296).

Come utilizzare i dischi cifrati

Hal, d-bus e gnome-volume-manager (o l’equivalente per altri desktop) sono usate per la gestione dei volumi disponibili nel sistema. Quando viene collegata al sistema una chiavetta USB (o altro disco rimovibile) che contiene la partizione crittografata con LUKS, questa viene riconosciuta e compare una finestra che chiede di inserire la passphrase. Nel momento in cui la passphrase inserita è corretta, la partizione viene montata e sarà possibile utilizzarla normalmente da tutte le applicazioni.

Se invece si volesse cifrare un disco di sistema (ad esempio un disco per i backup) da montare all’avvio, si dovrà ricorrere all’uso del file /etc/crypttab contenente l’elenco dei dischi cifrati che devono essere sbloccati, così da poterli poi utilizzare normalmente dentro /etc/fstab.

E’ importante considerare che in questo caso, la passphrase sarà chiesta all’avvio e che, qualora non fosse fornita, l’avvio si bloccherà sulla richiesta di montaggio del dispositivo.

Il formato di /etc/crypttab prevede quattro campi separati da spazi. Il primo campo indica il nome che si darà al dispositivo cifrato sotto /dev/mapper (nel caso dell’esempio precedente, cifrato), il secondo campo indica il dispositivo fisico e si può indicare con il nome dello stesso (nel nostro esempio /dev/sdd1), o con l’UUID come detto in precedenza. Oltre che con blkid l’UUID si può ottenere anche con il comando:

# cryptsetup luksUUID /dev/sdd1 
695fb63b-bb47-45d5-9561-15f6664c0296

Il terzo campo indica le modalità con le quali si sblocca il dispositivo ed il default di none indica la necessità di fornire la passphrase sulla console.

Si può in ogni caso indicare un nome di un file (ad esempio da fornire su un dispositivo esterno) da cui questo verrà letto (in tal caso viene usato tutto il file e la passphrase in esso contenuta non deve terminare con un comando “a capo”). L’ultimo campo, nel nostro caso dovrà essere luks,che indica le opzioni con cui viene creato il dispositivo cifrato.

Pertanto con un contenuto di /etc/crypttab del tipo:

# <target name>    <source device>        <key file>    <options>
cifrato        UUID=695fb63b-bb47-45d5-9561-15f6664c0296    none    luks

potremo montare il disco cifrato sotto /cifrato inserendo in /etc/fstab la riga:

/dev/mapper/cifrato   /cifrato      ext4    defaults        0       2

Se invece si dovesse avere la necessità di montare e smontare il disco in uno script (ad esempio in uno script per la gestione dei backup su un disco rimovibile) allora si porrà il problema di come inserire la passphrase, che normalmente il comando richiede sia fornita su un terminale. In questo caso sarà possibile fargliela leggere da un file separato, ma è in genere preferibile inserire tutte le informazioni direttamente all’interno dello script, utilizzando una attivazione del disco cifrato nella forma:

echo -n passphraselungaecomplicata|cryptsetup luksOpen /dev/sdd1 cifrato --key-file=-

(dove il -n è importante, perché l’a capo inserito da echo nella invocazione normale verrebbe letto come carattere della passphrase).

Chiaramente in questo caso solo chi ha accesso amministrativo alla macchina, potrà leggere la password, ma la protezione è pensata per proteggere il disco quando viene rimosso e spostato altrove.

Come gestire le passphrase

Tra tutte le funzionalità di LUKS, la più interessante è quella che il sistema consente l’uso di più passphrase (fino ad un massimo di 8) che possono essere aggiunte o rimosse (posto che almeno una resti presente per poter accedere al dispositivo). Il caso più comune è quello in cui si vuole aggiungere una nuova passphrase o cambiare quella esistente (che si realizza comunque per con una aggiunta seguita da una rimozione).

Il comando che consente di aggiungere una passphrase è il seguente:

cryptsetup luksAddKey /dev/sdd1

verrà chiesta una qualunque delle passphrase presenti per sbloccare l’accesso (all’inizio ce ne è una sola, quella impostata in fase di creazione, cui viene sempre assegnato l’indice 0) e poi l’immissione due volte della nuova passphrase.

La passphrase sarà inserita nel primo degli slot disponibili (nel caso dell’esempio, se aggiunta dopo la creazione, questo sarà quello con indice 1) e potrà essere utilizzata in maniera equivalente a tutte le altre.

Se l’obiettivo non era quello di aggiungere una nuova passhprase, ma solo di cambiarne una esistente, in questo caso si potrà passare alla rimozione di quella non voluta, cancellando il relativo slot.

Per individuare lo slot si può usare il comando cryptsetup luksDump, ottenendo un risultato del tipo:

cryptsetup luksDump /dev/sdd1
LUKS header information for /dev/sdd1

...

Key Slot 0: ENABLED
        Iterations:             182965
        Salt:                   50 6d 67 70 63 33 19 c6 41 e7 c1 55 b6 02 49 89 
                                54 79 7b 56 4e b6 78 92 c8 f8 66 e8 bb e6 a8 f1 
        Key material offset:    8
        AF stripes:             4000
Key Slot 1: ENABLED
        Iterations:             144406
        Salt:                   56 35 b1 33 8d c9 0e b8 ba 10 a0 1c 4f 16 2b 8c 
                                d3 ec fe c8 5f 7f 23 74 79 ab 5d 96 ec 4c 4c 4a 
        Key material offset:    264
        AF stripes:             4000
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED

e poi la rimozione della passhprase indesiderata (nello specifico quella dello slot 0) sarà effettuata con:

cryptsetup luksKillSlot /dev/sdd1 0

Con questo tutorial dettagliato speriamo di essere riusciti a spiegarvi correttamente come procedere con l’operazione suddetta. In ogni caso per qualsiasi ulteriore approfondimento o consulenza potete visitare il nostro sito web o compilare il form nella sezione contatti, in caso di richieste specifiche.

                                                                                   La redazione

Share

    0
      0
      Il tuo Carrello
      Il tuo Carrello è vuotoReturn to Shop