Déchiffrement à distance de Luks

 Published on 7 Sep 2022 .  Filed in Notes .  1054 words

Sous Linux, nous chiffrons nos partitions et l’intégralité du disque à l’aide de Linux Unified Key Setup-on-disk-format (LUKS) pour la sécurité et la confidentialité. Nous déverrouillons le disque protégé (par LUKS) en fournissant une phrase de passe au démarrage. Donc, pour pouvoir déchiffrer, il faut être devant l’ordinateur pour entrer la phrase secrète.

Nous avons un programme qui résout ce problème en permettant de décrypter les partitions LUKS à distance. Voyons comment déverrouiller la partition LUKS à l’aide des clés Dropbear SSH sous Linux au démarrage.

Note : Veuillez noter que ce guide suppose que vous disposez d’une partition /boot distincte qui n’est pas chiffrée.

Sommaire

Comment fonctionne le déverrouillage à distance

Le noyau charge ce qu’on appelle l’image initramfs. À l’intérieur de cette image se trouvent les fichiers,modules et scripts nécessaires pour déchiffrer/monter la partition racine.

Maintenant, si nous pouvions en quelque sorte exécuter un serveur SSH dans initramfs et le rendre accessible sur le réseau, nous pourrions nous y connecter pour déverrouiller la partition racine à distance.

Comme initramfs s’exécute en mémoire, nous sommes limités en termes de taille de mémoire et de complexité des programmes en cours d’exécution. C’est la principale raison pour laquelle Dropbear est utilisé comme serveur SSH et BusyBox, pour fournir un shell et des utilitaires.

Installation de Dropbear

dropbear-initramfs est un package qui installe un serveur SSH léger (dropbear) dans la partition de démarrage (/boot) non chiffrée afin que nous puissions nous connecter à distance et entrer la phrase secrète pour LUKS et continuer le démarrage.

Installer dropbear-initramfs après avoir mis à jour l’index des packages apt. ( L’index des packages apt est une base de données qui stocke la liste des packages logiciels du repository ) :

$ sudo apt install dropbear-initramfs
dropbear: WARNING: Invalid authorized_keys file, SSH login to initramfs won't work!

$ dropbear -V
Dropbear v2020.81

Ne vous inquiétez pas de cet avertissement. Nous générons les clés un peu plus tard.

Configuration de Dropbear

Note : Les versions antérieures de dropbear-initramfs stockaient les fichiers de configuration sous /etc/dropbear/initramfs. Dans la version que nous utilisons dans ce tutoriel (v2020.81) a été déplacé vers /etc/dropbear-initramfs. Remplacez le chemin en fonction de votre version installée.

Ouvrez le fichier /etc/dropbear-initramfs/dropbear.conf dans votre éditeur de texte préféré :

sudo nano /etc/dropbear/initramfs/dropbear.conf

Dans ce fichier, vous remarquerez que la ligne DROPBEAR_OPTIONS est commentée. Il n’est pas nécessaire de modifier cela, mais nous allons spécifier quelques options. Assurez-vous de décommenter la ligne pour que nos modifications prennent effet :

DROPBEAR_OPTIONS="-I 180 -j -k -p 2222 -s"

D’autres options sont disponibles et peuvent être trouvées dans les pages de manuel de dropbear :

man dropbear

(Optional) Configuring a static IP with initramfs

Vous utilisez probablement déjà une adresse IP statique pour vous connecter à votre serveur. Cela peut être configuré sur votre routeur ou le serveur DHCP en utilisant la réservations DHCP ou localement dans la configuration réseau de votre serveurs.

Si vous avez fait ce dernier, nous devons indiquer à initramfs quelle adresse IP utiliser afin que nous puissions nous y connecter plus tard (sinon DHCP attribuera la prochaine adresse IP disponible dans sa plage).

Ouvrez le fichier /etc/initramfs-tools/initramfs.conf et en bas nous insèrerons :

IP=<local-ip>::<gateway-ip>:<subnet-mask>

Il y a deux deux-points (::) entre l’adresse IP et la passerelle. C’est parce que nous omettons une option car elle ne s’applique pas. Pour plus d’informations sur les options disponibles pour IP, consultez la section nfsroot ici sous la ligne Kernel command line.

Si vous avez plusieurs interfaces réseau, vous pouvez spécifier l’interface à utiliser :

IP=<local-ip>::<gateway-ip>:<subnet-mask>::<interface>

Encore une fois, notez les deux points entre le masque de sous-réseau et l’interface. C’est parce que nous omettons l’option hostname.

Ex :

IP=192.168.0.12::192.168.0.254:255.255.255.0::eth0

Maintenant que nous avons apporté des modifications à dropbear-initramfs et initramfs, nous devons mettre à jour notre image de démarrage (initramfs) en exécutant :

sudo update-initramfs -u

Configuration des clés SSH

Nous avons maintenant configuré le système pour démarrer un serveur dropbear SSH au démarrage (juste avant de demander notre mot de passe LUKS) mais nous n’avons aucun moyen d’y accéder car nous avons désactivé l’authentification par mot de passe. Il faut donc configurer les clés pour pouvoir s’authentifier.

Nous allons générer de nouvelles clés SSH spécifiquement pour une utilisation avec dropbear. Il est recommandé de le faire sur un PC client (la clé privée ne doit pas être transmise) puis de copier la clé publique sur le serveur.

ssh-keygen -t ed25519 -f ~/.ssh/unlock_dropbear
ssh-keygen -t ed25519 -f ~/.ssh/dropbear
Generating public/private ed25519 key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

Maintenant que vos clés ont été générées, copions votre clé publique sur le serveur dont vous souhaitez prendre le contrôle a distance afin de chiffrer la partition LUKS :

scp ~/.ssh/id_dropbear.pub user@192.168.0.12:

Note : je n’ai pas fourni de chemin après le 192.168.0.12: ce qui signifie que le fichier sera placé dans notre chemin par défaut qui est par défaut notre répertoire personnel /home/user.

Enfin, nous allons nous connecter à notre serveur, ajouter cette clé publique à dropbear et mettre à jour initramfs :

ssh user@192.168.0.12
cat ~/id_dropbear >> /etc/dropbear/initramfs/authorized_keys
sudo update-initramfs -u

Enfin redémarrez le serveur :

sudo reboot

Déchiffrer la partition

Connectons-nous au serveur via SSH en utilisant la clé précédemment:

ssh -i ~/.ssh/initramfs_keys/unlock_dropbear -p 2222 -o "HostKeyAlgorithms ssh-ed25519" -o UserKnownHostsFile=~/.ssh/know_hosts.initramfs" root@192.168.0.12

Une fois connecté, exécutez la commande suivante pour déverrouiller la partition root et peut-être d’autres comme swap :

cryptroot-unlock

(Optional) Définir les paramètres dans le fichier ~/.ssh/config

Ou nous pouvons ajouter le SSH ci-dessus dans le fichier ~/.ssh/config afin d’éviter de taper la commande à chaque fois que nous devons déverrouiller la partition:

Host decrypt_myserver
	Hostname 192.168.0.12
	User root
	Port 2222
	UserKnownHostsFile ~/.ssh/know_hosts.initramfs
	IdentityFile ~/.ssh/initramfs_keys/unlock_dropbear

Puis suffit de exécuter la commande :

ssh decrypt_myserver
cryptroot-unlock