creative commons
Filesystems encryptés sous NetBSD et FreeBSD par la pratique
icone securite
Signature :
GNU/Linux Magazine
Sommaire de l'article :
Tu penses avoir une protection à toute épreuve contre l'accès aux données de tes disques durs : tu les caches sous ton oreiller et dans tes piles de t-shirts (sales ou pas, ça dépend du niveau de protection souhaitée). Ce que tu ne sais pas, c'est que même le chat des voisins sait où tu les ranges. Et tellement la routine de ces actions te saoule que tu as fini par capituler et les laisser en place dans leurs boîtiers. Heureusement, il existe plus seyant et plus pratique que les immondes disques durs dans des caddies extractibles, et tu vas pouvoir te balader l'esprit plus tranquille pour les données de ton notebook ou celles de ta workstation, si jamais tu venais à en être séparé malgré toi. À compter de maintenant, si tu continues à te faire piquer tes billes par les copains de récré, c'est que tu l'auras bien voulu !

NetBSD : CGD

Qu'est-ce que CGD ?

CGD signifie cryptographic disk driver. La jolie page de man le décrivant se trouve là : http://netbsd.gw.com/ cgi-bin/man-cgi?cgd. C'est un système d'encryption par bloc implémenté au niveau du kernel. Les algorithmes disponibles sont :
  • aes-cbc ;
  • 3des-cbc ;
  • blowfish-cbc.
L'outil pour manipuler CGD s'appelle cgdconfig. Sa page de man est ici : http://netbsd.gw.com/cgi-bin/ man-cgi?cgdconfig. Il est nécessaire que le support pour CDG soit ajouté à la configuration de votre kernel avant de pouvoir l'utiliser (on s'en douterait m'ame Michu, mais c'est un rappel pour ceux qui ne sont pas allé lire les liens ci-dessus). Le chapitre dédié à CGD dans le Guide NetBSD se trouve à cette URL : http://www.netbsd.org/guide/en/ chap-cgd.html. Il est très complet et bien détaillé.

Dans le vif du sujet

On va utiliser une partition disponible et déjà prête. La commande suivante crée le fichier de paramètres (paramsfile) /etc/cgd/wd1e, utilisant l'algorythme aes-cbc, une méthode de vérification disklabel et une clé d'une taille de 256 bits.
# cgdconfig -g -V disklabel -o /etc/cgd/wd1e aes-cbc 256
Du fait du choix de la méthode de vérification (disklabel) et de l'absence dudit disklabel sur le disque logique, on doit " forcer " le mécanisme de vérification pour la première configuration de CGD.
# cgdconfig -V re-enter cgd0 /dev/wd1e
/dev/wd1e's passphrase: <password>
re-enter device's passphrase: <password>
On vérifie le disklabel :
 # disklabel -e -I cgd0
# /dev/rcgd0d:
type: cgd
disk: cgd
label: fictitious
flags:
bytes/sector: 512
sectors/track: 2048
tracks/cylinder: 1
sectors/cylinder: 2048
cylinders: 13703
total sectors: 28065492
rpm: 3600
interleave: 1
trackskew: 0
cylinderskew: 0
headswitch: 0           # microseconds
track-to-track seek: 0  # microseconds
drivedata: 0

4 partitions:
#      size offset fstype [fsize bsize cpg/sgs]
a: 28065492      0 4.2BSD      0     0     0  # (Cyl.0-13703*)
d: 28065492      0 unused      0     0        # (Cyl.0-13703*)
Et on formate la partition encryptée.
 # newfs /dev/cgd0a
/dev/cgd0a: 13703.9MB (28065492 sectors) block size 16384,
            fragment size 2048
        using 75 cylinder groups of 182.72MB, 11694 blks,
        23040 inodes.
