Apr 052012
 

Durante la lettura di un blog interessante ho scoperto un nuovo tesoro: TRESOR, TRESOR in breve è una implementazione sicura di AES, che è resistente agli attacchi cold boot e altri attacchi sulla memoria principale.

Se come me vi chiedete che cosa è un attacco cold boot, la Princeton University ci può aiutare:

Contrariamente alle assunzioni popolari, la DRAM utilizzata nella maggior parte dei moderni computer mantiene il proprio contenuto per secondi o minuti dopo che il computer è stato spento, anche a temperature di esercizio e anche se viene rimossa da una scheda madre. Anche se le DRAM diventano meno attendibili quando non sono aggiornate, i loro dati non sono immediatamente cancellati, e il loro contenuto persiste a sufficienza per essere acquisito a fini dannosi (o forensi) ed avere una immagine completa della memoria di sistema. Questo fenomeno limita la capacità di un sistema operativo nel proteggere le chiavi crittografiche da un utente malintenzionato con accesso fisico. Useremo il cold boot per fare attacchi ai sistemi di cifratura del disco più popolari – BitLocker, FileVault, dm-crypt e TrueCrypt – non per mezzo di dispositivi speciali o materiali. Si sperimenterà la portata e la prevedibilità della rimanenza di memoria e come i tempi di persistenza dei dati possono essere aumentati drammaticamente con tecniche semplici.




E spostandoci sul loro blog si hanno altre informazioni interessanti:

La radice del problema risiede in una proprietà inaspettata della memorie DRAM di oggi. Le DRAM sono i chip di memoria principali utilizzati per memorizzare i dati mentre il sistema è in esecuzione. Praticamente tutti, compresi gli esperti, vi diranno che il contenuto della DRAM viene perso quando si spegne l’alimentazione. Ma non è così. La nostra ricerca mostra che i dati in DRAM in realtà sfumano gradualmente nel corso di un periodo che va dai secondi ai minuti, consentendo a un utente malintenzionato di leggere l’intero contenuto della memoria togliendo la corrente e quindi riavviando con un sistema operativo dannoso.

Interessante notare che, se raffreddate i chip DRAM, per esempio spruzzando lattine invertite di “aria compressa” per sploverare con il getto d’aria su di loro, i chip mantengono il loro contenuto per molto più tempo. A queste temperature (intorno a -50 ° C) è possibile rimuovere i chip dal computer e farli sedere sul tavolo per dieci minuti o più, senza perdita apprezzabile di dati. Raffreddate i chip in azoto liquido (-196 ° C) e manterranno il loro stato per 1 ora almeno, senza alcuna alimentazione. Basta mettere i chip di nuovo in una macchina e si può leggere il loro contenuto.

Questo è mortale per i prodotti di cifratura del disco, perché si basano sul mantenimento delle chiavi Master di decrittazione in DRAM. Questo era creduto per essere al sicuro perché il sistema operativo avrebbe impedito a tutti i programmi dannosi di accedere alle chiavi di memoria, e non c’era alcun modo per sbarazzarsi del sistema operativo senza togliere l’alimentazione alla macchina, che come “tutti sapevano” causa la cancellazione delle chiavi

Così abbiamo ora visto il problema, ma qual è la cura?

TRESOR

TRESOR implementa un modo sicuro per memorizzare le informazioni sensibili sulla crittografia al di fuori della RAM, l’idea alla base di questa implementazione è quella di memorizzare la chiave segreta all’interno dei registri della CPU anziché in RAM. Tutti i calcoli avvengono solo su registri, nessuno stato AES è mai mandato alla RAM. In particolare, i registri x86 di debug vengano utilizzati come archiviazione sicura delle chiavi.

L’esecuzione di TRESOR su una CPU a 64 bit che supporta AES-NI non comporta alcuna riduzione delle prestazioni rispetto ad una implementazione generica di AES e le dimensioni delle chiavi supportate sono 128, 192 e 256 bit AES (full).

L’esecuzione di TRESOR su una vecchia CPU a 32 bit, che supporta almeno SSE2 è anche possibile. Ma si ottiene una riduzione delle prestazioni di circa un fattore di sei rispetto al generico AES e la lunghezza supportata delle chiavi e di solo 128 bit.

Pertanto, si consiglia di utilizzare TRESOR in combinazione con uno dei nuovi processori Intel Core-i che supportano AES-NI

Installazione di TRESOR

Tresor è una patch per il kernel Linux, in questo momento la patch è disponibile per il Kernel 2.6.36 (32 e 64 bit) o 3.0.9 (64 bit).

In questo esempio vi mostrerò come installarlo su Ubuntu 11.10 a 64 bit, questo si basa sulla guida fatta da Oliver

1) Installare i requisiti per costruire il proprio kernel:

sudo apt-get install build-essential fakeroot kernel-package libncurses5-dev

2) Scaricare la versione 3.0.9 del kernel Linux, la configurazione di default per Ubuntu e la patch di TRESOR :

cd
wget http://www.kernel.org/pub/linux/kernel/v3.0/linux-3.0.9.tar.bz2
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.0.9-oneiric/linux-image-3.0.9-030009-generic_3.0.9-030009.201111111635_amd64.deb
wget http://www1.informatik.uni-erlangen.de/filepool/projects/tresor/tresor-patch-3.0.9_aesni

3) Con questi comandi è possibile estrarre il file di configurazione dal pacchetto ubuntu e memorizzarlo nella directory kconfig:

