Skip to the content.

Retour à l’accueil

TP - Attaque Macflood

Ce projet explore la mise en œuvre d’une attaque Macflood visant à saturer la table CAM d’un switch, provoquant ainsi une diffusion massive des trames réseau. Il comprend également la configuration de mécanismes de mitigation, tels que Port Security, pour protéger le réseau contre ce type d’attaque.


Topologie

topo 1

Configuration des hôtes

Exemple avec H5 (Attaquant)

Config /etc/network/interfaces

Modifier le fichier /etc/network/interfaces pour avoir la même configuration de l’hôte même après reboot.

# Management interface (used for dhclient)
auto mgmt0
iface mgmt0 inet dhcp
# Ethernet interface eth0
auto eth0
iface eth0 inet static
address 10.0.0.5
netmask 255.255.255.0
hwaddress ether 00:00:00:00:00:05
Explications

Hostname /etc/hostname

Le fichier /etc/hostname définit le nom d’hôte permanent de la machine, utilisé pour l’identifier sur le réseau et chargé automatiquement au démarrage, et le configure ici à H5 pour cette machine.

H5

Installation Macof :

apt update
apt -y --no-install-recommends install git python3-pip python-is-python3
tcpreplay
pip3 install scapy
git clone https://github.com/WhiteWinterWolf/macof.py.git
cd macof.py
chmod 755 macof.py && cp macof.py /usr/local/bin/

Config pour H6,H7 et H4 (Victimes)

Pour les hôtes H6, H7 et H4, on reproduit les mêmes étapes de configuration que pour H5, mais avec quelques différences. Ces hôtes n’ont pas besoin d’une interface mgmt0 ni d’accès à Internet. La configuration est simplifiée en ne configurant que l’interface eth0.

Config /etc/network/interfaces

Modifier le fichier /etc/network/interfaces pour s’assurer que l’hôte conserve sa configuration après un redémarrage.

# Ethernet interface eth0 
auto eth0
iface eth0 inet static
	address 10.0.0.X 
	netmask 255.255.255.0 
	hwaddress ether 00:00:00:00:00:XX

Fonctionnement normal d’un switch

Théorie

Lorsqu’un réseau est configuré pour la première fois, les tables CAM (Content Addressable Memory) des switchs sont vides. Les switchs entrent alors en mode learning pour construire leur table d’adresses MAC.

  1. Mode Learning des Switchs :
    • Lorsqu’un switch reçoit une trame, il examine l’adresse MAC source de la trame.
    • Il associe cette adresse MAC au port sur lequel la trame a été reçue, puis l’enregistre dans sa table CAM.
    • Cela permet au switch de rediriger les futures trames destinées à cette adresse vers le port approprié.
  2. Flooding des Paquets Inconnus :
    • Si le switch reçoit une trame avec une adresse MAC destination absente de sa table CAM, il diffuse cette trame sur tous les ports du même VLAN (sauf celui d’entrée).
    • Par exemple, si A envoie une trame à B mais que l’adresse MAC de B n’est pas encore connue, le switch effectuera un flooding. Cette diffusion permet à B de répondre, ce qui enrichit la table CAM du switch.
  3. Optimisation du Trafic :
    • Une fois les tables CAM remplies grâce aux trames ARP et au trafic réseau, les switchs peuvent rediriger efficacement les trames unicast uniquement vers le port correspondant à l’adresse MAC de destination.
    • Le flooding devient rare, car la majorité des adresses MAC sont déjà apprises

Mise en pratique

Montrer la CAM table de S2 avant toute action

Pour observer l’état initial de la table CAM sur S2, utilisez la commande suivante :

a

Effectuer un ping depuis H5 vers H6 et analyser

Sur H5, exécutez la commande suivante pour envoyer une requête ping à H6 :

ping 10.0.0.6 -c 1

La table CAM du switch n’étant pas encore remplie, le switch ne sait pas encore à quel port associer l’adresse MAC de H6. Donc, la requête ICMP Request est broadcast sur tous les ports du même VLAN pour atteindre sa destination.

La capture Wireshark sur les liens entre S2-H6 et S2-H7 montre que la requête passe par les deux liens.

a

Une fois le ping effectué, affichez à nouveau la table CAM de S2 pour observer les changements :

a

Le switch a appris l’adresse MAC de H5 et l’a associée à son port. De même, l’adresse MAC de H6 est désormais associée à son port.

Recommencez le ping depuis H5 vers H6. Lors de ce second ping, le switch utilise sa table CAM pour acheminer la requête directement vers le port de H6.

a

Sur le lien entre S2 et H6, on observe les deux échanges nécessaires pour le ping : la requête et la réponse ICMP. Sur le lien entre S2 et H7, aucune nouvelle requête n’est envoyée, confirmant que le switch n’a plus besoin de diffuser les paquets grâce à sa table CAM remplie.


Macflooding

Théorie

Le MAC flooding est une attaque réseau visant les commutateurs (switchs). Elle exploite une vulnérabilité liée à la gestion des tables CAM (Content Addressable Memory), utilisées par les switchs pour acheminer les trames réseau de manière efficace.

L’objectif de l’attaque est de saturer la table CAM du switch, ce qui perturbe son fonctionnement normal et le force à passer en mode de diffusion générale (fail-open).

Mise en place de l’attaque

Lancer une attaque macflood depuis H1 en expliquant la commande et analyser

Sur H5 : Lancer macof.py -i eth0 -c 8192 -w 1

La capture suivante montre l’envoi de trames générées par l’outil macof : a

Afficher le nombre d’entrée CAM Table du switch :

a

Pendant que macof tourne sur H5, effectuez un ping depuis H6 vers H7 :

a

a

Mise en place de la mitigation

Ports security + logs

Pour protéger un réseau contre les attaques par MAC flooding, la fonctionnalité Port Security des switchs permet de limiter le nombre d’adresses MAC apprises sur un port et de définir des actions en cas de violation. L’ajout de logs permet de surveiller et détecter les tentatives d’attaque.

Actions possibles

Mode Description
protect Bloque les trames des adresses MAC non autorisées, sans log ni désactivation du port.
restrict Bloque les trames des adresses non autorisées et génère des logs.
shutdown Désactive complètement le port en cas de violation.

Mise en place

topo 2

Activer port-security sur le port de H1 :

Sur S1 :

en
conf t
interface GigabitEthernet0/1
switchport mode access
switchport port-security
switchport port-security maximum 8 
switchport port-security violation shutdown
switchport port-security aging time 1
switchport port-security aging type inactivity
exit
errdisable recovery cause psecure-violation
errdisable recovery interval 60
logging console 7
end

Montrer que port-security est bien configuré :

show port-security

a

show port-security interface GigabitEthernet 0/1

a

Lancer une attaque par macflooding depuis H1

macof.py -i eth0 -c 1000 -w 1

Montrer que Gi0/1 est bien shutdown

show interfaces status

a

Montrer les logs au bout d’1 minute

show logging

a

On observe que l’interface Gi0/1 est passée en état “down” et qu’elle s’est “up” une minute plus tard.