Filtrage de niveau 2
Objectifs
Bonjour, après avoir fini les apprentissages de la semaine, vous connaîtrez certaines des fonctions de
filtrage présentes dans les commutateurs et équipements de niveau 2. Vous serez capable de donner
des exemples d’attaques qu’ils peuvent empêcher. Vous serez également capables d’expliquer
comment une politique de filtrage peut empêcher ces attaques et serez capable de mettre en œuvre
celle-ci dans un environnement linux.
Nous allons commencer par les mécanismes et protocoles utilisés dans les réseaux locaux virtuels.
Ceux-ci permettent au travers d’opérations de configuration de séparer logiquement des équipements
interconnectés au travers de commutateurs. Ces équipements sont alors dans des réseaux locaux
indépendants.
VLANs
Lorsque deux équipements sont dans deux VLANs différents, ceux-ci ne peuvent pas communiquer
directement. En limitant les possibilités de communications entre équipements la construction de
VLANs permet de limiter la surface d’attaque en cas de compromission d’un équipement du réseau.
Elle permet dans un autre registre de diminuer le coût de construction et de maintenance du réseau en
réduisant le nombre d’équipements utilisés et en remplaçant les manipulations physiques de
branchement et de débranchement de câbles par des opérations de configuration.
Ports d’accès
Dans son mode d’utilisation le plus courant, chaque port d’un commutateur non connecté à un autre
commutateur, est associé à un VLAN et est appelé port d’accès. Ce VLAN est généralement identifié
par un numéro. Lors de la réception d’une trame au travers d’un port, l’identifiant du VLAN est associé
à la trame. Le commutateur maintient par ailleurs en mémoire une table de filtrage contenant les
relations entre ports et identifiants de VLAN. Celle-ci permet de limiter la diffusion des trames aux
seuls ports correspondant à l’identifiant de VLAN associé à la trame.
Par exemple dans ce schéma, les ports 0, 3 et 5 du commutateur A sont associés au VLAN 2 et les ports
2 et 4 au VLAN 5. Supposons qu’une trame envoyée en broadcast soit reçue par le port 0. Le
commutateur associe la trame au VLAN 2 lors de sa réception puis lors du processus de commutation
utilise la table de filtrage du VLAN 2 afin que la trame ne soit diffusée qu’au travers des ports associés
c’est-à-dire les ports 3 et 5.
Ports trunk
Lorsqu’un commutateur est connecté à un autre commutateur, il est nécessaire pour le deuxième
commutateur de connaître l’identifiant de VLAN associé aux trames reçues par le premier. Cette
information est obtenue grâce à une extension du protocole IEEE 802.1D appelée 802.1Q. Dans 802.1Q
un champ de contrôle complémentaire appelé étiquette est inséré entre le champ adresse source et le
champ type au niveau de la couche MAC. Ce champ de 4 octets contient un sous-champ VID
identifiant le VLAN auquel la trame a été associée lors sa réception par le premier commutateur l’ayant
reçu.
Afin de provoquer l’insertion de ce champ, les ports interconnectant les commutateurs entre eux,
appelés ports trunk, sont configurés pour réémettre les trames reçues par le commutateur
accompagnées de l’étiquette adéquate.
Exemple
Par exemple, lors de la réception de la trame en broadcast au travers du port 0 dans notre exemple,
celle-ci est associée au VLAN 2 puis est réémise au travers des ports 3 et 5. Elle est également émise au
travers du port 1 du commutateur A. Avant son émission cette trame est modifiée par l’ajout de
l’étiquette. Lors de la réception de la trame par le commutateur B, l’étiquette est enlevée et
l’identifiant de VLAN 2 est associé à la trame. Le commutateur B utilise ensuite la table de filtrage afin
que la trame ne soit diffusée qu’au travers des ports 0 et 3.
Filtrage de niveau 2
Deux équipements dans deux VLANs différents ne peuvent communiquer directement. Cependant ils
peuvent communiquer indirectement en utilisant un équipement réalisant du routage entre les
réseaux locaux. Cet équipement possède généralement des fonctions de filtrage permettant de
contrôler les communications à partir du niveau réseau (un routeur ou commutateur de niveau 3 par
exemple).
Les VLANs permettent de créer des groupes d’équipements qui vont pouvoir dialoguer les uns avec les
autres directement indépendamment de leur position topologique. Il peut être nécessaire à l’intérieur
de ces groupes de contrôler les communications afin de diminuer de nouveau la surface d’attaque. Ces
attaques peuvent viser les protocoles de niveau liaison (usurpation d’adresse MAC par exemple) mais
également les protocoles de niveau liaison qui vont participer à la configuration des commutateurs.
Parmi ceux-ci, on trouve les protocoles permettant d’éviter la formation de boucles (Spanning tree,
Shortest Path Bridging), ou la découverte de réseau (Link Layer Discovery Protocol, …), la gestion de
groupes de multicast au niveau liaison (Generic Attribute Registration Protocol, …), la gestion des vlans
(Vlan Trunking Protocol, …). Pour cela certains commutateurs possèdent des fonctions permettant de
filtrer les trames en fonctions de différents critères. Généralement la politique de filtrage est exprimée
sous la forme de règles que l’on associe par la suite à un port du commutateur ou à un VLAN.
Exemple : Usurpation d’adresse MAC
Attaque
L’usurpation d’adresse MAC est un exemple d’attaque à ce niveau qui peut entre autres permettre à
un attaquant de modifier la table de commutation d’un commutateur afin de détourner du trafic à son
profit. En effet dans la plupart des commutateurs, la table de commutation est construite par
l’observation. Lorsqu’une trame en provenance de V est reçue, le commutateur note dans la table de
commutation l’adresse source 02:42:c0:a8:01:01 de la trame et le port de réception 0.
Cette information est utilisée par la suite par le commutateur lorsqu’une trame à destination de
02:42:c0:a8:01:01 est reçue afin de limiter l’émission au port 0.
Imaginons par exemple la situation où l’équipement A d’adresse MAC 02:42:c0:a8:02:01 connecté au
port 2 usurpe l’adresse MAC de V 02:42:c0:a8:01:01 et envoie une trame à B. Le commutateur une fois
cette trame reçue note la correspondance entre l’adresse MAC de V et le port 2 au travers duquel la
trame a été reçue.
Lorsque B où tout autre équipement envoie par la suite une trame à V, celle-ci est commutée en
fonction de cette nouvelle correspondance et est en réalité reçue par A.
Contre-mesure
Sous linux la commande ebtables permet de définir des règles afin d’interdire ou d’autoriser les trames
en fonction du contenu de différents champs comme les adresses MAC source et destination, le
protocole transporté ou les interfaces utilisées.
On décide pour la suite de construire une politique où l’action par défaut est l’interdiction. Vis-à-vis de
l’attaque, le trafic peut être considéré comme légitime si l’adresse MAC source de la trame correspond
bien à l’équipement qui lui est connecté. Ceci correspond à la première règle dans la table. La seconde
règle a le même rôle pour V.
Cependant comme nous utilisons une politique où tout ce qui n’est pas autorisé est interdit, il nous
faut également autoriser explicitement le trafic vers A et V qui vient du commutateur 2. Ceci est fait au
travers de la dernière règle. Celle-ci autorise tout type de trame reçu par le port 1. On suppose que
tout équipement connecté au commutateur 2 est soumis aux mêmes contraintes que A et V. On fait
donc confiance aux trames reçues au travers du port 1.
Dans certains commutateurs ces règles peuvent être construites de manière semi-automatique par
exemple en mémorisant l’adresse MAC source de la première trame émise par un équipement lorsqu’il
est branché à un port du commutateur.
Filtrage des autres protocoles de réseaux locaux
Il existe un certain nombre de protocoles entre la couche liaison de donnée et la couche IP ou de
protocoles de plus haut niveau utilisés dans le cadre de réseaux locaux. Parmi ceux-ci on trouve les
protocoles d’adaptation entre le protocole IP et la couche liaison : protocoles de résolution d’adresses
comme ARP, protocoles de configuration des équipements du réseau comme DHCP ou NDP. Ces
protocoles peuvent être utilisés pour des attaques. Nous l’avons vu avec ARP en semaine 1.
Exemple-Attaque ARP
Attaque
Pour rappel, dans cette attaque, A envoie une requête ou une réponse ARP qui modifie le contenu du
cache ARP de B de telle sorte que tout paquet IP envoyé par la suite de B à V soit en fait envoyée à A.
Contre-mesure
Sous linux la commande arptables permet de définir des règles afin d’autoriser ou d’interdire les
messages ARP en fonction des valeurs des champs du protocole ARP. De nouveau nous utilisons une
politique où l’action par défaut est l’interdiction. Schématiquement on peut représenter ces règles de
la façon suivante.
La première règle autorise la réception au travers du port 0 de requêtes ARP (opération ARP : Request)
dont le champ ARP adresse MAC source contient l’adresse MAC de A 02:42:c0:a8:01:01 et dont le
champ ARP adresse IP source est son adresse IP [Link]. La seconde règle autorise les réponses
avec une adresse MAC correcte.
Des règles similaires et associées aux ports 1 et 2 permettent l’émission de requêtes ARP vers V et de
réponses ARP à des requêtes de V.
De nouveau ces règles peuvent être construites de manière automatique sur certains commutateurs
par l’observation du trafic DHCP par exemple.