12
contributi
Nessun oggetto della modifica |
Nessun oggetto della modifica |
||
Riga 1: | Riga 1: | ||
Un accesso indesiderato ai nostri dati si tende a pensare che possa avvenire da un'intrusione da rete. Certamente questo � lo scenario tipico, ma non bisognerebbe scordare che il pi� delle volte per accedere a un dato contenuto su un certo supporto, basta avere accesso "fisico" al supporto stesso. | |||
Questo � molto pi� importante oggi giorno di quanto non fosse fino a pochi anni fa a causa della diffusione di sistemi di memorizzazione di massa portabili, estremamente comodi e che ci stiamo abituando ad avere sempre con noi, nello zaino, in una tasca o marsupio. | |||
Altro scenario interessante � quello nel quale i dati in questione sono contenuti in un computer acceso e connesso alla rete, ma sono dati che ci interessa avere a disposizione esclusiva del nostro utente, e quindi se un'intrusione ci deve proprio essere � utile rendere all'intruso la vita molto dura nell'ottenimento di quei dati sensibili. | |||
In questa guida sono contenuti i passi necessari per cifrare una partizione o una periferica (rimovibile o meno) o creare un file che useremo come loop device cifrata (con il vantaggio di essere estremamente trasportabile e archiviabile). Questo sar� mostrato nello scenario pi� semplice, quello con accesso ai file da parte di un singolo utente. La tecnologia usata per� � quella nota col nome di [http://luks.endorphin.org/ LUKS] (Linux Unified Keys Setup) che consente l'utilizzo della crittografia in scenari molto pi� articolati, con una base di compatibilit� che andr� sempre crescendo in tutto il mondo linux (questo � uno degli obiettivi del progetto). � bene fare le cose fin da subito compatibili con uno standard che sar� sempre pi� importante oltre che ricco di potenzialit�, soprattutto pensando a quanto la riservatezza dei propri dati digitali sia sempre pi� sentita come importante anche dagli utenti semplici. | |||
Le tecniche mostrate in questa guida sono ancora "rozze" nel senso che richiedono per l'utente che le usa di autenticarsi come root, per� possono costituire una base di partenza. {{Box|Disclaimer|Appena riuscir� a trovare la tecnica per evitare l'autenticazione come root, aggiorner� questa guida, rendendo la cifratura pi� adatta a sistemi multi-utente}} | |||
La distribuzione cui ci si riferisce � Etch, ma il discorso dovrebbe subire modifiche minime o nulle sia per Lenny che per Sid. | |||
=='''Prerequisiti e preparazione del sistema'''== | |||
{{Box|Hardware|A livello hardware la cifratura con algoritmo AES � molto leggera quindi pu� essere eseguita anche su macchine molto datate, o piccoli sistemi embedded.}} | |||
La prima cosa da controllare prima di cimentarsi nella criptazione � l'abilitazione del kernel a usare l'algoritmo AES. I kernel precompilati di debian sono tutti gi� abilitati, quindi il controllo non dovrebbe essere necessario. In un terminale eseguiamo<pre>cat /proc/crypto</pre> e con il kernel 2.6.18 di etch dovremmo ottenere (in base anche ai moduli caricati) qualcosa tipo<pre>name : sha256 | |||
driver : sha256-generic | |||
module : sha256 | |||
priority : 0 | |||
type : digest | |||
blocksize : 64 | |||
digestsize : 32 | |||
name : aes | |||
driver : aes-generic | |||
module : aes | |||
priority : 100 | |||
type : cipher | |||
blocksize : 16 | |||
min keysize : 16 | |||
max keysize : 32 | |||
...</pre> | |||
Ovviamente a noi interessa la sezione che inizia con '''name : aes'''. Se non dovesse comparire dobbiamo controllare che il modulo '''aes''' sia caricato e ottenere un'output simile a questo: <pre>lsmod | grep aes | |||
aes 28160 2</pre>. | |||
Se l'output dovesse essere vuoto dobbiamo caricare il modulo '''aes''' con l'usuale comando '''modprobe aes'''. | |||
Se non usaimo un kernel precompilato debian, dobbiamo controllare che l'algoritmo di cifratura sia stato compilato: dal menu "'''Linux Kernel Configuration'''" seguiamo la voce "'''Cryptographic options --->'''" e abilitiamo la voce <pre>AES cipher algorithms</pre> o la strettamente legata <pre>AES cipher algorithms (i586)</pre> | |||
Sistemato il kernel passiamo all'installazione del software necessario:<pre>aptitude install cryptsetup</pre>che installer� tutte le dipendenze necessarie (piccole: l'installazione completa di tutte le sue dipendenze sta sotto i 2MB di spazio disco!). | |||
=='''Preparazione del file o della periferica'''== | |||
==='''Creare una loop device da un file'''=== | |||
Per preparare un file di dimensione fissata (in base alla quantit� e tipo di dati che vorremo salvare cifrati) usiamo il comando dd:<pre>dd if=/dev/zero of=/home/nomeutente/immagine_cifrata ibs=1M count=10</pre>per creare un file da poi usare di 10MB nella home di "nomeutente" (perdonate la poca fantasia). | |||
Autentichiamoci come root e montiamo il file appena creato in loop. Prima di tutto impostiamo il file appena creato come una loop device (ammettendo che questa sia la prima periferica in loop del sistema):<pre>/sbin/losetup /dev/loop/0 /home/nomeutente/immagine_cifrata</pre> | |||
==='''Creare la partizione criptata'''=== | |||
Per chi invece di cifrare un file montato in loop, deve cifrare una block device ordinaria, basta che sappia quale nome le abbia assegnato il kenrel (con precisione, perch� la procedura seguente canceller� tutti i dati nella periferica). | |||
{{Box|Periferiche|D'ora in poi chiameremo /dev/periferica la block device sulla quale scriveremo i dati cifrati, sia essa la periferica in loop del paragrafo precedente (/dev/loop/0) o una periferica ordinaria}} | |||
Creiamo la partizione LUKS:<pre>cryptsetup --verify-passphrase --verbose --hash=sha256 --cipher=aes-cbc-essiv:sha256 --key-size=256 luksFormat /dev/periferica | |||
WARNING! | |||
======== | |||
This will overwrite data on /dev/periferica irrevocably. | |||
Are you sure? (Type uppercase yes): </pre>Come dice il messaggio bisogna rispondere con uno '''YES''' interamente maiuscolo. | |||
Ci verr� di seguito chiesta una parola d'ordine e la sua conferma; mentre le digiteremo non vedremo nulla cambiare nel terminale:<pre>Enter LUKS passphrase: | |||
Verify passphrase: | |||
Command successful.</pre> | |||
A questo punto dobbiamo dare istruzioni al device mapper di mappare la periferica LUKS appena creata in una block device virtuale sulla quale scrivere i nostri dati in chiaro (e poi essi saranno scritti cifrati su /dev/periferica):<pre>cryptsetup luksOpen /dev/periferica criptata</pre>Questo creer� la periferica '''/dev/mapper/criptata''', sulla quale noi andremo a creare il file system che pi� ci interessa (su periferiche piccole come quella in esempio non conviene usare un file system con indicizzazione come reiserfs o ext3, bens� un pi� semplice ext2 o una fat):<pre>mkfs -t ext2 /dev/mapper/criptata</pre>Non ci rimane che montarla in una cartella di prova per verificare che sia tutto corretto (funzionamento, dimensioni desiderate ecc.):<pre>mount -t auto /dev/mapper/criptata /mnt/prova</pre> | |||
=='''Rimozione della periferca criptata'''== | |||
Per rimuovere la periferica cifrata bisogna innanzi tutto smontarla, poi bisogna dire a cryptsetup di chiudere la periferica (il che automaticamente eliminer� il nodo creato dal device mapper):<pre>umount /mnt/prova | |||
/sbin/cryptsetup luksClose criptata</pre> | |||
==='''Rimozione di una loop device'''=== | |||
Nel caso che la nostra periferica sia un file montato in loop, � consigliabile eliminare il collegamento che il nostro file immagine ha con la periferica loop cui l'abbiamo associato; questo ci permetter� di spostare o eliminare il file senza creare malfunzionamenti nelle periferiche di loop, cos� come ci consentir� di aprire nuove periferiche in loop ripartendo dalla numero 0:<pre>/sbin/losetup -d /dev/loop0</pre> | |||
=='''Automatizzazione dei passi necessari'''== | |||
A questo punto dobbiamo solo creare uno script da eseguire come root, per fare tutte le operazioni di creazione e montaggio, o viceversa di smontaggio e rimozione automaticamente. | |||
Di seguito sono riportati due script, uno per il caso di file montato ricorsivamente, l'altro per il caso di periferica ordinaria. | |||
In entrambi i casi il montaggio della periferica criptata avviene nella cartella "criptata" nella home dell'utente; � necessario quindi creare la cartella:<pre>mkdir /home/'''nomeutente'''/criptata</pre> | |||
==='''Scritp per file immagine'''=== | |||
<pre>#Utilizzo di un file immagine come periferica criptata | |||
#!/bin/bash | |||
case $1 in | |||
monta) | |||
if [ -f /home/'''nomeutente'''/immagine_cifrata ]; then | |||
echo "Impostazione periferica ricorsiva (loop)." | |||
/sbin/losetup /dev/loop0 /home/'''nomeutente'''/immagine_cifrata | |||
fi | |||
if [ $? = 0 ]; then | |||
/sbin/cryptsetup luksOpen /dev/loop0 criptata | |||
else | |||
echo "Impostazione periferica ricorsiva non riuscita." | |||
fi | |||
if [ $? = 0 ]; then | |||
mount /dev/mapper/criptata /home/'''nomeutente'''/criptata | |||
fi | |||
if [ $? !=0 ]; then | |||
echo "Impossibile montare la periferica criptata." | |||
/sbin/cryptsetup luksClose criptata | |||
/sbin/losetup -d /dev/loop0 | |||
fi | |||
;; | |||
smonta) | |||
umount /dev/mapper/criptata | |||
if [ $? = 0 ]; then | |||
/sbin/cryptsetup luksClose criptata | |||
else | |||
echo "Smontaggio non riuscito." | |||
fi | |||
if [ $? = 0 ]; then /sbin/losetup -d /dev/loop0 | |||
else echo "Chiusura periferica criptata non riuscita." | |||
fi | |||
;; | |||
*) | |||
echo "Usage: $1 {monta|smonta}" >&2 | |||
exit 1 | |||
;; | |||
esac</pre> | |||
==='''Scritp per periferica ordinaria'''=== | |||
In questo esempio viene usata la prima partizione di una scheda di memoria SD (/dev/mmcblk0p1 con lettore compatibile con il modulo sdhci). | |||
<pre>#!/bin/bash | |||
case $1 in | |||
monta) | |||
echo "Verifica presenza SD:" | |||
if [ -b /dev/mmcblk0p1 ] ; then | |||
echo "." | |||
else | |||
echo "La periferica non � inserita!" | |||
exit 2 | |||
fi | |||
if [ $? = 0 ]; then /sbin/cryptsetup luksOpen /dev/mmcblk0p1 criptata | |||
fi | |||
if [ $? = 0 ]; then | |||
mount /dev/mapper/criptata /home/'''nomeutente'''/criptata | |||
fi | |||
if [ $? != 0 ]; then | |||
echo "Il file system cifrato non pu� essere montato." | |||
/sbin/cryptsetup luksClose criptata | |||
fi | |||
;; | |||
smonta) | |||
#Smonto il file system criptato e controllo che lo smontaggio sia avvenuto correttamente | |||
umount /dev/mapper/criptata | |||
if [ $? != 0 ]; then | |||
echo "Smontaggio non riuscito." | |||
fi | |||
#Chiudo il nodo in /dev/mapper e controllo | |||
/sbin/cryptsetup luksClose criptata | |||
if [ $? = 0 ]; then | |||
echo "Nodo cifrato in /dev/mapper rimosso." | |||
else echo "Chiusura periferica criptata non riuscita" | |||
fi | |||
;; | |||
*) | |||
echo "Usage: $1 {monta|smonta}" >&2 | |||
exit 1 | |||
;; | |||
esac</pre> | |||
: [[Utente:GipPasso|GipPasso]] |
contributi