LLDP et CDP expliqués : la découverte des voisins

Avant de faire confiance à un schéma réseau, interrogez les switchs. Toutes les trente secondes environ, la plupart d'entre eux indiquent à leur voisin direct qui ils sont, de quel port il s'agit et comment les joindre. C'est ce petit message qui vous apprend ce qui est réellement branché sur le port 47.

C'est aussi exactement ce contre quoi met en garde le propre guide de durcissement de Cisco : n'importe qui sur le port peut le lire. Au programme : LLDP et CDP, ce qu'ils transportent, leurs temporisateurs, comment chaque constructeur les active, et où les désactiver.

Ce qu'ils sont

LLDP, le Link Layer Discovery Protocol, est la norme IEEE 802.1AB. CDP, le Cisco Discovery Protocol, appartient à Cisco et est propriétaire. Tous deux font le même travail : un équipement se décrit à l'équipement situé à l'autre extrémité de chaque lien.

Ils sont unidirectionnels. Un équipement annonce sans jamais acquitter, et il ne retransmet pas ce qu'il reçoit. Chaque table de voisins est construite uniquement à partir de ce qui arrive sur chaque port.

La trame

LLDP circule directement sur Ethernet, ethertype 88CC, envoyé à l'adresse multicast 01-80-C2-00-00-0E, l'adresse nearest bridge, qu'aucun bridge conforme à la norme ne retransmet. LLDP n'atteint donc jamais que l'équipement suivant.

Trois champs sont obligatoires et viennent en premier : le chassis ID, le port ID et le time to live. CDP utilise sa propre adresse multicast, 01-00-0C-CC-CC-CC, avec une encapsulation SNAP.

Ce qu'il transporte

Viennent ensuite des champs optionnels, chacun composé d'un type, d'une longueur et d'une valeur (TLV). Description du port, nom du système, description du système, capacités comme bridge, routeur ou téléphone, et une adresse de management. Puis des extensions propres à chaque organisation.

Le jeu IEEE 802.1 transporte le port VLAN ID et les noms de VLAN, et le jeu 802.3 transporte la vitesse et le duplex, l'agrégation de liens, la taille maximale de trame et le power over Ethernet.

Les temporisateurs

Par défaut, LLDP émet toutes les 30 secondes avec un hold multiplier de 4 : un voisin est donc conservé 120 secondes après son dernier message. Cisco, Huawei, Aruba et Juniper s'accordent sur ces valeurs.

CDP émet toutes les 60 secondes, avec un hold time de 180. Et un message dont le time to live vaut zéro fait oublier immédiatement l'entrée au voisin.

LLDP-MED

LLDP-MED, issu de la norme TIA 1057, étend LLDP aux terminaux comme les téléphones IP : une network policy avec le VLAN voix, la négociation de puissance, l'inventaire et la localisation pour les appels d'urgence.

Cisco ne commence à envoyer du MED qu'après en avoir reçu du terminal. Aruba précise que MED n'est pas destiné aux liens entre équipements réseau.

Des valeurs par défaut différentes

Ici, les constructeurs divergent. Sur Cisco Catalyst et Nexus, LLDP est désactivé tant que vous ne l'activez pas, alors que CDP est actif partout. Les switchs Huawei actuels activent LLDP globalement par défaut, mais pas CDP. Aruba active LLDP sur chaque port actif, et écoute CDP en mode réception seule.

Les propres pages de Juniper se contredisent sur la valeur par défaut de LLDP, et ses switchs EX et QFX ne peuvent pas du tout faire tourner CDP ; ils peuvent seulement le transporter en tunnel.

L'activation

Sur Cisco, lldp run en global, puis lldp transmit et lldp receive sur l'interface. Sur Huawei, lldp enable, en global et sur l'interface, et les deux sont nécessaires. Sur Aruba, la commande lldp, déjà active par défaut. Sur Juniper, set protocols lldp interface all.

Huawei peut aussi lire le CDP des voisins Cisco, avec lldp compliance cdp receive sur le port.

Lire les voisins

Pour lire la table : show lldp neighbors sur Cisco, display lldp neighbor brief sur Huawei, show lldp neighbor-info sur Aruba, et show lldp neighbors sur Juniper.

Chaque ligne est un fait qu'aucun schéma ne peut vous donner : ce port local fait face à cet équipement, sur ce port.

La mise en garde

Venons-en à la mise en garde. Le guide de durcissement IOS XE de Cisco indique que CDP et LLDP peuvent tous deux être utilisés par un utilisateur malveillant pour la reconnaissance et la cartographie du réseau, et que CDP doit être désactivé sur les interfaces reliées à des réseaux non fiables.

Cisco précise aussi que LLDP n'est pas un mécanisme d'authentification : il ne vérifie pas l'identité du voisin. Juniper suggère de filtrer les TLV qui transportent des informations sensibles.

L'analyse des messages a elle aussi été attaquée. En 2020, cinq failles dans la façon dont les équipements Cisco lisent CDP ont été révélées sous le nom de CDPwn ; quatre d'entre elles permettaient à un attaquant du même segment d'exécuter du code sur des routeurs IOS XR, des switchs Nexus, des téléphones et des caméras IP.

Où le désactiver

En pratique, conservez la découverte sur les liens entre vos propres équipements, où elle construit votre cartographie. Désactivez-la sur les ports tournés vers internet, les partenaires et les clients : no cdp enable et no lldp transmit sur Cisco.

Les ports utilisateurs sont un compromis. Les téléphones IP utilisent CDP ou LLDP-MED pour obtenir leur VLAN voix et leur alimentation : là, on limite ce qui est envoyé plutôt que de l'arrêter.

Trois pannes classiques

Trois choses cassent. Un port où CDP et LLDP négocient tous deux la puissance : Cisco recommande d'y désactiver LLDP. Un voisin qui envoie du LLDP plus vite que ne le permet la limitation de débit vers le CPU : Huawei indique que l'excédent est supprimé, et le voisin n'apparaît jamais.

Et un port qui liste plusieurs voisins : les trames ont traversé un équipement non administrable qui les a laissées passer.

Ce que NacTrack montre

NacTrack collecte CDP et LLDP sur chaque équipement via SSH, quel que soit le constructeur, et rapproche les deux extrémités de chaque lien : équipement, interface, adresse, état et vitesse, avec la preuve tirée de la sortie de l'équipement lui-même. Ce sont ces liens qui dessinent la topologie, couche par couche.

Voir ce protocole sur votre réseau

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