super-block backups (for fsck_ffs -b #) at:
32, 374240, 748448, 1122656, 1496864, 1871072, 2245280,
2619488, 2993696, 3367904, 3742112, 4116320, 4490528,
4864736, 5238944,
.........................................................
On fait un fsck sur le volume encrypté, on le mounte et on y met un fichier témoin.
# fsck -t ffs /dev/cgd0a /dev/rcgd0a
File system is clean; not checking
# mount -t ffs /dev/cgd0a /mnt
# touch /mnt/test.txt
Vérification de la détection du volume par les scripts de boot :
  • on ajoute cgd=YES dans le fichier /etc/rc.conf.
  • on configure le fichier /etc/cgd/cgd.conf.
cgd0 /dev/wd1e
  • on ajoute le point de montage dans /etc/fstab.
/dev/cgd0a /crypted ffs rw,softdep,noatime,nodevmtime,nocoredump 2 2
On vérifie que le script /etc/rc.d/cgd retrouve ses petits :
 # /etc/rc.d/cgd start
Configuring CGD devices.
/dev/wd1e's passphrase:
# mount -a
# mount
/dev/cgd0a on /crypted type ffs
        (nocoredump, noatime, nodevmtime,
         soft dependencies, local)
Voilà, on vient de vérifier que notre configuration CGD était reconnue par le système. Il reste à procéder à un test grandeur nature en redémarrant sa machine. Si tout est configuré correctement, le système demandera ta passphrase (ATTENTION, le clavier est alors en qwerty) et devrait monter la partition encryptée. Une fois que tu es content du résultat, il te reste à mettre tes données sur /crypted.

Encrypter la partition de swap

Les exemples de partition de swap encryptée que l'on trouve sur http://www.s-mackie.demon.co.uk/ unix-notes/NetBSD-CGD-Setup.html et http://www.nycbug.org/uploads/_netbsdcgd.html utilisent une partition de swap en tant que partition d'un volume crypté. Je m'explique. Une partition complète est associée à un device cgdX et dans ce " disque logique " cgdX sont créées diverses partitions dont celle de swap de la même manière que l'on procède sur un disque normal wdX : a, b, e, f, g... Premières manipulations : vérifier que tout ceci fonctionne manuellement. La commande swapctl permet de vérifier le swap actuellement configuré.
 # swapctl -l
Device      512-blocks     Used    Avail Capacity  Priority
/dev/wd0b       263088        0   263088     0%    0
 # cgdconfig -g -o /etc/cgd/wd1i -V none \
  -k randomkey blowfish-cbc
# cgdconfig cgd1 /dev/wd1i
# disklabel -e -I cgd1
# /dev/rcgd1d:
type: cgd
disk: cgd
label: fictitious
flags:
bytes/sector: 512
sectors/track: 2048
tracks/cylinder: 1
sectors/cylinder: 2048
cylinders: 619
total sectors: 1269072
rpm: 3600
interleave: 1
trackskew: 0
cylinderskew: 0
headswitch: 0           # microseconds
track-to-track seek: 0  # microseconds
drivedata: 0

4 partitions:
#     size offset fstype [fsize bsize cpg/sgs]
b: 1269072      0   swap                     # (Cyl.0-619*)
d: 1269072      0 unused      0     0        # (Cyl.0-619*)

# swapctl -a /dev/cgd1b
# swapctl -l
Device      512-blocks     Used    Avail Capacity  Priority
/dev/wd0b       263088        0   263088     0%    0
/dev/cgd1b     1269072        0  1269072     0%    0
Total          1532160        0  1532160     0%
Maintenant, essayons de rendre tout ceci automatique. Dans un premier temps, on va sauvegarder le disklabel de cgd1 pour que swapctl ne se plaigne pas de ne pas trouver de label.
# disklabel -r cgd1 > /etc/cgd/cgd1.disklabel
Ensuite, on crée le fichier /etc/rc.conf/cgd qui sera chargé de remettre le label sur le disque encrypté cgd1 à chaque reboot :
swap_device="cgd"
swap_disklabel="/etc/cgd/cgd1.disklabel"
start_postcmd="cgd_swap"

cgd_swap()
{
  if [ -f $swap_disklabel ]; then
    disklabel -R -r $swap_device $swap_disklabel
  fi
}
On ajoute la ligne suivante au fichier etc/fstab :
/dev/cgd1b none swap sw 0 0
On vérifie avec les scripts de démarrage :
 # /etc/rc.d/cgd start
Configuring CGD devices.
/dev/wd1e's passphrase:
# swapctl -l
no swap devices configured
# /etc/rc.d/swap1 start
swapctl: adding /dev/wd0b as swap device at priority 0
swapctl: adding /dev/cgd1b as swap device at priority 0
Naturellement, ici, avoir une seconde partition de swap encryptée en sus de la première qui ne l'est pas ne rime pas à grand-chose. Un administrateur soucieux de la confidentialité de ses données s'attachera donc à appliquer les différentes commandes vues dans ce chapitre pour sécuriser /dev/wd0b. Contrairement à GELI (FreeBSD), CGD ne permet pas de distribuer la sécurité du volume encrypté vers une passphrase et un fichier de " clés " combinés. Par contre, CGD permet " facilement " de manipuler des CD et DVD qu'on aura au préalable encryptés.

FreeBSD : GELI

Hop, te voilà en jambe avec la première partie pour NetBSD. Ne t'assieds pas, on continue.

Qu'est-ce que GELI ?

GELI signifie tout simplement GEOM ELI. GEOM est un framework modulaire de transformation d'I/O sur les disques. Dit plus simplement, c'est une surcouche de manipulation des objets " disques " qui va permettre d'effectuer des opérations différentes dans un " environnement unifié ". Les pages de manuel à lire sont les suivantes : http://www.freebsd.org/cgi/man.cgi?query=geom&sektion=4 http://www.freebsd.org/cgi/man.cgi?query=geli&sektion=8

Encrypter son swap

Enfin, surtout celui de sa machine. Tout d'abord, on vérifie l'utilisation d'une partition de swap :
 # swapinfo
Device          1K-blocks     Used    Avail Capacity
/dev/ad0s1b       1048576        0  1048576     0%
On le désactiver et on vérifie :
# swapoff /dev/da0b
# swapinfo
Device 1K-blocks Used Avail Capacity
(rien)
Le fichier /etc/defaults/rc.conf nous indique les valeurs par défaut des différentes options passées à GELI pour le montage du swap au boot.
# Options for GELI-encrypted swap partitions.
geli_swap_flags="-a aes -l 256 -s 4096 -d"
Ces valeurs conviennent parfaitement, mais dans le cas où il faudrait les modifier, c'est dans le fichier /etc/rc.conf qu'elles devront être changées. On modifie le fichier /etc/fstab pour indiquer qu'on va vouloir utiliser une partition de swap encryptée avec GELI (on ajoute simplement .eli à la fin de la partition de swap).
# Device Mountpoint FStype Options Dump Pass#
/dev/ad0s1b.eli none swap sw 0 0
Et maintenant, que se passe-t-il ? On reboote et on voit ce qu'il se passe ? Eh bien non, on exécute les scripts suivants :
# /etc/rc.d/ecnswap start
# ls -al /dev/ad0s1b*
crw-r----- 1 root operator 0, 96 Jan 3 21:04 /dev/ad0s1b
crw-r----- 1 root operator 0,106 Jan 3 21:04 /dev/ad0s1b.eli

# /etc/rc.d/swap1 start
swapon: adding /dev/ad0s1b.eli as swap device

# swapinfo
Device          1K-blocks     Used    Avail Capacity
/dev/ad0s1b.eli   1048576        0  1048576     0%

# geli status
      Name  Status  Components
ad0s1b.eli     N/A  ad0s1b
Ah !!! On obtient un swap encrypté via GELI et " mounté ". Évidemment, lors du prochain reboot, il est plus que recommandé de vérifier que le swap est bien toujours encrypté, mais, cette fois, de manière complètement automatique, y compris le montage.

Encrypter une partition : /home

À partir d'ici, il est INDISPENSABLE d'avoir des backups des données de la partition sur laquelle les différentes commandes seront exécutées. On choisit d'encrypter une partition existante /home. Si tu as des utilisateurs, le plus simple est de rebooter en single user et de ne pas monter /home après le fsck : ils ne pourront plus se loguer, ni lancer de processes qui modifieraient des fichiers sur cette partition. Initialisation de GELI pour la partition /home :
 # geli init -a aes -l 256 ad0s1f
Enter new passphrase: <password>
Reenter new passphrase: <password>
Il faut maintenant formater le volume pointé par la partition encryptée :
# newfs -U -O2 /dev/ad0s1f.eli
geli attach ad0s18
Modification de /etc/fstab pour prendre en compte cette partition " GELI-fiée "
# Device Mountpoint FStype Options Dump Pass#
/dev/ad0s1f /home ufs rw 2 2
qui devient :
# Device Mountpoint FStype Options Dump Pass#
/dev/ad0s1f.eli /home ufs rw 2 2
On définit ensuite les informations sur notre partition encryptée dans le fichier /etc/rc.conf :
geli_devices="ad0s1f"
geli_ad0s1f_flags=""
Il nous reste à vérifier que les scripts de démarrage ont bien toutes les informations nécessaires pour mounter la partition /home encryptée :
 # /etc/rc.d/geli start
Configuring Disk Encryption for ad0s1f.
Enter passphrase: <password>
# mount
/dev/ad0s1f.eli on /home (ufs, local, soft-updates)
Enfin, on va vérifier que la partition est de nouveau mountée après un reboot et il faudra restaurer les backups pour retrouver les données qui s'y trouvaient. Afin de ne pas limiter la sécurité du volume crypté à une seule passphrase, il est possible de modifier un volume GELI existant, via geli setkey, l'utilisation de fichier de clé, combiné ou non à la passphrase initiale.
  • passphrase ;
  • fichier de clé (keyfile) ;
  • passphrase et fichier de clé : dans ce cas, il faut les deux éléments pour accéder au volume protégé.
Note importante pour ceux qui ont un clavier avec un autre layout que celui par défaut lors du boot : au moment de la demande de la passphrase, le clavier est en qwerty ; si tu veux avoir un clavier différent de qwerty dans les phases de boot de ton FreeBSD, il te faut suivre le lien suivant, section clavier : http://imil.net/docs/ sexy-FreeBSD.txt.

Limites et conclusion

Comme dans tout système de protection (ici protection à l'accès des données), il faut bien avoir à l'esprit ce qui est réellement protégé. Un système Unix possède des données importantes dans bien des endroits, /etc et tous ses sous-répertoires pour n'en citer qu'un, pourtant aucun de ces fichiers ne sera protégé par une partition encryptée. Aujourd'hui, aucun système d'encryption de partition ne permet d'avoir l'ensemble les partitions encryptées : il faut au moins charger le kernel et ses modules, lire la fstab et exécuter les scripts de démarrage. Personnellement, je n'encrypte que le swap et la partition /home, mais j'ai activé la protection de l'accès au disque par mot de passe dans le bios de mon Lappy. Je souhaite que cet article t'ait démontré l'utilisation des partitions protégées au quotidien et t'ait convaincu qu'en cas de vol cela limite la perte à une perte matérielle sans y ajouter la crainte que ces données ne soient accessibles à n'importe qui (à condition d'avoir des sauvegardes récentes). Une suite de cet article pourrait être la mise en place d'un système entièrement encrypté, où le kernel et ses modules se trouveraient sur une clé USB.

Références

Les pages de man et URL citées dans le présent article, ainsi que http://sclo.retiaire.org/wiki/doku.php?id=slash:freebsd:geli
Il y a : 0 commentaire(s)

Donnez votre avis

Vous devez avoir ouvert une session pour écrire un commentaire.

Brèves
Édito : Linux Pratique Essentiel N°24
Édito : Linux Pratique HS N°23
Édito : GNU/Linux Magazine 146
Édito : GNU/Linux Magazine HS N°58
Édito : Open Silicium N°5
Communication
Linux Pratique HS 23 – Communiqué de presse
Linux Pratique Essentiel N°24 – Communiqué de presse
Gnu/Linux Magazine sponsor et partenaire de PROLOGIN
Linux Essentiel partenaire des Rencontres du Libre de Lion sur Mer (Normandie)
GNU/Linux Magazine HS 58 – Communiqué de presse
prochainement moteur de recherches des articles
 
:
:
Jours heures minutes secondes
En kiosque
Le tout nouveau Linux Pratique Essentiel est disponible dès maintenant chez votre marchand de journaux et sur notre site...

Lire la suite...

Le tout nouveau Linux Pratique est disponible dès maintenant chez votre marchand de journaux et sur notre site...

Lire la suite...

Le tout nouveau GNU/Linux Magazine est disponible dès maintenant chez votre marchand de journaux et sur notre site...

Lire la suite...

Le tout nouveau GNU/Linux Magazine HS est disponible dès maintenant chez votre marchand de journaux et sur notre site...

Lire la suite...

Le tout nouveau Open Silicium est disponible dès maintenant chez votre marchand de journaux et sur notre site...

Lire la suite...

Le tout nouveau Linux Pratique est disponible dès maintenant chez votre marchand de journaux et sur notre site...

Lire la suite...

Le tout nouveau Misc est disponible dès maintenant chez votre marchand de journaux et sur notre site...

Lire la suite...

Le tout nouveau GNU/Linux Magazine est disponible dès maintenant chez votre marchand de journaux et sur notre site...

Lire la suite...