Crypto home

Da Wikipedia, l'enciclopedia libera.

A volte si sente la necessita' di cifrare i propri dati personali, ma spesso ledomande che ci poniamo sono ?

  • E' complesso adottare questa soluzione?
  • E' realmente sicuro?
  • Se uso un algoritmo molto complesso le prestazioni degradano?

Le risposte sono molto semplici:

  • Con i mezzi che si hanno ora a disposizione direi proprio di no.
  • AES ha uno spazio delle chiavi, nel nostro esempio, di 2^256 quindi un bruteforce su un numero di chiavi cosi' ampio e' altamente improbabile, inoltre non sono noti risultati di crittanalisi che lo indeboliscano.
  • Se l'algoritmo e' ben implementato le prestazioni non degradano di molto, anzi si puo' dire che il degrado e' veramente trascurabile.

Contents

SETUP DEL SISTEMA

Innanzitutto un kernel >=2.6.10, tutto quello che dobbiamo fare e' configurarlo in modo che sia in grado di usare l'algoritmo AES in questo modo.

       # Code maturity level options --->
               Prompt for development and/or incomplete code/drivers
       # General setup --->
               Support for hot-pluggable devices
       # Device Drivers > Multi-device support (RAID and LVM).
               Device mapper support
                       Crypt target support
       # Cryptographic options --->
               AES cipher algorithms

Dopo aver compilato e riavviato il vostro sistema potrete verificare se il modulo e' attivo in questo modo

       %> ls -L /dev/mapper/control

se non avete il device mapper basta installare il pacchetto dmsetup.

Su Debian basta installare dmsetup con il comando e non e' necessario ricompilare il kernel

       %> aptitude install dmsetup

Ora dobbiamo controllare se il supporto ad AES e' attivo

       %> cat /proc/crypto

l'output dovrebbe essere il seguente:

       name         : aes
       module       : aes
       type         : cipher
       ...

se non si ha un output di questo tipo bisogna caricare il modulo a mano con

       %> modprobe aes

ora ci serve un tool che ci permetta di gestire in modo semplice dmsetup: il package si chiama cryptsetup, sempre facendo riferimento a Debian

       %> aptitude install cryptsetup

Ora iniziamo con il vero e proprio procedimento di encryption

CIFRARE LA PARTIZIONE DI HOME

Nel caso in cui si dispone di una partizione apposita per la home, per esempio /dev/hda3, si procede in questo modo:

Controllo se ci sono errori nella partizione

       %> badblocks -c 10240 -s -w -t random -v /dev/hda3

Riempio la partizione di dati Random

       %> dd if=/dev/urandom of=/dev/hda3

Creo una partizione LUKS -- Linux Unified Key Setup

       %> cryptsetup --verify-passphrase --verbose --hash=sha256 \\
           \\ --cipher=aes-cbc-essiv:sha256 --key-size=256 luksFormat /dev/hda3

Ora setto il device mapper

       %> cryptsetup luksOpen /dev/hda3 home

per controllare se il tutto funziona

       %> cryptsetup status home
           /dev/mapper/home is active:
           cipher:  aes-cbc-essiv:sha256
           keysize: 256 bits
           device:  /dev/.static/dev/hda3
           offset:  2056 sectors
           size:    20962706 sectors
           mode:    read/write

Ora creiamo il filesystem

       %> mkfs.reiserfs /dev/mapper/home

Monto il filesystem

       %> mount /dev/mapper/home /mnt/

