DHCP et son relais expliqués : DORA, option 82, snooping

Un hôte se branche sur une prise murale, sans adresse ni passerelle. En quelques millisecondes, il reçoit une adresse IP, un masque de sous-réseau, une route par défaut et deux résolveurs DNS. Quand DHCP fonctionne, personne ne le remarque. Quand il échoue, ou qu'une machine non autorisée répond en premier, des étages entiers tombent hors ligne ou font transiter leur trafic par un attaquant.

Au programme : les quatre étapes de DORA, les minuteries de renouvellement du bail, pourquoi les routeurs ne transmettent pas les broadcasts, comment un relais DHCP transforme un broadcast en paquet unicast, l'option 82, le DHCP snooping, et la configuration classique chez Cisco, Huawei, Aruba et Juniper.

La séquence DORA

DHCP fonctionne sur UDP, sur les ports 67 et 68. Le client commence par un Discover, un broadcast qui cherche un serveur DHCP disponible. Les serveurs répondent par un Offer : une adresse IP proposée, un masque de sous-réseau et une durée de bail.

Le client choisit une offre et diffuse un Request, annonçant son choix pour que les autres serveurs libèrent leurs réservations. Enfin, le serveur retenu renvoie un Acknowledge, qui inscrit l'association dans sa base. Tant que l'ACK n'est pas arrivé, le client ne peut pas utiliser l'adresse.

Le paquet DHCP

Dans la charge utile DHCP, le client s'identifie par l'adresse MAC de sa carte dans le champ chaddr. L'échange est suivi par un numéro xid, pour que les réponses correspondent à la bonne requête. Quand le serveur répond, l'adresse attribuée est placée dans yiaddr, pour your IP address, votre adresse IP.

Le reste des paramètres voyage dans le champ Options : l'option 53 pour le type de message, l'option 1 pour le masque de sous-réseau, l'option 3 pour la passerelle par défaut, l'option 6 pour le DNS, et l'option 51 pour la durée du bail en secondes.

Le renouvellement et les minuteries

Une adresse DHCP est prêtée, jamais possédée. Deux minuteries régissent le bail. À la minuterie T1, par défaut à 50 pour cent de la durée du bail, le client envoie un DHCPREQUEST en unicast directement au serveur qui a accordé l'adresse. Si ce serveur répond par un ACK, la minuterie est réarmée.

Si aucune réponse n'arrive à la minuterie T2, fixée à 87,5 pour cent du bail, le client cesse l'unicast et diffuse un DHCPREQUEST vers n'importe quel serveur DHCP joignable. Si le bail expire sans ACK, l'hôte doit cesser aussitôt d'utiliser l'adresse et relancer DORA depuis le début.

Pourquoi les broadcasts ne traversent pas un routeur

Les premiers paquets Discover et Request sont des broadcasts de niveau 2, envoyés à 255.255.255.255, et les routeurs ne transmettent pas les broadcasts de niveau 2. Si une entreprise compte cinquante VLAN, placer un serveur DHCP dédié dans chaque sous-réseau coûte cher et devient ingérable.

Pour garder les serveurs DHCP centralisés dans un VLAN d'administration commun ou dans un centre de données, le routeur en bordure de chaque sous-réseau doit faire le pont.

L'agent relais DHCP et giaddr

C'est le rôle de l'agent relais DHCP, souvent appelé IP helper. Le routeur écoute les trames de broadcast DHCP sur ses interfaces côté client. Lorsqu'il reçoit un Discover ou un Request, il réécrit le paquet en un paquet UDP unicast adressé au serveur DHCP central.

Point essentiel : l'agent relais inscrit l'adresse de sa propre interface dans le champ giaddr, la gateway IP address. Quand le serveur reçoit le paquet, il lit giaddr pour savoir à quel sous-réseau appartient le client, et choisit le bon pool d'adresses.

L'option 82 : informations de l'agent relais

Dans les grands réseaux, connaître le sous-réseau ne suffit pas. L'agent relais peut ajouter l'option 82 DHCP avant de transmettre le paquet. L'option 82 porte deux sous-options clés : le Circuit ID, qui identifie le port de switch et le VLAN exacts où l'utilisateur s'est connecté, et le Remote ID, qui identifie le switch lui-même.

Les administrateurs peuvent ainsi appliquer des politiques précises ou des pools d'adresses fixes selon la prise murale physique exacte, même dans un environnement dynamique.

Le serveur DHCP pirate

Comme le Discover DHCP est un broadcast ouvert, n'importe quelle machine du VLAN peut répondre. Si un attaquant branche un serveur DHCP pirate, ou qu'un utilisateur raccorde un routeur domestique, cet équipement entre en course avec le serveur légitime.

Si l'Offer pirate l'emporte, l'hôte reçoit une passerelle par défaut et un serveur DNS contrôlés par l'attaquant. Le client fait alors transiter tout son trafic par l'attaquant, sans déclencher la moindre alerte.

Le DHCP snooping

La défense contre les serveurs pirates est le DHCP snooping sur le switch d'accès. Le DHCP snooping classe chaque port du switch dans l'un de deux états, fiable ou non fiable. Les ports d'uplink face à l'infrastructure légitime et aux serveurs DHCP sont déclarés fiables ; les ports d'accès côté utilisateur sont non fiables.

Si un message de serveur, comme un Offer ou un ACK DHCP, arrive sur un port d'accès non fiable, le switch supprime aussitôt le paquet, et peut désactiver le port.

La table de binding du snooping

À mesure que le trafic DHCP légitime traverse le switch, le DHCP snooping observe l'échange et construit une table de binding dynamique. Chaque entrée consigne l'adresse MAC du client, l'IP attribuée, la durée du bail, le VLAN et le port physique exact.

Cette table de binding est le socle de la sécurité de niveau 2 : la Dynamic ARP Inspection et l'IP Source Guard s'appuient entièrement sur elle pour empêcher l'empoisonnement ARP et l'usurpation d'adresse IP.

Le piège de l'option 82 sur port non fiable

Quand les switchs d'accès insèrent l'option 82 et transmettent le trafic vers un switch de distribution en amont où le DHCP snooping est activé, un piège classique apparaît. Par défaut, beaucoup de switchs suppriment tout paquet DHCP contenant déjà l'option 82 avec un giaddr à zéro lorsqu'il arrive sur un port non fiable.

À moins d'autoriser explicitement les paquets option 82 non fiables, ou de désactiver l'insertion sur les switchs d'accès, tous les clients en aval n'obtiennent aucune adresse.

Relais et snooping chez quatre constructeurs

Sur Cisco, activez le relais avec ip helper-address sur la SVI, et le snooping avec ip dhcp snooping puis ip dhcp snooping vlan. Sur Huawei, configurez dhcp select relay et dhcp relay server-ip, avec dhcp snooping enable au niveau global.

Sur Aruba AOS-CX, appliquez ip helper-address sous l'interface de VLAN et activez dhcp-snooping. Sur Juniper Junos, définissez le relais sous forwarding-options dhcp-relay et activez dhcp-security avec des interfaces de confiance.

Ce que NacTrack montre

Repérer une helper address mal configurée, ou un port de DHCP snooping oublié, sur des centaines de switchs prend des heures à la main. NacTrack se connecte en SSH, en lecture seule, lit les helper addresses, les pools DHCP et les états de snooping sur Cisco, Huawei, Aruba et Juniper, et signale les sous-réseaux sans redondance de relais et les ports d'accès sans protection snooping.

Voir ce protocole sur votre réseau

NacTrack lit ces protocoles sur vos équipements, en SSH et en lecture seule.