Académique Documents
Professionnel Documents
Culture Documents
Le but de ce TP est de découvrir les fonctionnalités de base de Scappy, puis de les utiliser afin de réaliser
une attaque MiM par ARP poisoning.
Pour PC Victime et PC Hacker, vous utiliserez une machine linux, ou un PC portable. PC Hacker devra
être équipé du service Apache2.
Les connections au switch se font par la deuxième interface des machines physiques.
Installation de Scappy
Une fois les outils installés, pensez à désactiver votre première carte réseau avec la commande
sudo ifconfig moninterface down
Branchez votre Serveur Web sur portail captif. Installez Apache. Débranchez-le du portail captif pour
l'intégrer à votre réseau local. Vérifiez que le serveur web est accessible depuis PC Victime.
FOUKA Anisse 20/03/2024
BERRADA Mehdi Cyber 2A
Construction du paquet
>>> ping.show()
On voit que par défaut, l’instanciation de la classe ICMP() met le type du ping à echo-request. Par
contre, il n'y a pas d'encapsulation de ce protocole dans IP et Ethernet pour le moment.
D’après le protocole ICMP, Un paquet ICMP est encapsulé dans un datagramme IP. En effet, c’est dans
le datagramme IP qu’on va pouvoir renseigner l’adresse IP du destinataire. L’encapsulation entre
protocoles, dans scapy, est réalisée par l’opérateur / (slash).
>>> ping.show()
On constate que, en précisant simplement l’adresse IP du destinataire, scapy a compris tout seul qu’il
devait modifier les attributs dst , src et type de Ether() ainsi que l’adresse IP de l’émetteur (src
dans IP()) !
Voyons maintenant si l’adresse indiquée va répondre à cela par un paquet ICMP echo-reply.
Envoi du paquet
>>> sendp(ping)
La fonction sendp() ne fait qu’envoyer le paquet. Pour envoyer et recevoir, il faut utiliser les fonctions
srp() ou srp1() .
srp() renvoie deux objets : le premier contient les paquets émis et leurs réponses associées, l’autre
contient les paquets sans réponse.
Le ping entre la machine en 192.168.1.1 et la machine en 192.168.1.254 est passé. Nous avons 1
réponse.
rep contient en réalité une liste de couples de paquets. En l’occurrence, la liste ne contient qu’un seul
couple de paquets, qu’on peut afficher ainsi comme on afficherait n’importe quel élément d’une liste
en Python :
>>> rep[0]
Le résultat est un couple (tuple à deux valeurs). Pour afficher le paquet émis (ICMP echo-request), on
fera donc rep[0][0].show() , et pour le paquet reçu en réponse, rep[0][1].show() :
>>> rep[0][0].show()
>>> rep[0][1].show()
Pour simplifier tout cela, on peut préférer ici la fonction srp1() . Cette fonction renvoie un seul objet
À la lumière des explications ci-dessus, codez un programme qui effectue un ping sur toute une plage
d’adresses.
Note : pour désigner une plage d’adresse, vous pouvez simplement mettre ‘192.168.0.1-254’
dans l’attribut dst de IP
La commande traceroute permet de savoir par où passent vos paquets avant d’atteindre leur
destination. Pour cela, on se sert de l’attribut ttl (time to live) de l’en-tête IP. Cet attribut diminue de
1 à chaque routeur traversé, et lorsqu’il atteint 0, il "meurt" et le paquet est détruit. On peut alors
exploiter l’attribut src de son en-tête IP pour connaître l’adresse IP du routeur où il est "mort".
Pour connaître tous les routeurs traversés, il suffit donc de mettre, dans l’attribut ttl , un rang.
Si vous ne comprenez pas tout, un bout de code vaut mieux qu’un grand discours :
FOUKA Anisse 20/03/2024
BERRADA Mehdi Cyber 2A
La variable rep contiendra les paquets de réponse reçus avec succès, tandis que non_rep stockera les
paquets sans réponse dans le délai spécifié.
De cette manière, le routage des paquets peut se dérouler correctement sur le réseau. Cette
association MAC/IP est stockée dans le cache ARP. Le protocole ARP peut envoyer une requête afin de
connaître à qui appartient une adresse IP (Opération who-has) et une réponse qui permet d’identifier
l’adresse IP avec l’adresse MAC (Opération is-at). Cependant, ARP peut faire le contraire en utilisant
RARP (Reverse ARP).
L’ARP Cache Poisoning est une attaque extrêmement simple et rapide à mettre en place, car il s’agit
juste de modifier l’adresse MAC d’une entrée dans le cache ARP avec une autre adresse MAC.
Pour se faire, il suffit simplement de forger un paquet ARP de type "is-at" et de l’envoyer, avec scapy,
cette attaque peut se faire en une seule ligne.
Avant tout, on va garder une trace d’une table MAC normale, avant l’attaque. Sur le client, pinguez le
hacker et le serveur. Notez les résultats des commandes arp :
192.168.1.50 = 98:fc:84:e1:03:33
192.168.1.254 = 34:17:eb:9d:18:95
192.168.1.50 = 98:fc:84:e1:03:33
Pour l'instant, Quand PC Victim communique avec Serveur Web, la communication se fait sans
intermédiaire.
REQUETE
REPONSE
C'est le contenu des tables ARP qui permet à PC Victime et à Serveur de transmettre la trame au bon
équipement du premier coup.
À l'aide du schéma suivant, réfléchissez à ce qu'il faudrait modifier dans les tables ARP pour que les
équipement PC Victim et Serveur Web envoient systématiquement leurs trames à PC Hacker comme
intermédiaire.
REQUETE REQUETE
REPONSE
REPONSE
FOUKA Anisse 20/03/2024
BERRADA Mehdi Cyber 2A
Sur la machine PC Hacker, nous allons créer un script Python permettant de modifier les tables ARP de
PC Victim et Serveur Web. Pour cela nous allons transmettre des message ARP de type « is-at »
spontanément. C'est ce qu'on appelle un ARP gratuitous.
Mais nous allons falsifier le contenu de ces trames ARP en modifiant les MAC associés aux IP. Ainsi
nous forcerons PC Victime et Serveur Web à mettre à jour leur tables ARP avec des valeurs erronées.
Le script suivant est à enregistrer dans le fichier mitm.py sur PC Hacker. Vous complèterez les zones
en point d'interrogation. La commande = getmacbyip("IPdontjeveuxlaMAC") vous sera utile...
192.168.1.1 = 34:17:eb:9d:18:95
192.168.1.254 = 34:17:eb:9d:18:95
192.168.1.50 = 98:fc:84:e1:03:33
192.168.1.254 = 98:fc:84:e1:03:33
192.168.1.1 = 98:fc:84:e1:03:33
192.168.1.50 = 98:fc:84:e1:03:33
Les pings échouent car ils parviennent au PC Hackeur mais ne sont pas acheminés vers la
machine appropriée. Pour résoudre cela, il est nécessaire d'activer le forwarding IP sur le PC Hackeur,
ce qui lui permettra de fonctionner comme un routeur et de diriger le trafic réseau entre les victimes,
à savoir du Serveur au Hacker puis au Client.
En lançant un traceroute, nous constatons que le flux traverse notre machine hackeur, ce qui se
traduit par la présence de deux lignes dans le traceroute au lieu d'une seule. De plus, même lors d'un
simple ping, nous observons une redirection.
Depuis PC Victime, affichez la page du serveur dans un navigateur. La page est-elle la bonne ?
Nous constatons une tentative d'accès à la page HTTP du serveur, mais nous observons également
une redirection effectuée par la machine attaquante. Cela confirme que notre machine attaquante
FOUKA Anisse 20/03/2024
BERRADA Mehdi Cyber 2A
est placée entre le client et le serveur. Cependant, pour l'instant, l'attaquant se contente de recevoir
et de router les paquets. Ainsi, il est nécessaire de rediriger la requête vers le serveur Apache2 du PC
Hacker.
Pour modifier la page affichée par le client, on peut utiliser la redirection avec iptable :
ou
Dans ce cas, la page web qui s'affiche provient du serveur malveillant, identifiable par son contenu
distinct. Pourtant, l'adresse IP du serveur est correctement affichée dans la barre d'adresse du
navigateur, ce qui confirme le succès de l'attaque MITM. Nous avons donc réussi à détourner la
requête de la victime et à la rediriger vers un site web frauduleux.
3. Les parades
Sécurité du switch
Sur un switch Cisco, quelle commande permet de limiter le nombre de MAC qui peuvent se
connecter à un switch ?
Avec la commande "switchport port-security" sur l'interface de configuration du switch, nous avons
la capacité de restreindre le nombre d'adresses MAC pouvant se connecter à un port à un seul, tout
en autorisant l'utilisation d'adresses MAC statiques sur ce même port.
Dans notre configuration, où tous les ports ne sont pas utilisés comme dans une entreprise, nous
allons autoriser uniquement une adresse MAC (différente de celle du Hackeur) sur une interface
spécifique du switch. Pour ce faire, nous utilisons les commandes suivantes :
Nous avons configuré le mode "protect" pour éviter que le port ne soit mis hors service, comme le
ferait le mode "shutdown" ou "restrict".
FOUKA Anisse 20/03/2024
BERRADA Mehdi Cyber 2A
Recherchez sur le web une solution permettant de désactiver les ARP gratuitous sur les hôtes. Notez
cette commande :
Après le redémarrage, nous remarquons que l'attaque est contrecarrée car elle ne parvient plus à
modifier les entrées de la table ARP.
Cette solution peut poser des problèmes en empêchant certaines fonctionnalités du réseau.
Désactivez là.
Recherchez maintenant une solution permettant de figer la correspondance entre MAC et IP dans la
table ARP à l'aide d'une option de la commande arp.
Il est envisageable d'ajouter manuellement les associations ARP en utilisant la commande suivante :
arp -s <@ip> <@Mac>. Suite à cette opération, la table ARP cesse d'être mise à jour
automatiquement.
En effectuant des tests, nous constatons que l'attaque cesse de fonctionner et que la table ARP reste
inchangée, ne se mettant pas à jour.