Ci copio dentro i file della home e lo smonto

       %> cp -axv /home/* /mnt/ && umount /mnt

Ora non ci rimane che settare ad hoc il nostro fstab

       # <file system>    <mount point>   <type>   <options>   <dump>  <pass>
       /dev/mapper/home   /home           ext3     defaults    1       2

e il nostro crypttab

       # <target device>   <source device>   <key file>   <options>
       home                /dev/hda3         none         luks

e il gioco e' fatto.


Alcune distro non supportano le partizioni LUCKS di default quindi non le montano all'avvio, per ovviare a questo problema:

1. Creiamo un file /etc/init.d/cryptinit contenente il seguente script

       #! /bin/sh
       # if this script is executed when home is opened, tries to close it;
       # otherwise, tries to open it, for three times, then continue without
       # opening it
       if [ -b /dev/mapper/home ]; then
               /sbin/cryptsetup luksClose home
       else
               i=3
               while [ $i -gt 0 ]; do
                       let "i -= 1"
                       /sbin/cryptsetup luksOpen /dev/hda3 home && i=0
               done
       fi


2. Lo rendiamo eseguibile

       %> chmod +x /etc/init.d/cryptinit

3. Lo linkiamo in /etc/rcS.d

       %> cd /etc/rcS.d
       %> ln -sf ../init.d/cryptinit S28cryptinit

4. Editiamo fstab in questo modo

       # <file system>    <mount point>   <type>   <options>   <dump>   <pass>
       /dev/mapper/home   /home           reiserfs     defaults    1        2

DELEGARE A PAM L'AUTENTICAZONE

Un altro modo di crittare la nostra home e delegare a PAM l'autenticazione e' ilseguente:

Installare i pacchetti libpam-mount cryptsetup openssl

       %> aptitude install libpam-mount cryptsetup openssl

aggiungere la seguente riga al file /etc/pam.d/common-auth

       auth    optional        pam_mount.so use_first_pass

in modo da avere i permessi di montarla anche via ssh e in tutti gli altri modi che PAM ci permette

Aggiungere al file /etc/pam.d/common-session

       session optional        pam_mount.so

alternativamente si puo' aggiungere anche la riga "@include common-pammount" in entrambi i file di cui sopra

aggiungere la seguente riga al file etc/security/pam_mount.conf:

       volume my_username crypt - /dev/hda4 /home/my_username cipher=aes aes-256-ecb /home/my_username.key

ora dobbiamo creare la chiave

       echo "my dmcrypt password" | openssl aes-256-ecb > /home/my_username.key

oppure usare la stessa password che usiamo anche per il login aggiungendo al file /etc/security/pam_mount.conf la seguente linea

       volume my_username crypt - /dev/hda3 /home/my_username cipher=aes - -

io personalmente consiglio quest'ultimo metodo.

Nel caso non si disponga di una partizione a parte per la home, questa potrebbe anche essere montata in un immagine loopback anziche' in un'apposita partizione

Creiamo un file di loopback grande abbastanza da contenere tutti i nostri file in questo modo:

       %> dd if=/dev/urandom of=/home/secret bs= #  count= #

sostituite ovviamente le # con il numero di byte

ora settiamo il file come un loop device

       %> losetup /dev/loop0 /home/secret

ora creiamo il device logico in questo modo:

       %> cryptsetup -y create mycryprt /dev/loop0

e formattiamolo

       %> mkfs.reiserfs /dev/mapper/mycrypt

montiamolo

       %> mount /dev/mapper/mycrypt /mnt/secret

Ora possiamo copiarci dentro i file che conteneva la nostra home, Pam pensera' ad autenticarvi ad ogni login decrittando la vostra home.

METODO VELOCE

Installare il software

  %> aptitude install cryptsetup libpam_mount

Creare la partizione di loop

  %> dd if=/dev/urandom of=/home/.joe.img bs=1M count=15000

Settare la partizione di loop

  %> losetup /dev/loop0 /home/.joe.img

Creare il volume logico cifrato

  %> cryptsetup -c aes-cbc-essiv:sha256 -y -s 256 --verify-passphrase luksFormat /dev/loop0

Formattare il volume logico

  %> cryptsetup luksOpen /dev/loop0 cryptedhome
  %> mkfs.reiserfs /dev/mapper/cryptedhome
  %> cryptsetup luksClose cryptedhome

Montare il volume cifrato

  %> mkdir /tmp/foo
  %> mount /dev/mapper/cryptedhome /tmp/foo

-- copiate i dati ---

settate PAM

  /etc/security/pam_mount.conf:
  #
  # dm_crypt + LUKS. Monta /home/.user.img
  #
  # volume * crypt - /home/.&.img /home/& loop - -
  volume joe crypt - /home/.joe.img /home/joe loop,cipher=aes - -

ora editate i seguenti file

  /etc/pam.d/login 
  /etc/pam.d/gdm   
  /etc/pam.d/ssh   

aggiungendo la seguente riga all fine

         @include    common-pammount

Editate il file

  /etc/pam.d/common-auth 

Aggiungendo alla fine

        auth    optional        pam_mount.so use_first_pass 

Alla fine del file

  /etc/pam.d/common-session

Aggiungete

         session optional        pam_mount.so

Autore

Andrea Ferraresi <andrea.ferraresi@gmail.com>

Si ringraziano:

  • Stefano Spinucci
  • Uwe Hermann
  • http://www.kill-9.org
  • Ivo Marino
  • Tutti quelli che correggeranno o daranno un apporto a questa guida ( mandatemi le email con le vostre errata-corrige).
Personal tools
Informazioni