[glux] Chiave USB criptata

Andrea aerdan@inventati.org
Mer 15 Feb 2006 11:10:48 CET


---/--- 15 feb 2006 08:33:03 +0100, gigiv scrive: ---/---

> avevo messo da parte l'idea perche' mi sembrava, appunto, "un casino
> bestiale"

Infatti ora sto provando un'altro sistema che mi pare molto più comodo, appena
ho finito posto tutto.
 
> una cosa non mi e' chiara,
>  e' necessario fare una partizione/filesystem apposta, oppure basta fare un
> file da montare in loop ?

Il problema sono i filesystem journaled ma è anche vero che dal nel kernel 2.6.8
(altri non so) è possibile utilizzare anche questi con degli accorgimenti.
Quindi bisogna stare attenti a dove si copia il file.

CONFIG_BLK_DEV_CRYPTOLOOP:
[...]
WARNING: This device is not safe for journaled file systems like
ext3 or Reiserfs. Please use the Device Mapper crypto module
instead, which can be configured to be on-disk compatible with the
cryptoloop device.

Credo che il sistema che sto provando sia compatibile con filesystem journaled
tipo ext3 o Raiserfs.

Allego il file da cui prendo spunto. Quello che voglio fare è utilizzare questo
sitema per creare un filesystem criptato solo per la chiave oppure per un file
da associare ad un loop device e quindi da montare tipo in /mnt/crypto.

Ciao

a
-------------- parte successiva --------------
LICENZA
Copyright (c) 2004 Marco Bertorello

Questo How-To è documentazione libera e come tale può essere utilizzata e 
distribuita secondo le regole stabilite dalla licenza GNU GPL versione 2.0 o 
successive. Una copia integrale della licenza è reperibile presso il sito della 
Free Software Foudation: http://www.gnu.org/licenses/gpl.txt

PREFAZIONE

Alla luce di alcuni recenti avvenimenti che hanno dimostrato una compromissione
a livello fisico di alcune macchine appartenenti ad associazioni con scopi 
inerenti temi come anonimato e privacy, ho deciso che non si può più stare 
tranquilli neanche a PC spento e così ho cominciato a definire alcune cose che 
occorre tenere presente per *aumentare* la propria privacy  
(N.B. aumentare si, perchè la certezza assoluta della sicurezza, della privacy e 
dell'anonimato non si possono avere MAI).

In questa breve guida vedremo come installare una distribuzione GNU/linux su 
partizioni cifrate, in modo da vanificare un'attacco di tipo "fisico" (quale 
l'apertura del case e la duplicazione dei dischi o la copia di dati tramite 
live-cd)

Questo how-to non è e non vuole essere una guida esaustiva sugli argomenti di 
cui tratta: niente può sostituire la documentazione ufficiale dei singoli 
"prodotti" che andremo ad utilizzare.
Si tratta semplicemente delle mie, personalissime, esperienze. Spero possano 
essere d'aiuto a qualcuno

VANIFICARE ATTACHI FISICI ALLA MACCHINA

Iniziamo, installando una distribuzione GNU/Linux. Personalemte ho fatto queste
cose con una Debian 3.1 stable, ma non dovrebbero esserci limitazioni a farlo 
con altre distro.

Assicuratevi di partizionare il disco in questa maniera, per l'installazione:

Device			Utilizzo				
----------------------------------------------------------------
/dev/hda1		questa partizione sarà lasciata in	
			chiaro per consentire il boot
			In fase di installazione, montatela su
			/boot

/dev/hda2		questa partizione sarà la vostra futura
			/home, ma per il momento montatela su
			/ (root)
			
/dev/hda3		questa partizione sarà la vostra futura
			/ (root), ma per il momento non montatela
			
Non create nessuna partizione di swap, swapperemo su file su una partizione 
crittografata perchè l'area di swap può contenere dati che possono essere
recuperati.

Come potete notare l'unica partizione che resterà in chiaro, è la /boot dove 
risiede il kernel. La dimensione di questa partizione non dev'essere enorme,
nella maggior parte dei casi, dovrebbero essere sufficenti ~20 MB.
Le dimensioni delle altre partizioni sono a vostra discrezione.

Una volta conclusa l'installazione della distro, cominciamo a procurarci gli 
strumenti che ci servono:

1) un kernel >= 2.6.4 con supporto Multi-device (RAID e LVM), Device Mapper e 
Crypt Target (più, ovviamente gli algoritmi che avete intenzione di utilizzare)

2) gli initrd-tools

3) cryptsetup

