|
W H I T E P A P E R |
|
Criptare il contenuto delle
partizioni GNU/Linux |
|
0x01 dm-crypt 0x02 EncFS 0x03 Crypto loop --[ 0x01 ]-- Dischi criptati con dm-crypt A partire dalla versione 2.6.4 del kernel linux è stata introdotta la possibilità di criptare il contenuto delle partizioni in modo tale che chi autorizzato tramite una chiave privata,può montare le partizioni. Procediamo a verificare che kernel abbiamo installato tramite il comando uname nel seguente modo: ~# uname -r 2.6.10-ck9 Strumenti indispensabili per realizzare un filesystem criptato sono i seguenti pacchetti: 1) la presenza del modulo dm-crypt nel kernel di default in quelli superiori al 2.6.4 2) dmsetup 3) hashalot a) Il modulo dm-crypt cifra i dati che vengono scritti nella partizione selezionando un algoritmo di tipo block cipher b) dmsetup consente di manipolare le tabelle di mappatura tra le partizioni, le partizioni criptate si trovano in /dev/mapper c) hashalot consente di generare chavi casuali partendo da una passphrase immessa dall'utente Compiliamo il kernel abilitando le seguenti voci: Device Drivers ---> Multi-device support (RAID and LVM) ---> <M> Device mapper support <M> Crypt target support x x Code maturity level options ---> x x x x General setup ---> x x x x Loadable module support ---> x x x x Processor type and features ---> x x x x Power management options (ACPI, APM) ---> x x x x Bus options (PCI, PCMCIA, EISA, MCA, ISA) ---> x x x x Executable file formats ---> x x x x Device Drivers ---> x x x x Generic Driver Options ---> x x x Memory Technology Devices (MTD) ---> x x Parallel port support ---> x x Plug and Play support ---> x x Block devices ---> x x ATA/ATAPI/MFM/RLL support ---> x x SCSI device support ---> x x Multi-device support (RAID and LVM) ---> x x [*] Multiple devices driver support (RAID and LVM) x x < > RAID support x x <*> Device mapper support x x <*> Crypt target support x x File systems ---> x x x x Profiling support ---> x x x x Kernel hacking ---> x x x x Security options ---> x x x x Cryptographic options ---> x x x x [*] Cryptographic API x x x x [*] HMAC support x x x x < > Null algorithms (NEW) x x x x < > MD4 digest algorithm (NEW) x x x x < > MD5 digest algorithm (NEW) x x x x < > SHA1 digest algorithm (NEW) x x x x < > SHA256 digest algorithm (NEW) x x x x < > SHA384 and SHA512 digest algorithms (NEW) x x x x < > Whirlpool digest algorithms (NEW) x x x x < > DES and Triple DES EDE cipher algorithms (NEW) x x x x < > Blowfish cipher algorithm (NEW) x x x x < > Twofish cipher algorithm (NEW) x x x x < > Serpent cipher algorithm (NEW) x x x x <*> AES cipher algorithms (i586) (NEW) x x x x < > CAST5 (CAST-128) cipher algorithm (NEW) x x x x < > CAST6 (CAST-256) cipher algorithm (NEW) x x x x < > TEA and XTEA cipher algorithms (NEW) x x x x < > ARC4 cipher algorithm (NEW) x x x x < > Khazad cipher algorithm (NEW) x x x x < > Anubis cipher algorithm (NEW) x x x x < > Deflate compression algorithm (NEW) x x x x < > Michael MIC keyed digest algorithm (NEW) x x x x < > CRC32c CRC algorithm (NEW) x x x x < > Testing module (NEW) x x x x Hardware crypto devices ---> Usciamo salvando la configurazione e diamo il seguente comando make && make modules_install al termini di ciò installiamo il kernel tramite il comando make all Procediamo a scaricare dmsetup dal seguente link: ~# wget ftp://sources.redhat.com/pub/dm/device-mapper-stable.tgz Lo installiamo nel seguente modo: ~# ./configure ~# make && make install Procediamo a scarocare hashalot dal seguente link: ~# wget http://www.paranoiacs.org/~sluskyb/hacks/hashalot/hashalot-0.3.tar.gz Lo installiamo nel seguente modo: ~# tar xzvf hashalot-0.3.tar.gz ~# ./configure ~# make && make install dmsetup di occupa di creare i nostri device criptati, il dmsetup è molto complesso da utilizzare, ma uno script realizzato da Christope Saout (che è l'autore del modulo dm.crypt) rende la configurazione delle partizioni da criptare rapido e semplice. Procediamo a scaricare cryptsetup.sh ed ad installarlo nel seguente modo: ~# wget http://www.saout.de/misc/dm-crypt/cryptsetup.sh ~# install cryptsetup.sh /usr/local/sbin Ora procediamo a criptare una partizione linux lanciamo da root cryptsetup.sh nel seguente modo: ~# cryptsetup -h ripemd160 -c aes create cryptvol1 /dev/hda3 Analizziamo la riga per comprenderle meglio -ripemd160 è il comando passato dallo script hashalot per indicare quale algoritmo hashing utilizzare per generare le chiavi in fase di criptatura dei dati partendo dalla passphrase inserita --c aes è il parametro passato dallo script al kernel per indicare il tipo di algoritmo di tipo block cipher da utilizzare per criptare i dati -cryptvol1 indica allora script di realizzare il file del dispositivo che fa riferimento alla partizione /dev/hda3 che troveremo in /dev/mapper/cryptvol1 Una volta eseguito il comando viene chiesto di inserire una passphrase a partire dalla quale verrà generata la chiave con la quale verrano criptati i nostri dati. Tramite /dev/mapper/cryptvol1 si può interaggire con la partizione criptate (mount.umount,formatt ecc..) Ora procediamo a formattare la partizione criptate: ~# mkfs -t ext2 /dev/mapper/cryptvol1 Ma si può passare al comando mkfs il tipo di fs che preferiamo di più. Ora che l'abbiamo formatta possiamo montarla tranquillamente nel seguente modo: ~# mkdir /mnt/secure ~# chmod 700 /mnt/secure ~# mount -t ext2 /dev/mapper/cryptvol1 /mnt/secure Ora che è montata la partizione ciptata si comporta come una partizione qualsiasi. Possiamo smontare la partizione criptata con il seguente comando: ~# umount /dev/mapper/cryptvol1 Oltre che a smontarla è necessario procedere a cancellare la mappatura del device criptato, poichè la chiave di cifratura viene memorizzata nel kernel per tutto il tempo in cui esiste il device criptato! Per far ciò utilizzeremo ancora lo script cryptsetup.sh nel seguente modo: ~# cryptsetup.sh remove cryptvol1 cmount.sh ------------------------------------------------------------------------------------ #!/bin/sh if test $# != 3 then echo "$0 <fs-type> <device> <mount-point>" exit 100 fi mappername=`echo $2 | sed 's/\//_/g'` false while [$? -ne 0 } do echo "Mounting $2 on $3 with filestystem $1, il volume criptato è $mappername" cryptsetup.sh -h ripemd160 -c aes create $mappername $2 mount -t $1 /dev/mapper/$mappername $3 done ------------------------------------------------------------------------------------ cumount.sh ------------------------------------------------------------------------------------ #!/bin/bash if test $# != 1 then echo "$0 <device> " exit 100 fi mappername=`echo $2 | sed 's/\//_/g'` while [$? -ne 0 } do echo "unmounting $1" umount /dev/mapper/$mappername cryptsetup.sh -h remove $mappername done ------------------------------------------------------------------------------------ nb: tengo a precisare gli script cmount ed cumount non sono miei ma li ho trovato in rete Per un uso più semplice dgt: ~# install cmount.sh /usr/local/sbin ~# install cumount.sh /usr/local/sbin ESEMPI d'uso degli script: ~# cmount.sh ext2 /dev/mapper/cryptvol1 /dev/hda3 & ~# cumount.sh /dev/mapper/cryptvol1 Fino ad ora abbiamo parlato di creare un partizione criptata, per convertirne una già esistente bisogna stare attenti prima di tutto a non formattare nessuna delle due soprattutto se ci sono dei dati; le smontiamo tutte e due, non si fanno eccezioni! Ora poniamo il caso di voler criptare una partizione esistente, procederemo nel seguente modo: Creiamo tramite lo script cryptsetup.sh il file speciale cryptvol1 all'interno della directory /dev/mapper/ ~# umount /dev/hda3 ~# umount /dev/mapper/cryptvol1 Utilizziamo l'utility dd per la copia a basso livello, dei dati della paritizione /dev/hda3 nella partizione cifrata con il seguente comando: ~# dd if=/dev/hda3 of=/dev/mapper/cryptvol1 per ritornare i dati in chiaro bisogna procedere nel seguente modo: ~# dd if=/dev/mapper/cryptvol1 of=/dev/hda3 Con questo metodo si posso criptare hard esterni usb,penne usb e floppy! Abbiamo la possibilità di creare una chiave a floppy o usbkey Per realizzare una chiave a floppy procediamo nel seguente modo: ~# mount /dev/fd0 ~# mkfs.ext2 /dev/fd0 ~# mount /dev/fd0 /mnt/floppy creiamo la partizione per la chiave sul floppy: ~#dd if=/dev/urandom of=/mnt/floppy/key bs=12k count=100 creera una chiave di tipo data usando /dev/urandom di circa 1.2 mb Proseguiamo con la creazione del device virtuale: ~# cp key /mnt/floppy/ ~# cryptsetup -h ripemd160 -c aes -d /mnt/floppy/key create secure /dev/hda3 il parametro -d dice a cryptsetup il full path per la chiave montiamo la partizione come abbiamo visto in precedenza Per smontare le partizioni procediamo nel seguente modo ~# umount /mnt/secure -v ~# cryptsetup remove secure Script per chiave su disketto vim crypt-up.sh ---------------------------------------------------------------------------------------------------------------------------- #!/bin/bash mount -t ext2 /dev/fd0 /mnt/floppy -v /usr/sbin/cryptsetup -h ripemd160 -c aes -d /mnt/floppy/key create secure /dev/hdaX -v mount /dev/mapper/secure /mnt/secure -v umount /dev/fd0 -v ---------------------------------------------------------------------------------------------------------------------------- vim crypt-down.sh ---------------------------------------------------------------------------------------------------------------------------- #!/bin/bash umount /mnt/secure -v /usr/sbin/cryptsetup remove secure -v ---------------------------------------------------------------------------------------------------------------------------- --[ 0x02]-- Dischi criptati con EncFS Tramite EncFs che si appoggia a FUSE consente agli utenti la possibilità di crearsi proprie dir o interi dischi cifrati. Il principale vantaggio di EncFS consiste nel fatto che per la sua esecuzione non richiede i privileggi di root! quindi puà essere eseguito da qualunque utente! Procediamo nel seguente modo: logghiamoci come root tramite il comando: ~$ su - Procediamo a scaricare EncFS dal suo sito ufficiale http://encfs.sourceforge.net ~# wget http://prdownloads.sourceforge.net/encfs/encfs-1.2.0-2.tgz Per poter compilare correttamente EncFS bisogna soddisfare le sue relative dipendenze; quella principale è costituita dal packages RLog reperibile al seguente link http://arg0.net/users/vgough/rlog scarichiamo rlog ~# wget http://arg0.net/users/vgough/download/rlog-1.3.6.tgz ~# tar xzvf rlog-1.3.6.tgz.gz ~# cd rlog-1.3.6 ~# make ~# make install Ora procediamo a compilare EncFS: ~# cd ../encfs-1.2.0 ~# ./configure ~# make ~# make install Ora procediamo a creare il disco cifrato virtuale nel seguente modo: ~$ encfs ~/.my ~/my The directory "/home/demone/.my" does not exist. Should it be created? (y,n) y The directory "/home/demone/my" does not exist. Should it be created? (y,n) y Creating new encrypted volume. Please choose from one of the following options: enter "x" for expert configuration mode, enter "p" for pre-configured paranoia mode, anything else, or an empty line will select standard mode. ?> Standard configuration selected. Configuration finished. The filesystem to be created has the following properties: Filesystem cipher: "ssl/blowfish", version 2:1:1 Filename encoding: "nameio/block", version 3:0:1 Key Size: 160 bits Block Size: 512 bytes Each file contains 8 byte header with unique IV data. Filenames encoded using IV chaining mode. Now you will need to enter a password for your filesystem. You will need to remember this password, as there is absolutely no recovery mechanism. However, the password can be changed later using encfsctl. New Encfs Password: Verify Encfs Password: ~$ Con il comando: encfs ~/.my ~/my otteniamo due dir .my ed my: ~/.my conterra fisicamente i dati criptati che risultano inutilizzabili ~/my risulta normalmente vuota e solo dopo il mount appariranno i dati. Per l'umount del disco virtuale cifrato si procedere nel seguente modo: ~# fusermount -u /home/demone/my Possiamo utilizzare i seguenti script bash per automizzare le operazioni di mount ed umount: ~# vim Encfs_mount.sh #!/bin/sh if [ "UID" == "0" ]; then echo -e "\n You must be root to crypt your filesystem\n"; exit 1; fi dir=~/my encfs ~/.$dir ~/$dir # Eof # vim Encfs_umount.sh #!/bin/sh if [ "UID" == "0" ]; then echo -e "\n You must be root to decrypt your filesystem\n"; exit 1; fi dir=~/my fusermount -u ~/$dir # Eof Copiamoli entrambi in /usr/bin e diamogli i permessi di esecuzione (chmod 755). --[ 0x03]-- Cryptoloop supporto integrato nel kernel a partire dalla versione 2.6 consente di cifra tutti i tipi di filesystem linux,inoltre consente anche la cifratura dei devices!Affinche possiamo utilizzare Cryptoloop bisogna compilare il kernel ne seguente modo: x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x Code maturity level options ---> x x x x General setup ---> x x x x Loadable module support ---> x x x x Processor type and features ---> x x x x Power management options (ACPI, APM) ---> x x x x Bus options (PCI, PCMCIA, EISA, MCA, ISA) ---> x x x x Executable file formats ---> x x x x Device Drivers ---> x x x x Generic Driver Options ---> x x x x Memory Technology Devices (MTD) ---> x x x x Parallel port support ---> x x x x Plug and Play support ---> x x x x Block devices ---> x x xx <*> Normal floppy disk support x x x x < > Compaq SMART2 support x x x x < > Compaq Smart Array 5xxx support x x x x < > Mylex DAC960/DAC1100 PCI RAID Controller support x x x x < > Micro Memory MM5415 Battery Backed RAM support (EXPERIMENTAL) x x x x <*> Loopback device support x x x x <*> Cryptoloop Support x x Per quanto concerne gli algoritmi di criptatura compilare il kernel scegliendo l'algoritmo che più preferiamo: x x Code maturity level options ---> x x x x General setup ---> x x x x Loadable module support ---> x x x x Processor type and features ---> x x x x Power management options (ACPI, APM) ---> x x x x Bus options (PCI, PCMCIA, EISA, MCA, ISA) ---> x x x x Executable file formats ---> x x x x Device Drivers ---> x x x x File systems ---> x x x x Profiling support ---> x x x x Kernel hacking ---> x x x x Security options ---> x x x x Cryptographic options ---> x x x x [*] Cryptographic API x x x x [*] HMAC support x x x x < > Null algorithms (NEW) x x x x < > MD4 digest algorithm (NEW) x x x x < > MD5 digest algorithm (NEW) x x x x < > SHA1 digest algorithm (NEW) x x x x < > SHA256 digest algorithm (NEW) x x x x < > SHA384 and SHA512 digest algorithms (NEW) x x x x < > Whirlpool digest algorithms (NEW) x x x x < > DES and Triple DES EDE cipher algorithms (NEW) x x x x < > Blowfish cipher algorithm (NEW) x x x x < > Twofish cipher algorithm (NEW) x x x x < > Serpent cipher algorithm (NEW) x x x x < > AES cipher algorithms (i586) (NEW) x x x x < > CAST5 (CAST-128) cipher algorithm (NEW) x x x x < > CAST6 (CAST-256) cipher algorithm (NEW) x x x x < > TEA and XTEA cipher algorithms (NEW) x x x x < > ARC4 cipher algorithm (NEW) x x x x < > Khazad cipher algorithm (NEW) x x x x < > Anubis cipher algorithm (NEW) x x x x < > Deflate compression algorithm (NEW) x x x x < > Michael MIC keyed digest algorithm (NEW) x x x x < > CRC32c CRC algorithm (NEW) x x x x < > Testing module (NEW) x x x x Hardware crypto devices ---> x x Poi procediamo a dare i seguenti comandi # make && make modules_install # make install Una volta compilato il kernel ci occorrono le util-linux per installarle procediamo nel seguente modo: $ wget http://www.kernel.org/pub/linux/utils/util-linux/util-linux-2.12q.tar.gz $ tar xvzf util-linux-2.12q.tar.gz $ cd util-linux-2.12q $ patch p1< /dir_patchfile/losetupcombined.patch $ patch p1< /dir_patchfile/utillinuxX.Ykernel2.6.patch $ ./configure && make $ su - # install Nelle principali distro la patch con relativo pacchettio è già presente. Ora procediamo a realizzare una dir nel seguente modo: # dd if=/dev/urandom of=~/dir bs=1M count=500 invece nel seguente modo realizziamo il device: # dd if=/dev/urandom of=/dev/device con tale comando riempiamo di dati casuali il nostro container o device Creiamo il filesystem crittografato # losetup e [algoritmo] /dev/loop[09] ~/dir o # losetup e [algoritmo] /dev/loop[09] /dev/device Formattiamo il filesystem crittografato # mkfs.[tipo fs] /dev/loop[09] Per montare la nostra dir o device criptato procediamo nel seguente modo: # mount t file system /dev/loop[09] mount point Per smontare la nostra dir o device criptato procediamo nel seguente modo: # umount mount point # losetup d /dev/loop[09] |