
                           ==Phrack Inc.==

              Volume 0x0b, Issue 0x3d, Phile #0x0c of 0x0f

|=---------------=[ Fun with the Spanning Tree Protocol ]=---------------=|
|=--------------[traduit par DecereBrain[degenere-science]---------------=|
|=------------=[ Oleg K. Artemjev, Vladislav V. Yasnyankin ]=------------=|


[NDT : Bon ben j'ai pas le droit de traduire cet article, alors disons que
je prends le gauche :). Je commence srieusement  en avoir marre de cet
tat d'esprit de merde. Si vous ne voulez pas que vos articles soient lus,
ne les publiez pas, en tout cas pas sur Internet. Je considre que toute
information publie sur Internet n'appartient  son auteur que dans la
mesure o il s'agit de son travail, donc il mrite le respect, mais
l'auteur ne peut pas se rserver le droit d'interdire  certaines
personnes de mettre en pratique le contenu de son texte. Autant ne rien
crire et aller faire la fte.
DecereBrain]
--------------------------------------------------------------------------

Introduction.
*=*=*=*=*=*=*

Devellop dans la premire partie des annes 80 par 'l'International
Standards Organization' (ISO), la couche sept de 'l'Open System
Interconnection' (OSI) prsente une structure hirarchique, ou chaque
niveau  strictement assign un job et une interface au niveau infrieur
et suprieur. Du au besoin industriel moderne, l'quipement courant
supporte la couche 2 de l'OSI: Il ne fournit pas seulement le traditionel
frame forwarding & l'hardware adress resolution, mais fourni galement la 
redondance, le multiplex, l'quilibre de charge et la sparation des 
informations coules. Malheureusement, des trous de scurit dans cette 
couche sont souvent dlaiss, par inattention. Dans cet article nous 
allons montrer les faiblesses dans l'implmentation, et le logarythme 
d'une des deux  couche de l'OSI (''channel'' (AC+LLC)) - Spanning Tree
Protocol (STP). Tout cela utilise notre matriel fabriqu en russie: [2],
[4].

   Depuis que nous avons publi une information traitant des 
vulnrabilites avant qu'un patch soit propos sur le march, et depuis que
ces informations peuvent tres utiliss par une tierce personne, nous 
criront notre article de tel sorte que les newbies (aussi appell 
``scrip kiddies'' ou ``black hats'' - voir [1]) ne seront pas capable 
d'utiliser ce paper comme un ``howto''. Nous comprenons que certaine 
personnes ont des opinions diffrente quand a ce but, mais comprenez que
c'est la seule solution possible pour motiver les vendeurs, pour qu'ils
fixent les bugs beaucoup plus rapidement. Evidemment, nous avons prvenue 
quelques vendeurs (Cisco, Avaya) sur ces vulnrabilites, mais nous avons 
reut une rponse du genre 'a moins qu'on nous donnent l'argent, nous ne 
feront pas d'investissement'. Bon, depuis nous nous sommes intrss  la 
scurit des routeurs et des switchs que nous utilisons. Nous avons 
galement not, que les vendeurs devraient se tenir inform aupres de 
bugtraq et autres, et directement via Cisco & Avaya. Notre premiere 
publication en russe concernant les vulnrabilites STP date d'environ un 
an.

   L'ensemble de nos travaux crit traitant de l'analyse du protocol STP 
sont trop gros pour tres publi en un seul article, dans un magazine. 
Toute les informations sont disponible sur internet, sur la page web de 
projet ([]). Celles ci sont donnes avec les mmes restriction cit plus
haut concernant cette publication (voir la license plus bas)

License.
*=*=*=*=

   Comme il y a une tendance de plainte pour empecher la publication de
vulnrabilites (ces tendances sont connu du grand public -comme la loi
DCA- aux USA [Digitial illuennium Copyright Act]), ces accessoires sont
sujet a la license suivante:

-----------------------------------------------------------------------
License:

Cet article est une proprit intellectuel de ses auteurs: Oleg Artemjev
et Vladislav yasnyankin. Ce paper peut etre distribu gratuitement via
des liens, mais il ne peut (meme en partie) tre traduit (NDT: mdr) dans
une autre langue, ou tre inclu dans un autre article, bouquin, magazine,
et autre paper sans la permission de ses deux auteurs. D'ailleur, dans 
le cas de l'utilisation de ce document, et d'apres la license, vous devez 
fournir les informations suivantes:
Le titre, Le nom des auteurs, et cette license. Vous pouvez gratuitement
distribuer ce document electronique, si et seulement si, toute les
conditions suivantes sont reunies:

 1. Cette license et l'article n'ont pas tait modifi, cela inclue
    la signature digital PGP. Un reformatage du texte est interdit.
 2. La distribution ne doit pas etre en contradiction avec cette license.

   La distribution de cet article dans les pays avec la lgislation
contenant des limitations similaires a la DCA americaine, est en 
contradiction avec cette license. Aux moment de la publication, cela inclut
les USA (incluant les ambassades, les vaisseaux naval, les bases militaires
et les autres aires du juridiction americaine).
De plus, la lecture de ce article par des citoyen d'un tel pay est
galement en contradiction avec cette license. Nanmoins, la distribution
d'un lien a ce document ne constitue pas une violation de cette license.

   Cet article est fourni 'tel quel' par les auteurs, et les garanties 
implicites ou explicite, incluant les garanties implicites de la valeur
marchande et de la forme physique pour un but particulier, sont alors 
inutilisable. En aucun cas les auteurs ne peuvent tre tenu responsable,
que ce soit pour des dommages subit de faon direct, indirect, accidentel,
special, exemplaire Comprenant, entre autres; la fourniture des 
marchandises de remplacement ou services ; perte d'utilisation, de donnes,
ou de bnfices; ou interruption de travail)

   Les auteurs ont produit cet article a titre uniquement informatif. Vous