Quindi, in un sistema Debian procediamo:

apt-get install kernel-image-2.6.8-2-686 initrd-tools cryptsetup

una volta terminata l'installazione, riavviate la macchina per partire con il 
nuovo kernel

Andiamo ora ad editare il file /etc/crypttab, inserendo la seguente riga:

root /dev/hda3

e successivamente riavviamo il servizio di cryptsetup 

/etc/init.d/cryptdisks start

Vi verrà chiesta una passphrase. Vi consiglio di inserne una:

1) per quanto possibile, complicata (lettere, numeri, caratteri speciali, 
maiuscole, minuscole, ecc)

2) che riuscite a ricordare (non è possibile recuperare i dati se la passphrase
è persa)

A questo punto, viene creato il device /dev/mapper/root, che può essere 
formattato con il vostro Filesystem preferito:

mkfs.ext3 /dev/mapper/root

montatelo in /mnt

mount /dev/mapper/root /mnt

e versategli dentro la vostra root attuale

cp -axv / /mnt

Dopo qualche minuto (dipende dalla quantità dei dati), avrà finito e potrete 
editare il file /mnt/etc/fstab per dirgli dove è la nuova root.
Sostituite, quindi

/dev/hda2       /               ext3    defaults,errors=remount-ro 0       1

con

/dev/mapper/root        /       ext3    defaults,errors=remount-ro 0       1

A questo punto, occorre effettuare un chroot all'interno della nuova root e 
ricreare l'initrd:

chroot /mnt /bin/bash
mount sysfs /sys  -t sysfs
mount proc  /proc -t proc
mount /dev/hda1 /boot

(se avete usato un kernel non-debian, sostituite a dovere :-) )

mkinitrd -o /boot/initrd.img-2.6.8-2-686

A questo punto è necessario modificare la configurazione del boot-loader, nel
mio caso, ho modificato /boot/grub/menu.lst e in tutte le occorrenze dove c'era
/dev/hda2 ho sostituito con /dev/mapper/root.

Se usate lilo, al posto di grub,(e quindi avete modificato /etc/lilo.conf) 
ricordatevi di re-installarlo

lilo -v

Smontate i filesystem del chroot e uscite dal chroot:

umount /sys
umount /proc
umount /boot
exit

Reboot! vi verrà chiesta la passphrase: inseritela

Se tutto è andato liscio, vi trovate in un ambiente con la root crittografata,
un buon inizio, non c'è che dire ;-)

Ora recuperiamo lo spazio inutilizzato dalla vecchia root e trasformiamolo nella
nostra /home.
E' inutilmente noioso, però, inserire due o più passphrase ad ogni boot della 
macchina, quindi possiamo evitarlo creando un file che contiene la chiave:

mkdir /etc/crypt
head /dev/urandom > /etc/crypt/keyfile

modifichiamo ora il file /etc/crypttab, aggiungendo questa riga:

home    /dev/hda2       /etc/crypt/keyfile

Fate partire il nuovo disco criptato

/etc/init.d/cryptdisks start

e createci sopra un filesystem

mkfs.ext3 /dev/mapper/home

ora, montate /dev/mapper/home su /mnt e copiateci la vostra /home

mount /dev/mapper/home /mnt
cp -avx /home/* /mnt/

andate a modificare /etc/fstab inserendo la riga:

/dev/mapper/home        /home   ext3    defaults        0       1

Effettuate un reboot. 
Se tutto è filato liscio, dovreste avere / e /home su filesystem crittografato.
Non basta. Ora pensiamo allo swap.

Creiamo un file di swap:

dd if=/dev/zero of=/enc-swap-file bs=1024k count=100

Questo comando crea un file da 100 MB, ovviamente sostituite count=100 con la 
quantità che desiderate.

Invece che crearvi un filesystem, definiremo uno spazio di swap, in questo modo:

mkswap /enc-swap-file

e attiviamolo:

swapon /enc-swap-file

facciamo in modo che parta all'avvio, inserendo in /etc/fstab questa riga:

/enc-swap-file        none    swap    sw

Il file risiede nella root e quindi su una partizione crittografata :-)

Al prossimo reboot troverete: la root crittografata, la /home crittografata e lo 
swap su file in una partizione crittografata. Molto bene :-)

In questo modo siamo ragionevolmente sicuri che chiunque tenti di accedere alla
macchina con una distro live per estrarne dati, resterà deluso.
Per utilizzare cifrazioni più robuste, si consultino le pagine di manuale di 
cryptsetup.












			
			
			









Maggiori informazioni sulla lista glux