mkdir ubuconf
cd ubuconf
ar -x ../*.deb data.tar.bz2
tar xf data.tar.bz2 ./boot/config-3.0.9-030009-generic
cp ./boot/config-3.0.9-030009-generic ../kconfig
cd ..
rm -r ubuconf

4) Ora scompattare il kernel e applicare la patch con:

cd /usr/src
sudo tar xf ~/linux-3.0.9.tar.bz2
sudo patch --directory /usr/src/linux-3.0.9/ -p1 < ~/tresor-patch-3.0.9_aesni

5) E ora applicare la configurazione estratta dal pacchetto ubuntu:

cd linux-3.0.9
sudo cp ~/kconfig .config
sudo make menuconfig

La patch di TRESOR ha una voce corrispondente nella configurazione (Cryptographic API -> AES cipher, coldboot resistente (SAFE)) che viene aggiunta, è necessario attivare questa opzione. Una volta attivata è possibile salvare la configurazione e compilare il kernel in un pacchetto .deb con:

sudo make-kpkg kernel_image --initrd --revision 1337

Ora installate il pacchetto con:

sudo dpkg -i ../linux-image-3.0.9_1337_amd64.deb

E per testare questo nuovo kernel facciamo ripartire la macchina con:

sudo reboot

Nella pagina di grub scegliete il kernel 3.0.9, Ora si vedrà un prompt con una password richiesta da TRESOR : >> TRESOR < < Enter password > ******** Confirm key hash > 51 b7 fd e3 67 b3 89 64 14 ca 02 60 e5 d7 d2 6e f0 65 99 12 4a 60 27 6b 80 19 6a 43 ff c9 58 ac Correct (yes/no) > yes

Scegliere una password sicura da 8 a 53 caratteri (i caratteri speciali sono consentiti). Non vi è alcuna possibilità di cambiare la password una volta che il sistema è partito. Quindi assicuratevi di aver inserito la password corretta (altrimenti potrebbe essere necessario riavviare il sistema). Un hash della chiave segreta consente di verificare che la password inserita è corretta. L’hash non è la chiave stessa, quindi è sicuro visualizzarlo e anche scriverlo.

Una volta che il sistema è installato e funzionante, si può fare una prova di sospensione ACPI con: echo mem > /sys/power/state. Al risveglio si avrà una richiesta di password simile a quella sopra indicata. Ma questa volta è possibile solo inserire la password corretta, cioè la password che avete inserito durante l’avvio. Per verificare se la password inserita è corretta, l’hash della chiave è memorizzata internamente alla RAM. Al risveglio, è permesso solo di inserire la password corretta per due motivi: Prima di tutto, una chiave sbagliata porta immediatamente alla perdita dei dati se la crittografia del disco è attiva. In secondo luogo, il computer è al sicuro da accessi non autorizzati, senza la necessità di avere una richiesta ulteriore di password utente aggiuntiva.

Configurare una partizione criptata con TRESOR

Per fare un semplcie test useremo cryptsetup.

sudo apt-get install cryptsetup

E creaiamo un file di 256MB come contenitore. Essa servirà come un sostituto per una partizione reale.

dd if=/dev/zero bs=1M count=256 of=container

Una volta fatto il file contenitore creare un mount device loop.

sudo losetup /dev/loop0 container

Ora è possibile crittografare il contenitore o la partizione con chiavi sicure a 256 bit. Ricordate che su sistemi a 32 bit è possibile utilizzare solo la lunghezza della chiave a 128 bit. La passphrase può essere una stringa arbitraria – è solo utilizzata per ricavare la dummy-key delle Crypto-API, che non ha alcun effetto pratico.

sudo cryptsetup create tresor /dev/loop0 --cipher tresor --key-size 256

Ora fare un filesystem sulla partizione criptata con mkfs.ext2 /dev/mapper/tresor per impostare EXT2, per esempio.

sudo mkfs.ext2 /dev/mapper/tresor
sudo mkdir -p /media/tresor
sudo mount /dev/mapper/tresor /media/tresor

Tutto fatto, è ora possibile inserire i tuoi file in /media/tresor , saranno criptati e TRESOR utilizzato per memorizzare le chiavi.

Se sarà immessa una password errata al boot, il supporto non verrà riconosciuto con un errore, perché non riconosce il file system, in quanto non può essere decifrato.

mount: you must specify the filesystem type

Conclusioni

Spero di aver mostrato alcune informazioni utili su un problema reale (gli attacchi cold boot) e una possibile soluzione (TRESOR), purtroppo, fintanto che questo non è incluso in un Kernel facilmente installabile credo che non sarà così tanto utilizzato. Ma penso anche che l’importazione è essere consapevoli dei possibili rischi per la sicurezza dei nostri computer e le loro soluzioni.

Maggiori informazioni su TRESOR

Suggerisco l’ottimo lavoro di Tilo Muller, Felix C. Freiling and Andreas Dewald : TRESOR Runs Encryption Securely Outside RAM

Popular Posts:

flattr this!

  2 Responses to “Proteggere Linux dagli attacchi cold boot con TRESOR”

  1. i wanted to know if it is possible to use tresor for others version of ubuntu like 10.04 because i get this version

    • Yes it should be possible to use it with other versions of Ubuntu. You might need to work the patches a bit though.

 Leave a Reply

(required)

(required)


*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>