Progetto

Generale

Profilo

EncryptedFilesystemUsingLUKS » Cronologia » Versione 15

Christian Surchi, 06-03-2017 19:06

1 8 Amministratore Truelite
h1. Come creare un filesystem cifrato usando LUKS
2 1 Amministratore Truelite
3 14 Christian Surchi
"LUKS":https://gitlab.com/cryptsetup/cryptsetup è un acronimo di "Linux Unified Key Setup" e si propone come lo standard per la crittografia dei dischi in sistemi linux (e non solo), offrendo un formato standard "on-disc", la possibilità di avere più di una coppia chiave-passphrase per l'accesso ed una gestione sicura di tutte le chiavi.
4 1 Amministratore Truelite
5 13 Simone Piccardi
h2. Creazione di un disco cifrato
6 1 Amministratore Truelite
7 15 Christian Surchi
Un disco criptato con LUKS, nel caso lo si sia formattato con una filesystem compatibile (es. vfat) è accessibile anche dai sistemi Windows, usando "LibreCrypt":https://github.com/t-d-k/librecrypt. Per utilizzarlo è necessaria una versione del programma @cryptsetup@ (usato anche per la cifratura diretta con ''dm-crypt'') che lo supporti, ma questa è ormai disponibile su tutte le distribuzioni recenti. Se ne può comunque verificare la presenza con il comando @cryptsetup --help@ controllando in coda la presenza delle opzioni relative a LUKS. Nel caso in cui il comando non fosse presente, su Debian lo si può installare semplicemente con:
8 9 Simone Piccardi
9 1 Amministratore Truelite
<pre>
10 10 Simone Piccardi
apt-get install cryptsetup
11 9 Simone Piccardi
</pre>
12 8 Amministratore Truelite
13 12 Simone Piccardi
A questo punto è possibile iniziare il lavoro di preparazione del dispositivo, nel nostro esempio prenderemo il caso una chiavetta USB rilevata dal sistema come @/dev/sdc@.
14 1 Amministratore Truelite
15 12 Simone Piccardi
La prima cosa da fare è verificare l'affidabilità del dispositivo ed, al tempo stesso, riempire tutto lo spazio disponibile con dei dati casuali rendendo di fatto molto più difficoltosi eventuali tentativi di attacco e compromissione del filesystem cifrato che verrà creato in seguito. Prima di iniziare, va tenuto presente il fatto 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 prima di andare a dormire.
16 1 Amministratore Truelite
17
<pre>
18 12 Simone Piccardi
badblocks -c 10240 -s -w -t random -v /dev/sdc
19 2 Amministratore Truelite
</pre>
20 1 Amministratore Truelite
21 10 Simone Piccardi
Se siete particolarmente paranoici potete utilizzare @/dev/urandom@ come sorgente di dati casuali e riempirci il disco. La casualità dei dati sarà migliore rispetto a quella del metodo precedente, ma l'operazione farà un uso intensivo della CPU e richiederà ancora più tempo. Il comando da eseguire è: 
22 1 Amministratore Truelite
23 9 Simone Piccardi
Il comando da eseguire è:
24 1 Amministratore Truelite
<pre>
25 12 Simone Piccardi
dd if=/dev/urandom of=/dev/sdc
26 9 Simone Piccardi
</pre>
27 8 Amministratore Truelite
28 12 Simone Piccardi
Successivamente va partizionato il disco. In questo caso l'obiettivo è di creare un'unica partizione che occupi tutto lo spazio disponibile e per farlo ci sono diverse alternative, sia da linea di comando come @fdisk@ o @cfdisk@ che grafiche come @gparted@ e @qtparted@. Si supponga comunque di aver creata una sola partizione, riconosciuta dal sistema come @/dev/sdc1@. 
29 1 Amministratore Truelite
30 10 Simone Piccardi
A questo punto è possibile cifrare la partizione con LUKS e poi "agganciarla" al _device-mapper_, in modo che ''dm-crypt'' possa presentarla in maniera "trasparente" al sistema. E' molto importante la scelta di una passphrase abbastanza lunga e complessa poiché l'utilizzo di una frase corta e/o facilmente indovinabile vanificherebbe l'utilizzo della crittografia.
31 9 Simone Piccardi
32 1 Amministratore Truelite
I comandi da eseguire sono quindi:
33 8 Amministratore Truelite
34 12 Simone Piccardi
<pre>
35 1 Amministratore Truelite
cryptsetup --verbose --verify-passphrase luksFormat /dev/sdc1
36 13 Simone Piccardi
cryptsetup luksOpen /dev/sdc1 cifrato
37 1 Amministratore Truelite
</pre>
38
39 13 Simone Piccardi
Se tutto è andato a buon fine, l'output del comando @ls /dev/mapper/@ dovrebbe restituire anche @cifrato@ fra i file presenti, confermando l'avvenuto "aggancio" della partizione criptata al device mapper, che fornirà su @/dev/mapper/cifrato@ il dispositivo su cui operare in chiaro. A questo punto si potrà creare un filesystem sulla partizione criptata con:
40 4 Amministratore Truelite
41 1 Amministratore Truelite
<pre>
42 13 Simone Piccardi
mkfs.ext4 /dev/mapper/cifrato
43 1 Amministratore Truelite
</pre>
44
45 13 Simone Piccardi
e sarà possibile montarlo con:
46 1 Amministratore Truelite
47 12 Simone Piccardi
<pre>
48 13 Simone Piccardi
mount /dev/mapper/cifrato /mnt
49 1 Amministratore Truelite
</pre>
50
51 13 Simone Piccardi
mentre i comandi per smontare filesystem e disabilitare l'accesso alla partizione criptata sono:
52 1 Amministratore Truelite
53
<pre>
54 13 Simone Piccardi
umount /mnt
55
cryptsetup luksClose /dev/mapper/cifrato
56 1 Amministratore Truelite
</pre>
57
58 13 Simone Piccardi
h2. Utilizzo dei dischi cifrati
59
60
Le distribuzioni sufficientemente moderne usano ??hal??, ??d-bus?? e ??gnome-volume-manager?? (o l'equivalente per KDE) per la gestione dei volumi disponibili nel sistema: quando viene collegata al sistema una chiavetta USB contenente la partizione crittografata con LUKS, questa viene riconosciuta e compare una finestra che chiede di inserire la passphrase. Se la passphrase inserita è corretta, la partizione viene montata e sarà possibile utilizzarla normalmente da tutte le applicazioni.
61
62
Qualora invece si intenda cifrare un disco di sistema (ad esempio un disco per i backup) da montare all'avvio, si deve ricorrere all'uso del file @/etc/crypttab@ che contiene l'elenco dei dischi cifrati che devono essere sbloccati, in modo tale da poterli poi usare normalmente dentro @/etc/fstab@. Si tenga conto che in questo caso di norma la passphrase sarà chiesta all'avvio, che si bloccherà alla richiesta di montaggio del dispositivo se questa non viene fornita. 
63
64
Il formato del file prevede quattro campi, separati da spazi, il primo indica il nome che si darà al device cifrato sotto @/dev/mapper@ (nel caso sarebbe @cifrato@), il secondo indica il dispositivo fisico e si può indicare con il nome dello stesso (nel nostro esempio @/dev/sdc1@), o con l'UUID dello stesso, che si potrà ottenere con il comando:
65
66 1 Amministratore Truelite
<pre>
67 13 Simone Piccardi
# cryptsetup luksUUID /dev/sdc1 
68
d8233765-348d-47e5-b789-d736a89a1410
69 1 Amministratore Truelite
</pre>
70
71 13 Simone Piccardi
il terzo campo indica le modalità con cui si sblocca il dispositivo, ed il default di @none@ indica la necessità di fornire la passphrase sulla console, si può comunque anche 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 a capo). L'ultimo campo, che indica le opzioni con cui viene creato i device cifrato, nel nostro caso dovrà essere @luks@.
72
73
Pertanto con un contenuto di @/etc/crypttab@ del tipo:
74
75
<pre>
76
# <target name>	<source device>		<key file>	<options>
77
cifrato		UUID=d8233765-348d-47e5-b789-d736a89a1410	none	luks
78
</pre>
79
80
potremo montare il disco cifrato sotto @/cifrato@ inserendo in @/etc/fstab@ la riga:
81
82
<pre>
83
/dev/mapper/cifrato   /cifrato      ext4    defaults        0       2
84
</pre>
85
86
87
h2. Gestione delle passphrase
88 10 Simone Piccardi
89
Una delle funzionalità più interessanti di LUKS, che lo rende preferibile rispetto all'uso diretto di ''dm-crypt'' come illustrato in [[UsbKeyInstallation]] è che il sistema consente l'uso di più password (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 password o cambiare quella esistente, che si realizza  comunque per con una aggiunta seguita da una rimozione.
90
91
Il comando che consente di aggiungere una passphrase è il seguente:
92 12 Simone Piccardi
93 10 Simone Piccardi
<pre>
94
cryptsetup luksAddKey /dev/sdc1
95
</pre>
96
97
verrà chiesta una delle passphrase presenti (all'inizio ce ne è una sola, quella impostata in fase di creazione, cui viene sempre assegnato l'indice 0) per sbloccare l'accesso e poi l'immissione due volte della nuova passwphrase. 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 quelle presenti. Se lo scopo non era quello di aggiungere una passhprase, ma quello di cambiare la precedente, si potrà a questo punto passare alla rimozione di quella non voluta, cancellando il relativo slot.
98
99 12 Simone Piccardi
Per individuare lo slot si può usare il comando @cryptsetup luksDump@, ottenendo un risultato del tipo:
100
<pre>
101 10 Simone Piccardi
cryptsetup luksDump /dev/sdc1
102
LUKS header information for /dev/sdc1
103
104
...
105
106
Key Slot 0: ENABLED
107
        Iterations:             182965
108 1 Amministratore Truelite
        Salt:                   50 6d 67 70 63 33 19 c6 41 e7 c1 55 b6 02 49 89 
109 10 Simone Piccardi
                                54 79 7b 56 4e b6 78 92 c8 f8 66 e8 bb e6 a8 f1 
110
        Key material offset:    8
111
        AF stripes:             4000
112
Key Slot 1: ENABLED
113
        Iterations:             144406
114
        Salt:                   56 35 b1 33 8d c9 0e b8 ba 10 a0 1c 4f 16 2b 8c 
115
                                d3 ec fe c8 5f 7f 23 74 79 ab 5d 96 ec 4c 4c 4a 
116
        Key material offset:    264
117
        AF stripes:             4000
118
Key Slot 2: DISABLED
119
Key Slot 3: DISABLED
120
Key Slot 4: DISABLED
121
Key Slot 5: DISABLED
122
Key Slot 6: DISABLED
123
Key Slot 7: DISABLED
124 11 Simone Piccardi
</pre>
125 10 Simone Piccardi
126 12 Simone Piccardi
e a questo punto la rimozione della passhprase indesiderata (nello specifico quella dello slot 0) sarà effettuata con:
127 10 Simone Piccardi
<pre>
128 1 Amministratore Truelite
cryptsetup luksKillSlot /dev/sdc1 0
129
</pre>