Enregistrement SSHFP du protocole DNS : mise en place
L’enregistrement SSHFP du protocole DNS permet de sécuriser les communications. Le protocole DNS ( Domain Name System) est l’un des protocoles majeurs liés à l’histoire d’Internet. Il a joué (et joue toujours) un rôle important dans la démocratisation de l’accès au réseau des réseaux. En permettant aux internautes de faire abstraction d’une partie des spécificités techniques d’Internet, le DNS est la véritable pierre angulaire entre le réseau et ses utilisateurs. Nous allons voir dans cet article (en deux parties) que les usages de ce protocole (qui a déjà soufflé ses 30 bougies) continuent d’évoluer et offrent de nouvelles possibilités très intéressantes, notamment en termes de sécurité.
Introduction : le protocole DNS
Le DNS est principalement connu pour ses enregistrement de type A, qui permettent de traduire des noms de domaine (comme blog.syloe.com par exemple) en adresses IPv4 (158.255.101.198 par exemple) permettant de contacter des serveurs sur Internet.
On peut par exemple utiliser la commande host pour effectuer cette traduction :
$ host blog.syloe.com blog.syloe.com has address 158.255.101.19
Mais de nombreux autres usages sont possibles. On peut citer les enregistrements de type AAAA pour les adresses IPv6, les enregistrements MX pour les mails, ou encore les enregistrements CNAME qui sont des alias vers d’autres noms de domaine.
Nous allons ici nous intéresser à quelques enregistrements DNS pouvant permettre d’augmenter la sécurité d’une communication : les enregistrements SSHFP et TLSA. Ce dernier enregistrement permet notamment d’établir une connexion TLS sans qu’un certificat signé par une autorité de certification ne soit utilisé. Ces certificats étant généralement payants, de belles économies peuvent donc être réalisées en utilisant cette technique.
L’enregistrement SSHFP du protocole DNS : principe et mise en place
Principe de l’enregistrement SSHFP
Tous les administrateurs systèmes utilisant ssh ont déjà eu affaire au message d’alerte renvoyé par la commande ssh lors de la première connexion à un serveur :
The authenticity of host 'mon.serveur.domaine.fr (1.2.3.4)' can't be established. ECDSA key fingerprint is 3e:9d:65:85:e9:b6:5a:bc:9c:41:5b:72:26:e8:5b:2d. Are you sure you want to continue connecting (yes/no)?
Ce message informe que l’empreinte de la clé publique du serveur ne fait pas partie de la base des empreintes connues par le client. La bonne pratique est alors de vérifier par un autre canal sécurisé que cette empreinte correspond bien à celle de la clé effectivement présente sur le serveur. En pratique, une telle vérification est souvent fastidieuse : obtenir l’empreinte d’une source fiable (un mail signé avec PGP par exemple) ou accéder au serveur physiquement est assez chronophage. On se résoud alors souvent à valider l’empreinte sans la vérifier et en priant pour que personne ne soit en train de mener une attaque de type «Man in the middle» au même moment.
C’est ici que l’enregistrement SSHFP du protocole DNS se révèle utile : Il permet de s’appuyer sur l’infrastructure existante du DNS pour récupérer l’empreinte de la clé. Si le serveur auquel on se connecte fait partie d’une zone signée avec DNSSEC, alors on dispose d’un moyen sécurisé pour récupérer cette empreinte.
Mise en place
Pour créer un enregistrement de type SSHFP, la première étape consiste à calculer l’empreinte (ou «hash») de la clé publique du serveur SSH. Cette commande calcule le hash SHA-256 de la clé passée en paramètre :
awk '{print $2}' /etc/ssh/ssh_host_rsa_key.pub | openssl base64 -d -A | openssl sha256
Le hash obtenu ressemble à ceci :
7085af85cb096780b2cabc80dc66106740267c051c53601464e17ad0f4f64cb7
On va ensuite construire notre enregistrement SSHFP du protocole DNS :
mon.serveur IN SSHFP 1 2 7085af85cb096780b2cabc80dc66106740267c051c53601464e17ad0f4f64cb7
- mon.serveur correspond au nom DNS par lequel on accède au serveur
- IN SSHFP précise le type d’enregistrement
- 1 correspond au type de la clé : 1 pour RSA, 2 pour DSA et 3 pour ECDSA
- 2 correspond à l’algorithme de signature : 1 pour SHA-1 et 2 pour SHA-256
Une fois l’enregistrement DNS ajouté à notre zone, on peut vérifier son fonctionnement avec l’utilitaire dig par exemple :
dig +short mon.serveur.domaine.fr SSHFP 1 2 7085af85cb096780b2cabc80dc66106740267c051c53601464e17ad0f4f64cb7
L’enregistrement est bien accessible. Il ne nous reste plus qu’à configurer notre client ssh pour vérifier la présence de l’empreinte dans le DNS.
Le client openssh dispose déjà d’une fonctionnalité permettant de vérifier automatiquement la présence d’un enregistrement SSHFP correspondant au serveur auquel on se connecte. Pour l’activer, il suffit de placer cette option dans son fichier de configuration ( ~/.ssh/config) :
VerifyHostKeyDNS=yes
Puis de se connecter au serveur :
ssh mon.serveur.domaine.fr Matching host key fingerprint found in DNS. user@mon.serveur.domaine.fr's password:
Le client SSH nous informe qu’il a trouvé l’empreinte correspondante dans le DNS, et qu’il a authentifié le serveur de manière sécurisée.
Un autre enregistrement du protocole DNS existe pour sécuriser vos communications : le DANE / TLSA, à lire dans le prochain article.
Sécurisez vos communications avec le protocole en faisant appel à Syloé
- Pour voir notre offre de formation DNS, suivez ce lien.
- Pour voir notre offre de formation en sécurité web, suivez ce lien.
Enregistrement TLSA du protocole DNS : mise en place - Blog Syloé
[…] DNS, qui est également un moyen de sécuriser vos communications. Nous vous avions parler dans un précédent article de l’enregistrement SSHFP du protocole DNS. Ici on parle […]