INTRODUZIONE

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.

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
  • Ivo Marino
  • Tutti quelli che correggeranno o daranno un apporto a questa guida ( mandatemi le email con le vostre errata-corrige).
 
documentazione/sicurezza/crypto_home.txt · Ultima modifica: 2010/04/13 01:16 (modifica esterna)
 
Ad eccezione da dove è diversamente indicato, il contenuto di questo wiki è sotto la seguente licenza:GNU Free Documentation License 1.3
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki