Ubuntu : Chiffrement intégral du disque dur d'un portable
Par Petaramesh le mercredi 21 novembre 2007, 00:43 - Informatique non-duelle - Lien permanent
Je continue à faire mumuse avec le chiffrement sous Ubuntu, et je viens de parvenir au chiffrement intégral du disque dur de mon portable (à /boot près).
Eh oui, un portable, ça se perd, ça se vole... Si on veut à la fois que nos données personnelles ne risquent jamais de traîner toutes nues dans la nature, et cerise sur le gâtal, que la machine soit parfaitement inutilisable pour l'éventuel voleur, le chiffrement intégral du disque dur est le must. Mais ce n'est pas forcément simple !
Quelques explications pour montrer le chemin à qui n'a pas peur de s'y risquer. Attention, la manip n'est pas sans danger pas plus qu'elle n'est pour les débutants ! Il y a mille manières de se retrouver avec une machine non-bootable et toutes ses données perdues !
J'en décris ici seulement l'idée, les grandes lignes. Des points de détail peuvent manquer, alors encore une fois, attention à vos données ! You've been warned !
Je pars d'un portable comportant une installation quasi-standard d'Ubuntu 7.10 Gutsy Gibbon, avec cependant un swap chiffré selon la méthode expliquée dans mon précédent article, et également un /tmp + /var/tmp chiffré selon la méthode décrite dans un article que je n'ai pas encore écrit.
Le jeu consiste à chiffrer l'ensemble des filesystems sur la base d'une LVM, sans bien sûr rien perdre de mon installation, ni devoir réinstaller à blanc. Simplement en déplaçant l'installation sur un disque externe avant de la remettre sur le portable dont le filesystem aura été préalablement chiffré.
J'ai commencé par prendre un disque dur externe USB que j'ai entièrement effacé et gavé de données aléatoires avec un beau
nice dd if=/dev/urandom of=/dev/sdb bs=1M
(ça dure des heures...)
À la suite de quoi, j'ai partitionné le disque externe en 3 bouts :
- Un petit /boot de 100 Mo en ext3
- Une grosse partition non formatée de type 83 (Linux) de "tout le disque moins 2 Go"
- Une partition non formatée de type 82 (Linux swap)
Ceci fait, j'ai monté la première partition et y ai copié mon /boot d'un coup de rsync -ax
Ensuite de quoi, j'ai utilisé cryptsetup luksFormat puis mke2fs pour faire de la deuxième partition du disque externe une partition chiffrée LUKS, que j'ai montée (sous un point de montage temporaire /mnt/ext2).
Après quoi, j'ai recopié l'ensemble du système du portable sur cette partition chiffrée du disque externe d'un nouveau coup de rsync (les différentes partitions séparées du disque interne rassemblées en une seule dans le disque externe).
J'obtiens donc une copie de sauvegade complète et chiffrée (sauf /boot) de mon portable sur le disque USB externe.
Vient le plus délicat : Rendre l'installation chiffrée bootable et utilisable directement depuis le disque externe,
- Monter le /boot du disque externe sous la structure chiffrée :
mount -t ext3 -o noatime /dev/sdb1 /mnt/ext2/boot - Créer un /dev/null bidon sous la nouvelle installation :
mknod /mnt/ext2/dev/null c 1 3 - Monter le /dev sous l'installation externe, de manière "fantôme" :
mount --bind /dev /mnt/ext2/dev - Se chrooter dans l'installation :
chroot /mnt/ext2 - Une fois là, monter
/proc:mount -t proc proc /proc - ...et
/sys:mount -t sysfs sysfs /sys - Adapter
/etc/crypttabà la structure du disque externe : Créer une entrée pour le swap chiffré sur le disque externe, et une autre pour la "racine" chiffrée :cswap /dev/sdb3 /dev/urandom size=128,swapcrootfs /dev/sdb2 none luks, check
- Adapter
/etc/fstabde même à la structure des points de montage : un /boot non chiffré, une racine (/dev/mapper/crootfs), un swap chiffré comme dans mon précédent article - Se rendre ensuite dans
/boot/grubet modifier menu.lst : Y modifier le "root=" pour pointer sur le root filesystem chiffré. - Installer grub sur le MBR du disque externe de manière à le rendre bootable.
A ce stade, il suffit normalement de régénérer l'initramfs avec
update-initramfs -v -u
...pour avoir fini le boulot.
Je me suis cependant aperçu qu'un des scripts de démarrage d'Ubuntu était incorrect et n'autorisait pas le boot sur un disque externe USB chiffré, trop lent à être "vu" par le noyau au démarrage.
J'ai donc écrit un patch pour ce script (/usr/share/initramfs-tools/scripts/local-top/cryptroot), patch que je joint en annexe et que je vous conseille d'installer (il ne peut pas faire de mal ;-) avant de lancer "@@update-initramfs -v -u"
Ceci fait, il ne reste plus qu'à...
cd /umount /procumount /sysexit(nous sort du chroot)umount /mnt/ext2/devumount /mnt/ext2/bootsyncumount /mnt/ext2sync- Fermer le volume chiffré LUKS (
cryptsetup luksClose, etc...) du disque externe
...Et on peut rebooter proprement.
Sélectionner par le BIOS le démarrage depuis le disque USB, on doit alors avoir un beau grub qui propose le démarrage sur le disque externe chiffré.
Le mot de passe de montage de la partition LUKS sera demandé automatiquement grâce aux scripts prévus à cet effet. Elle est pas belle, la vie ?
À ce stade, on a créé une installation de Linux entièrement chiffrée sur un disque externe bootable, que l'on devrait pouvoir d'ailleurs utiliser pour booter un peu n'importe quelle machine et y retrouver son environnement Ubuntu complet ! (modulo les possibles problèmes causés par des hardwares différents, notamment carte graphique...)
Une fois que l'on a vérifié que notre installation externe est complète et marche parfaitement, et qu'on peut donc utiliser le portable sans son disque interne, on va pouvoir totalement effacer celui-ci, y préparer notre installation chiffrée un peu de la même manière que pour le disque externe, et redéménager dans l'autre sens.
Commençons par effacer totalement le disque dur du portable avec :
nice dd if=/dev/urandom of=/dev/sda bs=1M
(Comme précédemment, ça durera des heures...)
Pour l'organisation du disque proprement dit, chiffré là encore à l'exception de /boot, je me suis cette fois largement inspiré de l'excellent EncryptedFilesystemLVMHowto, dont je n'ai cependant lu que les points essentiels et que j'ai largement adapté à ma sauce, notamment :
- Répartition en plusieurs volumes logiques (root filesystem,
/var,/home, etc...) - J'ai conservé un swap et un
/tmpchiffrés "selon mon ancienne méthode" sur des partitions séparées en dehors de la LVM, afin de pouvoir les chiffrer avec des clés aléatoires changées automatiquement à chaque boot.
Une fois le filesystem chiffré installé et monté, il reste à recopier tout le système comme précédemment, mais dans l'autre sens, à grands coups de rsync.
Puis de nouveau la partie délicate : Chroot, adaptation de /etc/crypttab, /etc/fstab, /boot/grub/menu.lst, installation de grub dans le MBR du disque, régénération de l'initramfs.
Ceci fait, démonter tous les volumes du disque interne, arrêter la LVM, désactiver sa partition chiffrée, et il n'y a plus qu'à rebooter !
On obtient enfin un portable au filesystem entièrement chiffré, qui demande gentiment la phrase secrète durant le boot, et est totalement inexploitable sans elle. Et ça marche du Feu de Dieu !
Prochaine étape : Comme mon portable comporte un lecteur de carte SD (comme les appareils photos numériques), j'envisage, plutôt que de devoir me peler la phrase secrète à chaque boot, de mettre un fichier-clé sur une telle carte et d'utiliser celle-ci comme "clé de contact" de mon portable : Carte SD insérée, il bootera tout seul, carte SD absente, il ne bootera pas, point. La carte SD tient dans la poche et dans le portefeuille :-)









Commentaires
:
Tu crois pas que le dernier paragraphe gâche tout? Suffira d'avoir la carte, non?
Euh, c'est quoi un "boot", ça veut dire quoi, "booter"? C'est pas un mot secret pour otage? Paskon le trouve aussi souvent dans ton texte que "otage" dans nos médias collabos.
:-) T'avais parlé à tes psys de ta propension à chiffrer toute ta production ? Est-ce que ça a un rapport avec le stade anal ?
@mc :
L'un des avantage de LUKS est de permettre l'utilisation de différentes méthodes d'authentification, ou d'en changer assez facilement par la suite.
Selon ce qu'on veut protéger et comment, selon que l'on veut ou non que la machine soit capable de booter sans intervention humaine au clavier, on peut utiliser la méthode que l'on préfère. On peut aussi utiliser une "clé de contact" chiffrée exigeant une phrase secrète, si l'on a un niveau de paranoïa élevée.
Peut aussi se poser pour certains la question de rendre le système définitivement inaccessible. Est-il plus facile de "se forcer" à oublier une "phrase secrète", ou de détruire une petite carte flash ? ;-)
LUKS permet aussi de définir plusieurs phrases secrètes différentes pouvant déverrouiller le container. Ça présente un intérêt si la machine doit pouvoir être utilisée par plusieurs personnes, dont aucune n'aura besoin de connaître la phrase secrète d'un autre. Avec pour inconvénient que la protection du système ne sera pas plus forte que la phrase secrète la plus "faible" (i.e. si l'un des utilisateurs se contente de mettre son prénom...).
Booter un système signifie le démarrer et lancer son système d'exploitation jusqu'au point où le système devient utilisable...
@Yogi :
Je m'intéresse au chiffrement (pour ce qui concerne sa mise en oeuvre, je n'ai pas les compétences mathématiques nécessaires à la cryptographie théorique) depuis une quinzaine d'années.
Ce sont des outils qui peuvent s'avérer vitaux pour des journalistes, membres d'O.N.G., militants... dans des pays pourris dont on n'est jamais certain que le nôtre ne fera pas un jour partie... Il me semble important d'en démocratiser l'usage.
D'autre part, toute personne qui utilise fréquemment un ordinateur sera tôt ou tard amené à y stocker des informations plus ou moins personnelles ou confidentielles dont on n'aimerait pas qu'elles se promènent dans la nature...
Si tu te fais chouraver ton portable, tu n'as peut-être pas envie que le voleur hérite également de tes photos personnelles, de tous tes mails, et puisse accéder à tous les sites web pour lesquels tu as enregistré dans ton navigateur tes login/password, que tu n'auras bien sûr pas pris la peine de protéger...
Enfin, la sécurité informatique est l'un des aspects de mon métier, et s'intéresser à ces questions sensibilise aux risques et au manque cruel de sécurité de la plupart des systèmes informatiques - mêmes ceux stockant et échangeant des données personnelles...
J'ai passé les détails, mais est-ce que tu empêches de booter sur un disque externe ?
Parce que bon, c'est le plan classique : on boote sur un disque externe, on formate le disque interne et on installe dessus un bon vieux doz pour revendre le portable vite fait...
@Herve :
Bien sûr, mais cette protection est parfaitement illusoire. Pour ce qui concerne la revente d'une machine volée, rien n'est plus facile que d'effacer le CMOS et de supprimer ainsi toute protection de cet ordre ou mot de passe de BIOS, etc.
Celui qui veut reformater ton disque peut aussi tout simplement l'extraire de la machine et le reformater sur une autre.
Le chiffrement concerne la protection des données qui sont sur la machine, et empêche de l'utiliser telle quelle. Mais si tu te la fais tirer, rien n'empêchera un malin d'en faire ensuite ce qu'il voudra - sauf qu'il n'aura ni ton O.S., ni tes données.
joli billet technique.
J'ai juste une question : quid de la ressource générale nécessaire et du temps ?
En gros, tout ce qui fonctionne doit être déchiffré après lecture et avant utilisation, et vice versa.
Ça doit un peu plomber les "temps de réponse, non ?" tu as du chiffre la dessus ?
@vicnent : En termes de consommation mémoire, ce sont juste quelques modules de noyau qui font le boulot pour un prix très raisonnable : Moins de 128 Ko de mémoire.
En termes de perfs, le surcoût de chiffrement/déchiffrement à la volée est très tolérable avec les processeurs modernes, en comparaison de la puissance de calcul bouffée par les applications par ailleurs.
Depuis que j'ai passé mon portable en "tout chiffré", je ne constate pas de différence de performance flagrante, ou alors est-elle minime, du moins en utilisation bureautique / internet ordinaire. Le temps de boot complet du système ou de démarrage de KDE par exemple me semble globalement identique.
Il est probable que des applications "disk-intensive" comme de la grosse base de données en souffriraient davantage. Quoi qu'il en soit, le cache-disque de Linux est aussi là pour beaucoup relativiser l'impact en termes de performances.
Encore faut-il utiliser les mêmes précautions pour toute action faite avec ce portable. Par exemple, éviter le wifi ou alors en sécuriser l'accès au maximum (quoiqu'on en dise, un bon rj45 sera toujours le mieux pour les paranos) lorsqu'on travaille dessus. J'imagine que le chiffrement se fait une fois le volume démonté, donc pendant qu'on travaille dessus, l'accès à ces données est rendu possible à quelqu'un qui tutoierait un routeur d'un peu trop près.
Me trompe-je ?
(3):
C'est très sympa d'avoir renoncé à te f.... de moi, l'occasion était bonne.
Sur la question de la carte et de sa destruction éventuelle, je te suis bien. Je suppose qu'on est là dans un cas extrême, t'es si pessimiste que ça sur l'avenir?
:
Ah, excuses, j'ai ma réponse... le pire c'est que je suis d'accord.
@Vince :
Bien sûr. La sécurité doit toujours être envisagée de manière globale et en profondeur.
>
Ne faire aucune confiance à du WEP, évidemment, mais du WPA ou WPA2 AES-CCMP, ça te laisse quand même dormir plus tranquille.
Sinon, tu peux toujours faire passer un VPN dans du Wi-Fi, il y a même des firmwares de routeurs Wi-Fi qui l'implémentent.
>
Ça dépend de ce que tu as avant et après le RJ45 ;-)
Cet humble serveur a été conecté via Wi-Fi de 2003 à 2006, et est toujours connecté à une patte Ethernet d'un routeur "à antennes"...
>
Non, le chiffrement/déchiffrement se fait à la volée. Aucune donnée en clair n'atteint jamais le disque dur.
>
Là c'est exact, quand le volume est monté ses données sont accessibles sous les mêmes conditions que celles de n'importe quel filesystem Linux ordinaire. D'où l'importance de la sécurité online. iptables est ton ami.
La crypto, c'est de la rigolade. Je viens de me taper en rentrant du bureau (crevé) le démontage-remontage intégral du mécanisme de la serrure 3-points de la porte de mon appart, qui se mettait à coincer et à vouloir nous enfermer dehors... Toute la tranche de la porte à démonter de haut en bas.
Nettoyage de la merde, dégraissage, regraissage, remontage, ça marche toujours pas, redémontage, ajustement à la pince d'une petite pièce en cours d'usure et qui était la coupable... Remontage, ça marche.
2 heures et demie de galère, les nains sont couchés et j'ai toujours pas bouffé :-/
Les serrures informatiques sont moins chiantes que les serrures mécaniques. Surtout le soir.
Mais quand je pense à ce que je viens d'économiser sur l'escroc que je n'ai pas appelé et qui m'aurait pris 2000 Euros pour changer la totale, je sourirais presque.
Merci Swâmi.
Mon problème à moi , pour avoir un poste sain et sécurisé sous Linux, reste encore l'interface clavier-chaise...parfois...
Et contre ça, malheureusement, même ta sagesse ne pourra rien. Mais j'apprends, de plus en plus chaque jour.
Va falloir que je pense à iptables, configurer un firewall de compet', et mettre tous tes conseils en pratique.
Bon petit article. J'ai moi même chiffré également mon disque dur en installant Debian qui offre cette option à l'installation : très pratique ! J'avais également avant cela réussi à faire un montage automatique avec une clé USB de mon /home chiffré, mais je ne sais pas si c'est possible tout le disque étant chiffré (en effet, j'utilisais une règle udev donc il faut que /etc soit monté ;-)