ne devriez pas le lire, si vous n'etes pas d'accord avec cela, et que vous 
souhaitez l'utilisez dans un autre but.

   Cette license est sujet a changement dans la futur, sans avertissement,
et avec l'accord des deux auteurs.
-----------------------------------------------------------------------

Qu'est ce que STP?
*=*=*=*=*=*=*=*=*=

   La principale tache du protocol STP est d'automatiser le management de
la topology de rseaux avec les canaux redondant. En gnral, presque tout
les types de rseaux ne sont pas capable d'autoriser lopps (rings) dans 
leur structure. Actuellement, si l'quipement rseaux est connect avec des
lignes superflues, par la suite ...
Mais le business a besoin de la redondance, ceci est un STP - Il fait
attention que tout soit logiquement dsactiv a moins que l'une des lignes
aient un dfault - dans ce cas STP active la ligne actuellement en reserve.
STP devrait garantir a chaque moment que seulement un des nombreux liens
dupliqu est activ, et devrait automatiquement switcher entre eux sur
demande (changement de topology rseaux ou par dfault).

Comment fonctionne STP ?
*=*=*=*=*=*=*=*=*=*=*=*=

   STP commence son travail par construire un graphe en forme d'arbre, qui
commence  "root" ["racine"]. Un appareil compatible STP devient une racine
aprs avoir gagn une lection. Chaque appareil compatible STP (cela
pourrait tre un swtich, un routeur ou un autre quipement, ici et
dsormais appel "pont" ["bridge"]) dmarre aprs mise sous tension en
clamant que c'est une racine en envoyant des donnes spciales nommes
Bridge Protocol Data Unit (BDPU, voir [9]) au travers tous les
ports. L'adresse du destinataire d'un paquet BDPU est une adresse
(multicast) de groupe - ceci permet aux BDPUs de passer au travers des
quipements non-intellectuels (["dumb"], crtin) comme les hubs et les
switches non-STP.

   Quand nous parlons ici d'adresse, nous parlons d'adresse MAC, car STP
fonctionne au niveau de Media Access Control (MAC). Ici tous les problmes
 propos de STP et de ses failles s'appliquent de faon gale aux
diffrantes mthodes de transmission, i.e. Ethernet, Token Ring et autres.

   Aprs avoir reu BDPU d'un autre appareil le pont compare les paramtres
reus avec les siens et selon les rsultats il dcide de stopper ou de
rester dans son statut de racine. A la fin des lections l'appareil ayant
la plus petite valeur d'identificatuer de pont devient une
racine. L'identificateur de pont est une combinaison de l'adresse MAC du
pont et d'une priorit de pont dfinie. Evidemment, dans un rseau avec un
seul appreil compatible STP il sera une racine.

   La racine dsigne (ou " Pont Racine Dgigne" comme nomme par le
standard) n'a aucune responsabilit en plus - elle n'est utilise que comme
un point de dpart pour commencer la contruction du graphe de la
topologie. Pour tous les autres ponts dans un rseau STP il dfinit le
"port racine" - le plus proche vers le port de pont racine. Il diffre des
autres ports connects au pont par son identificateur - combinaison de son
adresse MAC et de la prorit dfinie pour le port.

   Le Cot de Chemin de la Racine est galement une valeur sense pour les
lections STP - c'est construit comme une somme des cots de chemin : vers
le port racine d'un pont donn et les tous les cots de chemin vers les
autres ponts sur la route de la racine.

   En plus du Pont Racine "pricipal", STP dfinit une entre logique appele
"Pont dsign" - le propritaire de son statut devient le pont principal en
sevant au segment donn du LAN. Ceci est galement sujet  lections.

   De faon similaire STP dfinit pour chaque segment de rseau le "Port
Dsign" (qui sert au segment donn du rseau) et son "Cot Dsign"
correspondant.

   Aprs que toutes les lections soient termines, le rseau entre dans sa
phase stable. Cet tat est caractris par les conditions suivantes :

 - Il n'y a qu'un seul appareil dans un rseau se rclamant comme une
   Racine, tous les autres l'annonent priodiquement.

 - Le Pont Racine envoie priodiquement des BDPU  travers tous ses
   ports. L'intervalle d'envoi est nomm "Hello Time".

 - Dans chaque segment de LAN il n'y a qu'un Port Racine Dsign et tout le
   trafic vers le Pont Racine passe dedans. Par comparaison au autes ponts,
   il a la plus faible valeur de cot de chemin vers le Pont Racine, si ces
   valeurs sont identiques alors le port ayant le plus petit identificateur
   de port (MAC plus la priorit) est assign.

 - Les BDPUS sont envoyes et reues par une unit compatible STP sur
   chaque port, mme ceux qui sont dactivs par le protocole
   STP. Exceptionnellement, les BDPUs ne sont pas oprationnelles sur les
   ports qui sont dsactivs par l'administrateur/administratrice.

 - Chaque pont forward les frames seulement entre le Port Racine et les
   Ports Dsigns pour les segments correspondants. Tous les autes ports
   sont bloqus.

   Suivant le dernier point, STP gre la topologie en changeant les tats
de ports dans la liste suivante : 

