enregistrement sshfp du protocole dns

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é.

enregistrement sshfp du protocole DNS

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é

Une réflexion au sujet de « Enregistrement SSHFP du protocole DNS : mise en place »

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *