Rinforzare la cifratura
È possibile rinforzare la cifratura di luks? la risposta è si, premesso che la cifratura Luks è attualmente inviolata, vediamo quali possono essere i punti deboli e come renderla ancora più sicura.
Il primo punto debole potrebbe essere la possibilità di analizzare il disco per capire dove iniziano i dati e dove potrebbero finire, questo è sicuramente facilitato se si usa LVM, anche se cifrato da Luks.
Altro punto debole potrebbe essere avere delle partizioni, anche se cifrate, i dati inziano sicuramente all’inizio della partizione e finiscono quando non ci sono più dati. Allora come procedere ?
Per prima cosa non facciamo partizioni ne LVM, il disco rimane così com’è
supponiamo di avere il disco /dev/sda.
Cominciamo con sovrascrivere tutto riempiendolo di dati casuali, quindi
# shred -n1 -v /dev/sda
Non serve incasinarlo troppo, è sufficiente riempirlo di dati pseudo casuali, però dev’essere pieno zeppo, nessun dato libero, al termine lo formattiamo Luks
# cryptsetup -h sha256 -c aes-cbc-essiv:sha256 -s 256 luksFormat /dev/sda
Questo metodo non permette l’alloggiamento del sistema operativo, se s’intende inserire il sistema operativo, fare riferimento a questo mio precedente articolo.
Vado veloce e salto passaggi e spiegazioni perchè ho ampiamente trattato la cifratura Luks in precedenti articoli.
In questo articolo vedremo soltano come rinforzare la cifratura Luks, già forte per conto suo.
Terminata la formattazione, apriamo il volume
# cryptsetup -h sha256 -c aes-cbc-essiv:sha256 -s 256 luksOpen /dev/sda Disk
Questo mapperà /dev/sda in /dev/mapper/Disk
Formattiamo la mappatura con il FS che preferiamo, tenendo ben presente l’utilizzo che dovremo farne e montiamolo su una directory di comodo, come sempre io preferisco la /work.
In questo caso creo una directory di comodo sotto /work
# mkdir -p /work/DISK
# mount -t FILESYSTEM /dev/mapper/Disk /work/DISK
METODO 1 per rinforzare la cifratura
All’interno della directory /dev/work/DISK creo un numero di file pari al numero di partizioni che voglio creare, della grandezza desiderata, supponiamo di voler avere 2 filesystem separati, uno di 100Gb e uno di 400GB, il nostro disco è di 1 Tb, quindi avanzeranno più di 500 Gb liberi.
# truncate -s 100Gb primofile.img
# truncate -s 400Gb secondofile.img
Riempiamo i due file di dati pseudo casuali, il riempimento di questi creerà immancabilmente dei dati allocati cifrati con la chiave sulla posizione /dev/sda (Cifriamo dati casuali)
# shred -n 1 -v *.img
Al termine creiamo un terzo file di grandezza NETTAMENTE superiore alla capacità del nostro disco, abbiamo detto di possedere un disco da 1Tb, creiamo un file vuoto da 10Tb
# truncate -s 10Tb falsofile.img
e riempiamo anche questo di dati preudo casuali
# shred -n 1 -v falsofile.img
Ad un certo punto avremo un errore, non si possono contenere 10Tb in un disco da 1Tb, ma questo è abbastanza logico.
La cifratura Luck è molto forte, questo lo abbiamo già detto, ammesso che in un qualche modo in futuro si riuscisse a capire almeno la grandezza dei files contenuti nel disco, il risultato sarebbe degno di Jasper Maskelyne, si vedrebbero solo 3 files di cui uno impossibile.
Metodo alternativo per rinforzare la cifratura Luks
Creiamo prima alcuni files di grandezze differenti, li riempiamo di dati pseudo casuali, poi creiamo i file che dovranno ospitare il nostro filesystem, della grandezza che ci interessa e alla fine altri file di grandezza variabile, la cosa importante è che il disco sia sempre riempito al massimo della propria capacità e che alla luce di un possibile attacco, il contenuto sia maggiore della capacità stessa del disco.
Uno scriptino interessante sarebbe quello di sovrascrivere in maniera random i file fantoccio con dati pseudo casuali, questo aiuta a rinforzare la cifratura in caso di analisi comparativa, chiaramente il sistema si rallenta vistosamente durante la scrittura dei files fantoccio.
Questo semplice script genera i files fantoccio.
#/bin/bash
SEQ=$((RANDOM%100+20))
FANT=.fantoccio
DEST=/work/Disk
BIG=$((RANDOM%10000+4000))
echo “Inizio rimozione vecchi file fantoccio”
rm -rf $DEST/*$FANT
for i in `seq 1 $SEQ`;
do
LEN=$((RANDOM%49+3))
M=$((RANDOM%100+20))
truncate -s $M”M” $DEST/`< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-$LEN};echo $FANT;`
done
echo “Riempimento file fantoccio”
shred -n1 -v $DEST/*$FANT
echo “Generazione file mastodontico di capacità pari a “$BIG”T”
NAMEBIG=`< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-$LEN};echo $FANT;`
echo “Generazione file mastodontico di capacità pari a “$BIG”T di nome “$NAMEBIG
truncate -s $BIG”T” $DEST/$NAMEBIG
shred -n1 -v $DEST/$NAMEBIG
Mappare i dischi per rinforzare la cifratura Luks
Fatto questo, mappiamo in loop i due files che ci interessano.
Prima cosa decidiamo quali loop usare, io preferisco il 101 e il 103, sono abbastanza distanti dalla loop0 e non ho mai generato 100 loop in vita mia, quindi:
# losetup loop 101 /work/DISK/primofile.img
# losetup loop 103 /work/DISK/secondofile.img
Fatto ciò formattiamo i loop con il nostro/i filesystem preferito/i e montiamoli nella posizione che preferiamo.
Per smontare i dischi :
# LOOP=/dev/loop101 && umount $LOOP && losetup -d $LOOP
# LOOP=/dev/loop103 && umount $LOOP && losetup -d $LOOP
Ingrandire un filesystem
Per ingrandire un Filesystem è semplice, rimpicciolirlo un pò meno e soprattutto fortemente sconsigliato, con alcuni FS non è possibile ottenere un ridimensionamento verso il basso.
Vediamo come ingrandire il FS ext4
Per prima cosa smontiamo la loop dalla sua posizione e stacchiamola dal file, supponiamo essere la loop 101.
# umount /dev/loop101
# losetup -d /dev/loop101
Creiamo un file di grandezza pari all’incremento di dimensione che vogliamo ottenere, quindi se il nostro primofile.img è di 100G e ci occorrono 150G dobbiamo incrementarlo di 50G. Procediamo
# truncate -s 50G ADD
poi copiamo il contenuto vuoto del file ADD accodandolo al file da incrementare:
# cat ADD >>primofile.img
al termine il file sarà passato da 100G che era a 150G, possiamo rimuovere il file ADD
# rm ADD
adesso dobbiamo informare il filesystem che il suo contenitore è più grande di prima, per fare questo colleghiamo il file alla loop
# losetup loop101 primofile.img
facciamo un check del filesystem e lo ingrandiamo
# e2fsck -f /dev/loop101
# resize2fs /dev/loop101
montiamo la loop nella sua posizione e godiamoci il nostro filesystem più grande di prima.
Siamo qui per rinforzare la cifratura Luks, quindi per essere certi di non lasciare spazi vuoti, creiamo un file dell’intera capacità del disco all’interno della posizione montata, file che cancelleremo subito dopo averlo creato.
# mount -t ext4 /dev/loop101 /mnt
# dd if=/dev/urandom of=/mnt/riempidisco
# rm /mnt/riempidisco
# umount /dev/loop101
Ridimensionare verso il basso il filesystem
Vero è che la nostra intenzione è rinforzare la cifratura Luks ma è altrettanto vero che rimpicciolire un filesystem è pericolosissimo, pertanto a meno che non sia strettamente necessario, sconsiglio vivamente questa pratica.
Vediamo come rimpicciolire il filesystem ext4, nello specifico toglieremo 50Gb agli attuali 150Gb, quindi otterremo alla fine un FS da 100Gb con un contenitore di pari dimensioni.
Come prima cosa smontiamo la loop dalla propria posizione
# umount /dev/loop101
eseguiamo un check
# e2fsck -f /dev/loop101
quindi rimpiccioliamo il FS ad una dimensione leggermente inferiore ai 100Gb, 98 Gb
# resize2fs /dev/loop101 98Gb
rieseguiamo un check
# e2fsck -f /dev/loop101
disconnettiamo la loop 101
# losetup -d /dev/loop101
rimpiccioliamo il file
# truncate -s 100G primofile.img
ricolleghiamo la loop
# losetup loop101 primofile.img
Rieseguiamo un check
# e2fsck -f /dev/loop101
informiamo il FS che deve occupare l’intera dimensione del contenitore
# resize2fs /dev/loop101
rimontiamo la loop nella sua posizione e godiamoci il FS più piccolo.
Questi, i miei consigli per rinforzare la cifratura Luks.
Anche se può servire a poco rinforzare la cifratura di un qualcosa di attualmente inviolato, prevenire è meglio che curare.
Più di qualcuno mi ha detto che non serve rinforzare la cifratura di un Luks, ma io in questo modo dormo sonni più tranquilli. Pertanto preferisco rinforzare la cifratura. In realtà io non sto rinforzando la cifratura, sto complicando un possibile attacco al Luks. Faccio questa precisazione prima che qualcuno mi dica: la cifratura non è luks, la cifratura è aes-cbc-essiv, quindi ok, l’algoritmo di cifratura è aes-cbc-essiv, il programma che adopero è Luks. Questo articolo tratta come complicare l’esistenza ad un possibile attacco di crittanalisi del nostro disco. Per semplicità ho parlato di rinforzare la cifratura Luks.