Bloquant :   Le port est bloqu (abandonne les frames de
             l'utilisateur/utilisatrice), mais accepte les BPDUs STP.

En coute :  Premire tape avant le forwarding. Les frames STP (BPDUs) sont
             OK, mais les frames de l'utilisateur/utilisatrice ne sont pas
             trates. Aucun apprentissage des adresses encore, car il
             pourrait donner de fausses donnes dans la table de switching 
             cet instant.

En apprentissage : Deuxime tape dans la prparation de l'tat de
             forwarding. Les BPDUs sont trates en entier, les frames
             utilisateur ne sont utilises que pour construire la table de
             switching et ne sont pas forwardes.

Forwarding : Etat de fonctionnement des ports du point de vue utilisateur -
	     toutes les frames sont trates - les STP et celles de
	     l'utilisateur/utilisatrice.

   Au moment de la reconfiguration de la topologie, tous les ports de pont
sont dans l'un des trois tats, Bloquant, En coute ou En apprentissage,
les frames de l'utilisateur/utilisatrice ne sont pas dlivres et le rseau
ne fonctionne que pour lui-mme, pas pour l'utilisateur/utilisatrice.

   A l'tat stable tous les ponts sont en attente du BPDU Hello priodique
du Pont Racine. Si dans la priode de temps dfinie par Max Age Time il n'y
avait aucun BPDU Hello, alors le pont dcide que soit le Pont Racine est
teint, soit le lien vers lui est rompu. Dans ce cas il initie la
reconfiguration de la topologie du rseau. En dfinissant les paramtres
correspondants il est possible de rguler  quelle vitesse les ponts vont
trouver les changements de topologie et mette en place un backup des
liens.

Allons voir plus loin.
*=*=*=*=*=*=*=*=*=*=*=

Voici la structure d'un BPDU Configuration STP selon le standard 802.1d :

 ------------------------------------------------
 |Offset  |Nom                          |Taille |
 ------------------------------------------------
 ------------------------------------------------
 |1       |Protocol Identifier        |2 octets |
 ------------------------------------------------
 |        |Protocol Version Identifier|1 octet  |
 ------------------------------------------------
 |        |BPDU type                  |1 octet  |
 ------------------------------------------------
 |        |Flags                      |1 octet  |
 ------------------------------------------------
 |        |Root Identifier            |8 octets |
 ------------------------------------------------
 |        |Root Path Cost             |4 octets |
 ------------------------------------------------
 |        |Bridge Identifier          |8 octets |
 ------------------------------------------------
 |        |Port Identifier            |2 octets |
 ------------------------------------------------
 |        |Message Age                |2 octets |
 ------------------------------------------------
 |        |Max Age                    |2 octets |
 ------------------------------------------------
 |        |Hello Time                 |2 octets |
 ------------------------------------------------
 |35      |Forward Delay              |2 octets |
 ------------------------------------------------

En langage C :

typedef struct {

Bpdu_type  type;
Identifier root_id;
Cost       root_path_cost;
Identifier bridge_id;
Port_id    port_id;
Time       message_age;
Time       max_age;
Time       hello_time;
Time       forward_delay;
Flag       topology_change_acknowledgement;
Flag       topology_change;

} Config_bpdu;

Voici ce  quoi cela ressemble dans tcpdump :

---------------------screendump----------------------------
[root@ws002 root]# tcpdump -c 3 -t -i eth0 stp
tcpdump: listening on eth0
802.1d config 8000.00:50:e2:bd:58:40.8002 root 8000.00:50:e2:bd:58:40 pathcost 0 age 0 max 20 hello 2 fdelay 15 
802.1d config 8000.00:50:e2:bd:58:40.8002 root 8000.00:50:e2:bd:58:40 pathcost 0 age 0 max 20 hello 2 fdelay 15 
802.1d config 8000.00:50:e2:bd:58:40.8002 root 8000.00:50:e2:bd:58:40 pathcost 0 age 0 max 20 hello 2 fdelay 15 
3 packets received by filter
0 packets dropped by kernel
[root@ws002 root]#
---------------------screendump----------------------------

Et avec des infos supplmentaires :

---------------------screendump----------------------------
[root@ws002 root]# tcpdump -vvv -e -l -xX -ttt -c 3 -i eth0 stp
tcpdump: listening on eth0
000000 0:50:e2:bd:58:42 1:80:c2:0:0:0 0026 64: 802.1d config \
8000.00:50:e2:bd:58:40.8002 root 8000.00:50:e2:bd:58:40 pathcost 0 \
age 0 max 20 hello 2 fdelay 15 
0x0000   4242 0300 0000 0000 8000 0050 e2bd 5840        BB.........P..X@
0x0010   0000 0000 8000 0050 e2bd 5840 8002 0000        .......P..X@....
0x0020   1400 0200 0f00 0000 0000 0000 0000 7800        ..............x.
0x0030   0c00                                           ..
2. 002912 0:50:e2:bd:58:42 1:80:c2:0:0:0 0026 64: 802.1d config \
8000.00:50:e2:bd:58:40.8002 root 8000.00:50:e2:bd:58:40 pathcost 0 \
age 0 max 20 hello 2 fdelay 15 
0x0000   4242 0300 0000 0000 8000 0050 e2bd 5840        BB.........P..X@
0x0010   0000 0000 8000 0050 e2bd 5840 8002 0000        .......P..X@....
0x0020   1400 0200 0f00 0000 0000 0000 0000 7800        ..............x.
0x0030   0c00                                           ..
2. 046164 0:50:e2:bd:58:42 1:80:c2:0:0:0 0026 64: 802.1d config \
8000.00:50:e2:bd:58:40.8002 root 8000.00:50:e2:bd:58:40 pathcost 0 \
age 0 max 20 hello 2 fdelay 15 
0x0000   4242 0300 0000 0000 8000 0050 e2bd 5840        BB.........P..X@
0x0010   0000 0000 8000 0050 e2bd 5840 8002 0000        .......P..X@....
0x0020   1400 0200 0f00 0000 0000 0000 0000 7800        ..............x.
0x0030   0c00                                           ..
3 packets received by filter
0 packets dropped by kernel
[root@ws002 root]# 
---------------------screendump----------------------------

Gnralement on obtient le mme avec un alias de la syntaxe de tcpdump (si
vous n'avez aucun autre trafic multicast dans le rseau cible) :

---------------------screendump----------------------------
[root@ws002 root]# tcpdump -vvv -e -l -xX -ttt -c 3 -i eth0 multicast
tcpdump: listening on eth0
000000 0:50:e2:bd:58:42 1:80:c2:0:0:0 0026 64: 802.1d config \
8000.00:50:e2:bd:58:40.8002 root 8000.00:50:e2:bd:58:40 pathcost 0 \
age 0 max 20 hello 2 fdelay 15 
0x0000   4242 0300 0000 0000 8000 0050 e2bd 5840        BB.........P..X@
0x0010   0000 0000 8000 0050 e2bd 5840 8002 0000        .......P..X@....
0x0020   1400 0200 0f00 0000 0000 0000 0000 7800        ..............x.
0x0030   0c00                                           ..
2. 004863 0:50:e2:bd:58:42 1:80:c2:0:0:0 0026 64: 802.1d config \
8000.00:50:e2:bd:58:40.8002 root 8000.00:50:e2:bd:58:40 pathcost 0 \
age 0 max 20 hello 2 fdelay 15 
0x0000   4242 0300 0000 0000 8000 0050 e2bd 5840        BB.........P..X@
0x0010   0000 0000 8000 0050 e2bd 5840 8002 0000        .......P..X@....
0x0020   1400 0200 0f00 0000 0000 0000 0000 7800        ..............x.
0x0030   0c00                                           ..
2. 006193 0:50:e2:bd:58:42 1:80:c2:0:0:0 0026 64: 802.1d config \
8000.00:50:e2:bd:58:40.8002 root 8000.00:50:e2:bd:58:40 pathcost 0 \
age 0 max 20 hello 2 fdelay 15 
0x0000   4242 0300 0000 0000 8000 0050 e2bd 5840        BB.........P..X@
0x0010   0000 0000 8000 0050 e2bd 5840 8002 0000        .......P..X@....
0x0020   1400 0200 0f00 0000 0000 0000 0000 7800        ..............x.
0x0030   0c00                                           ..
3 packets received by filter
0 packets dropped by kernel
[root@ws002 root]#
---------------------screendump----------------------------

Comme vous le voyez ici, normalement les frames STP arrive
approximativement dans le Hello Time (ici : 2 secondes).


STP & VLANs.
*=*=*=*=*=*=

   Nous aimerions dire quelques mots  propos du fonctionnment de STP
spcifique aux rseaux avec des rseaux virtuels (VLANs). Mettre en marche
ce mode sur un switch est logiquement quivalent  le remplacer avec un
certain nombre de switches (pour chaque switch), mme lorsque physiquement
il n'y a aucune sparation entre les mdia VLANs. Il serait vident de
trouver qu'il y a diffrents arbres STP, mais cette option est supporte
par seulement quelques quipements (i.e. Intel 460T ne supporte qu'un seul
arbre STP pour tous les VLANs ; avec la famille des switches Cajun de chez
Avaya vous ne trouverez des Spanning Trees spars que dans les modles
haut de gamme). Ces faits dtruisent l'espoir de localiser de possibles
attaques STP dans un VLAN. Mais il y a des menaces existant mme avec des
arbres STP spars par VLAN.

   Certains vendeurs ont construit de nouvelles choses pour tendre STP
dans leurs appareils, augementant leurs capacits, comme le Spanning Tree
Portfast de Cisco (voir [11]) et le STP Fast Start dans certains switches
3Com (voir [12]). Nous en verrons l'essence plus bas. Egalement, certaines
compagnies supportent leur propre implmentation de STP, i.e. le Dual Layer
STP de chez Avaya. De plus, des modifications du fonctionnement de STP pour
d'autres types de rseaux (i.e. DECnet). Nous voudrions pointer ici leurs
similarit de principe et ils ne diffrent que dans les dtails et dans les
capacits tendues (ainsi, dans le Dual Layer STP d'Avaya les arbres
peuvent se terminer aux ports compatibles 802.1d). Toutes ces
implmentations souffrent des mmes dfauts que leurs prototypes. Les
protocoles propritaires non-publis donnent un problme de plus - seuls
les dveloppeurs peuvent rsoudre leurs problmes, car le reverse
engineering complet (requis pour fournir de bonnes solutions de bug-fixing)
est plus difficile qu'un petit qui est juste requis pour raliser des
attaques et publier des rsultats dont certains constitueraient une preuve
d'un reverse engineering, qui pourrait tre illgal.

Plans d'attaque possibles.
*=*=*=*=*=*=*=*=*=*=*=*=*=

   L'ide d'un premier groupe d'attaque se voit pratiquement "en surface".
Par essence le principe du STP autorise d'organiser facilement une attaque
de Dni de Service (Dos). Rellement, comme dfinit dans le standard,  la
reconfiguration du Spanning Tree [NDT : l'arbre reprsentant le rseau]
tous les ports des appareils impliqus ne transfrent pas les frames
utilisateur. Ainsi, pour faire tomber un rseau (ou au moins l'un de ses
segments) dans un tat non-utilisable il suffit de forcer les appareils STP
 une reconfiguration infinie. Cela pourrait tre ralis en initialisant
des lections pour, par exemple, le pont racine, le pont dsign ou le port
racine - en pratique n'importe quel objet d'lections. Par "chance", STP
n'a aucune espce d'authentification autorisant les utilisateurs malicieux
d'atteindre ceci facilement en envoyant de faux BPDU.


[NDT : Aphex Twin -  The Garden of Linmiri]
  Un programme construisant des BPDU pourrait tre crit dans n'importe
quel langage de haut niveau ayant une interface raw-socket (regardez
l'exemple en C et le shell script de gestion  la home page de notre projet
- [5], [6]). Un auter moyen - on pourrait utiliser les outils stantards
pour grer le Spanning Tree, i.e. ceux du projet Linux Bridge ([13]), mais
dans ce cas il n'est pas possible de manipuler des paramtres STP avec des
valeurs qui n'entrent pas dans la spcification du standard. Au-dessous
nous examinerons des plans de bases d'attaques potentiellement possibles.

Elections ternelles.
*=*=*=*=*=*=*=*=*=*=*

  L'attaquant(e) monitore le rseau avec un sniffer (analyseur de rseau)
et attends l'un des BPDUs de configuration priodique en provenance du
pont racine (contenant son identifiant). Aprs ceci il envoie dans
un rseau un BPDU avec un identifiant plus petit que celui qu'il a reu
(id=id-1) - il a donc des prtentions  tre lui-mme une racine et
initilalise des lections. Aprs il dcrmente d'un l'identificateur et
rpte le procdure. Chaque tape initialise une nouvelle vague
d'lections. Lorsque l'identificateur atteint sa plus petite valeur
l'attaquant(e) retourne  la valeur calcule au dbut de l'attaque. En
rsultat, le rseau sera pour toujours en lections du pont racine et les
ports des appareils STP n'atteindrons jamais l'tat de forwarding tant que
l'attaque est en marche.

Disparition de la racine
*=*=*=*=*=*=*=*=*=*=*=*=

   Avec cette attaque il n'est pas besoin d'obtenir l'identificateur
courant du pont racine - la plus petite valeur possible est une valeur de
dbut. Ceci, comme nous nous en souvenons, signifie la priorit maximum. A
la fin des lections l'attaquant(e) stoppe l'envoi de BPDU, ce qui aprs
une limite de temps de Max Age donne de nouvelles lections. Aux nouvelles
lections l'attaquant(e) agit galement comme avant (et gagne). En
assignant le minimum possible de Max Age Time il est possible d'obtenir une
situation o tout le rseau passera tout son temps  se reconfigurer, comme
cela se poourrait dans l'algorithme prcdant. Cela pourrait avoir moins
d'effet, mais a une ralisation plus simple. De plus, selon l'chelle du
rseau et d'autres facteurs (i.e. la valeur de Forward Delay, qui fait
varier la vitesse de switching dans un tat de forwarding) les ports des
appareils STP pourraient ne jamais commencer  forwarder les frames
utilisateur - donc nous ne pouvons pas considrer cette attaque comme moins
dangereuse.

Fusion-sparation des arbres.
*=*=*=*=*=*=*=*=*=*=*=*=*=*=*

   Dans un rseau supportant les VLANs il peut tre possible de lancer une
modification de l'attaque discute plus haut en connectant des segments
avec diffrants VLANs et arbres STP. Ceci pourrait tre ralis sans
logiciel,  la main, en reliant ensemble les ports avec un cable crois. Ce
pourrait devenir une vraie douleur pour le NOC car c'est difficile 
dtecter.

Dni de service local.
*=*=*=*=*=*=*=*=*=*=*=

   Un(e) attaquant(e) pourrait raliser un Dni de Service, non pour le
rseau entier, mais juste sur une partie. Il/elle y pourrait avoir beaucoup
de raisons, i.e. cela pourrait isoler le client victime du vrai serveur
pour crer une attaque de "faux serveur". Regardons la ralisation de ce
type d'attaque dans l'exemple :

 ----------------------------------------------------------------
                                         
 .------------------------.                 .------------------.
 | Switch w/ STP #1       |-----------------| Switch w/ STP #2 |
 .________________________.                 '__________________'
    |                |                               |   
    |                |                               |   .___.
    |                |                               |   |   |
    |.....           |  ._                           |   | ==|
  .------,~          |  ||                           |   | ==|
  |Client|'          |  ||                            \_ |  -|
  | PC   ||           \ |....                            |   | 
  \------ /            '=====|                           |   |
   ======/             Portable de                      -------
                       l'attaquan(e)                    Serveur

--------------------------Figure 1------------------------------

Sur la figure 1 le serveur est connect  un switch et la victime est
conecte  un autre (la connectivit vers le pont pourrait inclure des
hubs). L'attaquant(e) a besoin de duper le switch le plus proche et lui
faire croire qu'il/elle a une meilleure voie vers le pont qui sert
l'ordinateur serveur.

En terme de STP, l'attaquant(e) doit initialiser et gagner les lections du
pont dsign du segment du serveur. Comme rsultat d'avoir gagner ces
lections le canal entre les ponts seraient dsactivs en mettant les ports
correspondants  l'tat bloqu. En dtruisant la connectivit entre les
segment l'attaquant(e) pourrait de mme tenter de duper le client en se
rclamant lui-mme comme le vrai serveur (comparez avec la bien connue
attaque Mitnick) ou juste se sentir satisfait si son but est la mchancet.

Filtre BPDU.
*=*=*=*=*=*=

   Le moyen d'attaque vident est de mettre une boucle qui est indtectable
par STP en organisant une boucle physique et en y filtrant toutes les
frames BPDU.

Man In The Middle.
*=*=*=*=*=*=*=*=*=

   Les deux attaques suivantes diffrent fondamentalement de celles dj
discutes - leur but n'est pas d'atteindre un dni de service, mais de la
pntration de donnes, impossible dans le mode normal d'organisation du
rseau. En bref, cette attaque utilise STP pour changer la structure
logique du rseau vers un trafic direct et sensible via la station de
l'attaquant(e). Regardons la deuxime figure.


 ----------------------------------------------------------------
     Clients segment                          Server segment           
 .------------------------.                 .------------------.
 | Switch w/ STP #1       |------X X--------| Switch w/ STP #2 |
 .________________________.                 '__________________'
    |                |                        |      |   
    |                |                        |      |   .___.
    |                |                        |      |   |   |
    |.....           |   .------.             |      |   | ==|
  .------,~          |   |      |             |      |   | ==|
  |Client|'          |   |Attacking           ;       \_,|  -|
  | PC   ||           \  | PC   |            /           |   | 
  \------ /            \_========_,         /            |   |
   ======/              |_________|--------'            -------
                                                         Server

--------------------------Picture 1-----------------------------

   Comme pour l'attaque de dni de service partiel du rseau ci-dessus,
suppposez que la station de l'attaquant(e) soit quipes de deux NICs, une
Network Interface Card [NDT : une carte rseau quoi] est connecte au
segment "du client", et l'autre au segment "du serveur". En envoyant des
BPDUs appropris l'attaquant initialise les lections du pont dsign pour
les deux segments et les gagne. Du coup, les liens existants entre les
switches (marqus "-X X-") tomberont (vont switcher vers l'tat bloquant)
et tout le trafic inter-segment sera dirig vers la station de
l'attaquant(e). Si les plans de l'intrus(e) n'incluent pas le dni de
service, il/elle DOIT fournir le forwading de frames entre les cartes
rseau. C'est une tche trs simple si l'attaquant(e) n'a pas besoin de
modifier le trafic en aucune manire. Cela pourrait tre fait soit en
crant un simle module de programe, soit en utilisant les fonctions STP du
systme d'exploitation, par exemple pour GNU/Linux avec le Linux Bridge
Project (voir [13]), qui contribue  une solution complte de bridge. Bien
entendu, un(e) intrus(e) doit prendre en compte le problme de "goult de
bouteille" - le lien inter-segment peut fonctionner  une vitesse de 100 Mb
(1 Gb) alors que les ports du client ne pourraient fournir qu'une vitesse
de 10 Mb (100 Mb), ce qui mne  une dgradation de la productivit du
rseau et  une perte partielle de donnes (mais une ralisation logicielle
de back pressure ne serait pas une grosse affaire). Bien sr, si
l'atttaquant(e) veut "diter" le trafic  la vole sur un lien lourdement
charg, il/elle pourrait avoir besoin d'un ordinateur plus puissant (CPU et
RAM). Par chance, cette attaque est impossible dans les rseau avec un seul
switch - tentez de la raliser dans ces conditions et vous obtiendrez un
DoS partiel. Notez galement que la ralisation est n'est triviale que
lorsque l'attaquant(e) est connect  des switches voisins. Si les
connections sont faites vers le switch sans lien direct, il y a une tche
additionnelle - deviner au moins une Bridge ID, parce que les appareils STP
ne forwardent jamais les BPDUs, mais n'envoient que sur la base des
informations qu'ils reoivent.

Sniffing provoqu.
*=*=*=*=*=*=*=*=*=

   En gnral, le sniffing est la pntration de donnes en switchant
l'interface rseau en mode promiscuous. Dans cette mthode la NIC reoit
toutes les frames, pas seulement les broadcast et celles dirigiges vers
elle. Il existe des attaques bien connues sur les rseau bass sur des
switches, il y a soit le poison des tables des adresses MAC des cibles par
des fausses rponses ARP, soit le flood de la table de switching du bridge
et le faisant onc se comporter comme un hub, mais avec des
sparations/collisions de domaines. Les mmes rsultats peuvent presque
tre atteints en utilisant STP.

   Selon les spcifications, aprs la reconfiguration de l'arbre (par
exemple, aprs les lections du pont dsign), les appareils STP DOIVENT
effacer de la table de switching toutes les entres (sauf celles mises
statiquement par l'administrateur), incluses avant que le switch n'arrive
aux tat coute et apprentissage. Du coup le switch se mettra en mode hub
pour quelques temps pendant qu'il re-remplit la table de switching. Bien
sr, vous avez dj not la fragilit de cette thorie : le switch apprend
trop vite. Aprs avoir reu la premire frame de la victime il crit son
adresse MAC dans la table de switching et arrte de les broadcaster  tous
les ports. Quoi qu'il en soit, nous ne devons pas ignorer cette
attaque. Notamment parce que les constructeurs incluent dans leurs produits
des "extensions" au noyau STP. Juste aprs les lections le rseau est
inatteignable. Pour rduire le down time certains constructeurs (Cisco,
Avaya, 3Com, HP, etc.) incluent une habilitation  mettre de ct les tats
d'coute et d'aprentissage sur les ports "utilisateur" (les ports connects
avec les serveurs et les stations de travail). En d'autres termes, le port
passe directement de l'tat "bloqu"  l'tat "forwarding". Cette
habilitation porte diffrents noms : Spanning Tree Portfast (Cisco - [11]),
STP Fast Start (3Com - [12]), etc.. Si cette habilitation est active,
alors les lections ternelles ne mneront pas  un DoS, mais  des resets
priodiques de la table de switching, ce qui signifie le hub-mode. Notez
que cette fonction ne devrait pas tre active sur les ports trunk, parce
que la convergence de STP (finalisation des lections  un tat stable)
n'est pas garantie dans ce cas. Par chance, pour atteindre so but un(e)
intrus(e) doit vider la table de switching au moins deux fois plus vite que
les paquets intressants sont reus, ce qui est pratiquement
impossible. Malgr tout cela autorise la collecte de donnes
sensibles. Noez galement que cette attaque permet d'attraper toutes les
frames, parce qu'elle fonctionne au niveau canal [NDT : "channel"] du OSI
et redirige tous les protocoles (incluant IPX, NETBEUI, etc.), pas
seulement IP (comme l'ARP-poisoning).

Autres attaques possibles.
*=*=*=*=*=*=*=*=*=*=*=*=*=

   Ces attaques n'ont pas t vrifies, mais nous supposons qu'elles sont
possibles.

Attaque STP sur le VLAN voisin.
*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*

   Selon 802.1q un pont avec le support de VLAN peut recevoir sur un canal
donn soit toutes les frames, soit seulement les frames ayant les tags
appropris. Dans les rseau diviss par des VLANs contenant STP les paquets
seront transmis via un lien trunk avec les tags appropris. Donc, il y a
une possibilit d'attaquer le VLAN en envoyant des paquets STP dans des
frames tagges vers le port, qui ne supporte pas les tags. Par chance,
selon 802.1q un pont peut filtrer ces frames. Par exemple, les appareils
Cisco laissent tomber les frames sur les ports incompatibles avec les tags
(au moins les utilisateurs), qui rendent cette attaque impossible. Mais
notez que ce pour PEUT, mais ne DOIT pas dropper ces frames.

STP sur les liens WAN.
*=*=*=*=*=*=*=*=*=*=*=

   Nous devons galement comprendre que les liens WAN sont aussi
vulnrables aux attaques STP. Ceci parce que la spcification BCP dclare
STP au-dessus du support PPP. Une consquence surprenante en est la
capacit d'attaquer les rseaux des ISP via une connection dialup. Selon la
RFC 2878 (description de BCP, voir [RFC 2878]), STP activ sur le lien PPP
si les deux cots le requirent, ce qui n'arrive jamais en
pratique. Nanmoins, STP est support sur la majorit des routeurs Cisco,
au moins les modles capables de combiner des interfacves virtuelles dans
des groupes de ponts.

Ceci s'applique  GARP.
*=*=*=*=*=*=*=*=*=*=*=*

   Comme vous pourriez le lire dans la spcification de Gnric Attribute
Registration Protocol (GARP) [NDT : Protocole d'Enregistrement d'Attribut
Gnrique, autre protocole de Niveau 2 il me semble] par 802.1d, STP est
une sous-partie de GARP. Certaines de attaques discutes au-dessus
fonctionnent contre GARP et, en particulier, contre le Generic VLAN
Registration Protocol (GVRP) [Protocole d'Enregistrement de VLAN
Gnrique]. Donc les VLANs ne peuvent pas tre utiliss comme seule mesure
de scurit dans un rseau. Le standard 802.1q prend son origine de 802.1d
et hrite de ses dfauts.

   Nous pourrions continuer noter recherche des non-standards utilisant
STP. Tout nouvau matriau sera disponible sur la page web du projet (voir
[3]).


Bref rsum.
*=*=*=*=*=*=

   Nous avons donc montr que malheureusement tous les rseaux supportant
802.1d et, avec quelques restrictions, ceux qui supportent 802.1.q, sont
vulnrables.

   Alors que certains appareils ne supportent STP que si l'administrateur /
adminitratrice active l'option approprie durant le processus de
configuration, d'autres le supportent par dfaut, "sortant de la boite" (la
plupart des vendeurs courants activent STP par dfaut). Demandez  votre
admin : notre rseau a-t-il besion du support de STP ? Le support de STP
est-il dsactiv sur notre rseau ?

Dtection et protection.
*=*=*=*=*=*=*=*=*=*=*=*=

   Quelle est la principale difficult de la dtection des attaques bases
sur STP ? Le problme est que cette attaque utilise des paquets C-BPDU
standards, donc la prsence de paquets STP sur le rseau n'est pas une
caractristique forte de l'attaque. Une autre difficult est que les
Systmes de Dtection d'Intrusion (IDS) doivent disposer en eux-mmes les
informations  propos du plan du rseau, au moins une liste des appareil
rseau (avec les ID des ponts) pour distinguer le trafic STP usuel des
paquets de l'intrus(e). De plus, comme l'un des principaux buts de
l'attaque est la disponibilit du rseau, l'IDS doit avoir son propre canal
d'alarme. Mais notez que dans ce cas il y a de possibles faux ngatifs -
l'attaque ne sera pas dtecte si des BPDUs malicieuses affectent avant que
l'IDS ne les rvlent. Chaque tat normal de rseau rel peut tre dcrit
en termes de STP. Par exemple, dans un rseau qui n'utilise normalement pas
STP, l'apparition de paquets STP signifie trs probablement une tentative
d'attaque STP. Des sries d'Elections de Pont Racine avec une baisse
squentielle de l'ID du Pont Racine peut signifier une attaque "d'lections
ternelles". Dans un rseau ayant une liste d'ID d'appareils fixe
l'apparition de BPDUs avec une nouvelle ID signifiera probablement dans la
plupart des cas une attaque (sauf bien sr des cas ridicules comme
l'installation d'un nouvel appareil par certains d'une quipe
d'administration mal-coordine). Nous supposons que la solution la plus
efficace est un IDS s'adaptivant et auto-apprenant utilisant une
technologie de rseau de neurones, parce qu'il peut comparer dynamiquement
l'tat actuel du rseau avec un tat "normal". L'une des mesures les plus
significatives est la proportion de STP dans la somme totale du trafic.

Fix rapide ?
*=*=*=*=*=*=

Que peuvent faire les adminitrateurs/administratrices rseau quand des
problmes existent ?

 - Si STP n'est pas strictement ncessaire pour votre rseau, il doit ter
   dsactiv. Comme nous l'avons not ci-dessus, dans la plupart des
   appareils STP est activ par dfaut.
 - Dans beaucoup de cas les liens backup peuvent tre contrls en
   utilisant d'autres mcanismes comme le Link Aggregation. Cette
   fonctionalit est supporte par beaucoup d'appareils, incluant Intel,
   Avaya, etc.
 - Si le matriel supporte des configurations STP individuelles sur chaque
   port alors STP doit tre dsactiv sur tous les ports sauf sur les ports
   marqus connects aux autres matriels rseau, mais pas aux stations de
   travails des utilisateurs/utilisatrices. Ceci doit tre spcialement
   pris en compte par les ISPs, parce que des utilisateurs/utilisatrices
   maliceux/malicieuses pourrait tenter de faire des DoS soit contre le
   rseau de l'ISP soit contre les rseaux d'autres clients. [NDT : jacob,
   on t'a reconnu ;]
 - Si possible les administrateurs/administratrices doivent segementer le
   domaine STP, i.e. crer plusieurs spanning trees indpendants,
   particulirement si deux segment du rseau (bureaux), connects via un
   lien WAN, alors STP doit ter dsactiv sur ce lien.


Conclusion
*=*=*=*=*=

   Chaque systme compliqu a invitablement des erreurs et la
communication n'est pas une exception. Mais ceci n'est pas une rasion pour
stopper l'volution des technologies de l'information - nous pouvons
totalement chaper aux erreurs si nous ne faisons rien. En mme temps, la
complexit croissante des technoilogies demande une nouvelle approche de
dveloppement, une approche qui prendrait en compte toutes les conditions
et facteurs, incluant la scurit de l'information. Nous supposons que les
dveloppeurs doivent utiliser de nouvelles mthodes, comme la simulation
mathmatique du systme produit, qui ne prend pas seulement en compte les
impacts de contrle et de drangement sur le systme, mais qui prdise
galement le comportement du systme les lorsque les entrs sont hors d'un
rang spcifi.

   Il n'est pas tonnant que les dveloppeurs prennent en considration en
premier lieu le but premier de la cration d'un systme et que les autres
questions reoivent peu d'attention. Mais si nous n'incluons pas de mesures
de scurit appropries durant le dveloppement du systme, il est
pratiquement impossible de "rendre scuris" ce systme lorsqu'il est dj
cr. Au minimum, ce processus est trs cher, parce que les manques
fondamentaux de conception sont difficiles  dtecter et trop difficiles
(parfois - impossibles)  rparer au contraire de l'implmentation et des
erreurs de configuration.



References
*=*=*=*=*=
  
 [2]  Notre article en Russe dans LAN-magazine :
      http://www.osp.ru/lan/2002/01/088.htm , galement l, sur papier :
      Russia, Moscow, LAN, #01/2002, publi par les diteurs ``Open Systems''.
 [3]  Les autes matriaux de cette recherche sont publis en totalit  :
      http://olli.digger.org.ru/STP
 [4]  Rapport format de notre recherche :
      http://olli.digger.org.ru/STP/STP.pdf
 [5]  Code source en C du programme de gnration de BPDU :
      http://olli.digger.org.ru/STP/stp.c
 [6]  Shell script pour manipuler les paramtres STP :
      http://olli.digger.org.ru/STP/test.sh
 [7]  ANSI/IEEE 802.1d (Media Access Control, MAC) et ANSI/IEEE 802.1q
      (Virtual Bridged Local Area Networks) peuvent tre tlchargs depuis : 
      http://standards.ieee.org/getieee
 [8]  RFC2878 (PPP Bridging Control Protocol)
      http://www.ietf.org/rfc/rfc2878.txt
 [9]  Description de BPDU :
      http://www.protocols.com/pbook/bridge.htm#BPDU
 [10] Assigned Numbers (RFC1700) http://www.iana.org/numbers.html
 [11] Cisco STP Portfast feature
      http://www.cisco.com/warppublic/473/65.html
 [12] Description du support STP sur le 3Com SuperStack Switch 1000
      http://support.3com.com/infodeli/tools/switches/s_stack2/3c16902/man
      ual.a02/chap51.htm
 [13] Linux Bridge Project
      http://bridge.sourceforge.net/
 [14] Thomas Habets. Playing with ARP
      http://www.habets.pp.se/synscan/docs/play_arp-draft1.pdf
  
|=[ EOF ]=---------------------------------------------------------------=|

Traduction par [DegenereScience]Jacob (dbut) & DecereBrain (milieu et fin)
le Jeudi 8 Janvier 2004, 10:06.
Dsol pour le retard, vraiment.

L'article est excellant, dommage qu'il soit gch par une
licence-de-merde--la-con-que-a-donne-envie-de-coller-des-baffes--l'auteur
et une conclusion tout  la gloire du mouvement WhiteHat.
C'est con un WH, franchement.

"Il devait y avoir dans son me un interrupteur qui permettait de passer de
Christa  Antchrista. Le commutateur n'avait pas de position
intermdiaire. Et moi de me demander s'il y avait un dnominateur commun
entre celle qui tait on et celle qui tait off."
 - Amlie Nothomb, "Antchrista", 2003