
Cadre d'attaque réseau de couche 2 pour exploiter les protocoles STP et CDP, permettant des attaques par déni de service, détournement de rôle racine et épuisement de mémoire sur les commutateurs Cisco.
Envoyons des BPDU de configuration en nous proclamant racine !!! En envoyant en continu des BPDU de configuration
avec un coût de chemin racine de 0, un identifiant de pont (bridge id) généré aléatoirement (et donc le même
identifiant racine), ainsi que quelques valeurs par défaut pour les autres champs, nous tentons de déranger les
commutateurs proches de nous, provoquant un DoS lorsqu'ils tentent d'analyser et de recalculer leur moteur STP.
MAC source : généré aléatoirement.
MAC destination : 01:80:c2:00:00:00
ID du pont : 8000:source_mac
ID racine : 8000:source_mac
Hello time : 2
Forward delay : 15
Max age : 20
Coût de chemin racine : 0
<sortie du journal cisco>
01:20:26: STP: VLAN0001 heard root 32768-d1bf.6d60.097b on Fa0/8
01:20:26: STP: VLAN0001 heard root 32768-9ac6.0f72.7118 on Fa0/8
01:20:26: STP: VLAN0001 heard root 32768-85a3.3662.43dc on Fa0/8
01:20:26: STP: VLAN0001 heard root 32768-3d84.bc1c.918e on Fa0/8
01:20:26: STP: VLAN0001 heard root 32768-b2e2.1a12.dbb4 on Fa0/8
01:20:26: STP: VLAN0001 heard root 32768-4ba6.2d45.5844 on Fa0/8
01:20:26: STP: VLAN0001 heard root 32768-deb0.4f14.7288 on Fa0/8
01:20:26: STP: VLAN0001 heard root 32768-4879.8036.0e24 on Fa0/8
01:20:26: STP: VLAN0001 heard root 32768-2776.e340.9222 on Fa0/8
01:20:26: STP: VLAN0001 heard root 32768-299e.de76.c07d on Fa0/8
01:20:26: STP: VLAN0001 heard root 32768-d38b.bc5b.e90d on Fa0/8
01:20:26: STP: VLAN0001 heard root 32768-78ee.0205.afdb on Fa0/8
01:20:26: STP: VLAN0001 heard root 32768-b32b.e969.81b1 on Fa0/8
01:20:26: STP: VLAN0001 heard root 32768-b16b.c428.88a3 on Fa0/8
01:20:26: STP: VLAN0001 heard root 32768-dd01.1436.9044 on Fa0/8
</output>
Cette attaque envoie en continu des BPDU TCN, provoquant l'envoi par le commutateur racine de BPDU de
configuration pour accuser réception du changement. De plus, le commutateur racine enverra des notifications
de changement de topologie aux membres de l'arbre, et ils devront recalculer leur moteur STP pour prendre en
compte le nouveau changement.
MAC source : généré aléatoirement.
MAC destination : 01:80:c2:00:00:00
<sortie du journal cisco>
01:35:39: STP: VLAN0001 Topology Change rcvd on Fa0/8
01:35:39: STP: VLAN0001 Topology Change rcvd on Fa0/8
01:35:39: STP: VLAN0001 Topology Change rcvd on Fa0/8
01:35:39: STP: VLAN0001 Topology Change rcvd on Fa0/8
01:35:39: STP: VLAN0001 Topology Change rcvd on Fa0/8
01:35:39: STP: VLAN0001 Topology Change rcvd on Fa0/8
01:35:39: STP: VLAN0001 Topology Change rcvd on Fa0/8
01:35:39: STP: VLAN0001 Topology Change rcvd on Fa0/8
01:35:39: STP: VLAN0001 Topology Change rcvd on Fa0/8
01:35:39: STP: VLAN0001 Topology Change rcvd on Fa0/8
01:35:39: STP: VLAN0001 Topology Change rcvd on Fa0/8
01:35:39: STP: VLAN0001 Topology Change rcvd on Fa0/8
01:35:39: STP: VLAN0001 Topology Change rcvd on Fa0/8
01:35:39: STP: VLAN0001 Topology Change rcvd on Fa0/8
01:35:39: STP: VLAN0001 Topology Change rcvd on Fa0/8
01:35:39: STP: VLAN0001 Topology Change rcvd on Fa0/8
01:35:39: STP: VLAN0001 Topology Change rcvd on Fa0/8
01:35:39: STP: VLAN0001 Topology Change rcvd on Fa0/8
</output>
Notre objectif ici est d'obtenir le rôle racine de l'arbre. Comment pouvons-nous y parvenir ? Il suffit
d'écouter le réseau pour déterminer quel est le rôle racine, puis de commencer à envoyer des BPDU de
configuration avec une priorité plus faible pour devenir racine.
MAC source : identique à celle du BPDU écouté.
MAC destination : identique à celle du BPDU écouté.
ID du pont : celui du BPDU écouté, légèrement modifié pour avoir une priorité plus faible.
ID racine : 8000 : identique à l'ID du pont.
Hello time : identique à celui du BPDU écouté.
Forward delay : identique à celui du BPDU écouté.
Max age : identique à celui du BPDU écouté.
Coût de chemin racine : identique à celui du BPDU écouté.
<sortie du journal cisco>
01:58:48: STP: VLAN0001 heard root 32769-000e.84d4.2280 on Fa0/8
01:58:48: supersedes 32769-000e.84d5.2280
01:58:48: STP: VLAN0001 new root is 32769, 000e.84d4.2280 on port Fa0/8, cost 19
</output>
Nous prétendons être un autre commutateur étrange jouant avec STP et vantant notre ID racine :)
En envoyant des BPDU de configuration dont la priorité diminue automatiquement, nous pouvons provoquer des
élections racines infinies dans l'arbre STP. Ce serait un peu comme recompter les votes d'une élection pour
déterminer le vainqueur (vous vous souvenez de la Floride ?)
<sortie du journal cisco>
00:20:21: STP: VLAN0001 heard root 32769-000e.84d4.2280 on Fa0/9
00:20:21: supersedes 32769-000e.84d5.2280
00:20:21: STP: VLAN0001 new root is 32769, 000e.84d4.2280 on port Fa0/9, cost 19
00:20:23: STP: VLAN0001 heard root 32769-000e.84d3.2280 on Fa0/9
00:20:23: supersedes 32769-000e.84d4.2280
00:20:23: STP: VLAN0001 new root is 32769, 000e.84d3.2280 on port Fa0/9, cost 19
00:20:25: STP: VLAN0001 heard root 32769-000e.84d2.2280 on Fa0/9
00:20:25: supersedes 32769-000e.84d3.2280
00:20:25: STP: VLAN0001 new root is 32769, 000e.84d2.2280 on port Fa0/9, cost 19
00:20:27: STP: VLAN0001 heard root 32769-000e.84d1.2280 on Fa0/9
00:20:27: supersedes 32769-000e.84d2.2280
00:20:27: STP: VLAN0001 new root is 32769, 000e.84d1.2280 on port Fa0/9, cost 19
00:20:29: STP: VLAN0001 heard root 32769-000e.84d0.2280 on Fa0/9
00:20:29: supersedes 32769-000e.84d1.2280
00:20:29: STP: VLAN0001 new root is 32769, 000e.84d0.2280 on port Fa0/9, cost 19
00:20:31: STP: VLAN0001 heard root 32769-000e.84cf.2280 on Fa0/9
00:20:31: supersedes 32769-000e.84d0.2280
00:20:31: STP: VLAN0001 new root is 32769, 000e.84cf.2280 on port Fa0/9, cost 19
00:20:33: STP: VLAN0001 heard root 32769-000e.84ce.2280 on Fa0/9
00:20:33: supersedes 32769-000e.84cf.2280
00:20:33: STP: VLAN0001 new root is 32769, 000e.84ce.2280 on port Fa0/9, cost 19
00:20:35: STP: VLAN0001 heard root 32769-000e.84cd.2280 on Fa0/9
00:20:35: supersedes 32769-000e.84ce.2280
00:20:35: STP: VLAN0001 new root is 32769, 000e.84cd.2280 on port Fa0/9, cost 19
00:20:37: STP: VLAN0001 heard root 32769-000e.84cc.2280 on Fa0/9
00:20:37: supersedes 32769-000e.84cd.2280
00:20:37: STP: VLAN0001 new root is 32769, 000e.84cc.2280 on port Fa0/9, cost 19
00:20:39: STP: VLAN0001 heard root 32769-000e.84cb.2280 on Fa0/9
00:20:39: supersedes 32769-000e.84cc.2280
00:20:39: STP: VLAN0001 new root is 32769, 000e.84cb.2280 on port Fa0/9, cost 19
</output>
Cette fois, nous tentons d'épuiser le processus d'élection racine. Nous parvenons à devenir racine dans
l'arbre STP, mais nous cessons d'envoyer des BPDU de configuration jusqu'à ce que max_age secondes se soient
écoulées (généralement 20), forçant ainsi un nouveau processus d'élection.