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
- Installation de Dropbear
- Configuration de Dropbear
- (Optional) Configuring a static IP with initramfs
- Configuration des clés SSH
- Déchiffrer la partition
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"
-I 180
: Déconnecte la session si aucun trafic n’est transmis ou reçu en 180 secondes.-j
: Désactive le transfert de port local ssh.-k
: Désactive également le transfert de port distant.-p 2222
: Changer le port par défaut a savoir 22.-s
: Désactiver les connexions par mot de passe. Nous allons mettre en place des clés SSH sur un système Linux/Unix pour l’authentification afin de réduire la surface d’attaque.
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