
Nutzt die Standardkonfiguration von Windows IPv6 aus, um DNS über DHCPv6 zu spoofen, den Datenverkehr des Opfers umzuleiten für Credential-Relaying und Man-in-the-Middle-Angriffe während Penetrationstests.
mitm6 ist ein Pentesting-Tool, das die Standardkonfiguration von Windows ausnutzt, um den Standard-DNS-Server zu übernehmen. Dies geschieht durch Antworten auf DHCPv6-Nachrichten, wobei den Opfern eine link-lokale IPv6-Adresse bereitgestellt und der Host des Angreifers als Standard-DNS-Server festgelegt wird. Als DNS-Server antwortet mitm6 selektiv auf DNS-Abfragen der Wahl des Angreifers und leitet den Datenverkehr der Opfer zum Angreifer-Rechner um, anstatt zum legitimen Server. Eine vollständige Erklärung des Angriffs finden Sie in unserem Blog über mitm6. Mitm6 ist dafür ausgelegt, mit ntlmrelayx aus impacket für WPAD-Spoofing und Credential-Relaying zusammenzuarbeiten.
mitm6 ist sowohl mit Python 2.7 als auch 3.x kompatibel. Sie können die Anforderungen für Ihre Version mit pip install -r requirements.txt installieren. In beiden Fällen verwendet mitm6 die folgenden Pakete:
Für Python 2.7 wird das Backport-Modul ipaddress verwendet.
Sie können die neueste Version von PyPI mit installieren oder die neueste Version aus dem Quellcode mit nach dem Klonen dieses Git-Repositorys.
pip install mitm6python setup.py installNach der Installation steht mitm6 als Kommandozeilenprogramm namens mitm6 zur Verfügung. Da es rohe Paketerfassung mit Scapy verwendet, sollte es als root ausgeführt werden. mitm6 sollte Ihre Netzwerkeinstellungen standardmäßig erkennen und Ihr primäres Interface für das Spoofing verwenden. Die einzige Option, die Sie wahrscheinlich angeben müssen, ist die AD-Domäne, die Sie spoofen. Für erweiterte Einstellungen stehen die folgenden Optionen zur Verfügung:
usage: mitm6 [-h] [-i INTERFACE] [-l LOCALDOMAIN] [-4 ADDRESS] [-6 ADDRESS] [-m ADDRESS] [-a] [-r TARGET] [-v] [--debug]
[-d DOMAIN] [-b DOMAIN] [-hw DOMAIN] [-hb DOMAIN] [--ignore-nofqdn]
mitm6 - pwning IPv4 via IPv6
For help or reporting issues, visit https://github.com/dirkjanm/mitm6
optional arguments:
-h, --help show this help message and exit
-i INTERFACE, --interface INTERFACE
Interface to use (default: autodetect)
-l LOCALDOMAIN, --localdomain LOCALDOMAIN
Domain name to use as DNS search domain (default: use first DNS domain)
-4 ADDRESS, --ipv4 ADDRESS
IPv4 address to send packets from (default: autodetect)
-6 ADDRESS, --ipv6 ADDRESS
IPv6 link-local address to send packets from (default: autodetect)
-m ADDRESS, --mac ADDRESS
Custom mac address - probably breaks stuff (default: mac of selected interface)
-a, --no-ra Do not advertise ourselves (useful for networks which detect rogue Router Advertisements)
-r TARGET, --relay TARGET
Authentication relay target, will be used as fake DNS server hostname to trigger Kerberos auth
-v, --verbose Show verbose information
--debug Show debug information
Filtering options:
-d DOMAIN, --domain DOMAIN
Domain name to filter DNS queries on (Allowlist principle, multiple can be specified.)
-b DOMAIN, --blocklist DOMAIN, --blacklist DOMAIN
Domain name to filter DNS queries on (Blocklist principle, multiple can be specified.)
-hw DOMAIN, -ha DOMAIN, --host-allowlist DOMAIN, --host-whitelist DOMAIN
Hostname (FQDN) to filter DHCPv6 queries on (Allowlist principle, multiple can be specified.)
-hb DOMAIN, --host-blocklist DOMAIN, --host-blacklist DOMAIN
Hostname (FQDN) to filter DHCPv6 queries on (Blocklist principle, multiple can be specified.)
--ignore-nofqdn Ignore DHCPv6 queries that do not contain the Fully Qualified Domain Name (FQDN) option.
Sie können die meisten Autoerkennungsoptionen manuell überschreiben (obwohl das Überschreiben der MAC-Adresse Dinge kaputt machen kann). Wenn das Netzwerk Hardware hat, die betrügerische Router Advertisement-Nachrichten blockiert oder erkennt, können Sie das Flag --no-ra hinzufügen, um diese nicht zu senden. Router Advertisements sind für die Funktion von mitm6 nicht erforderlich, da es hauptsächlich auf DHCPv6-Nachrichten basiert.
Es stehen mehrere Filteroptionen zur Verfügung, um auszuwählen, welche Hosts Sie angreifen und spoofen möchten. Zuerst gibt es die Optionen --host-allowlist und --host-blocklist (oder kurz -hw und -hb), die eine (teilweise) Domäne als Argument nehmen. Eingehende DHCPv6-Anfragen werden gegen diese Liste gefiltert. Die geprüfte Eigenschaft ist die DHCPv6 FQDN-Option, in der der Client seinen Hostnamen angibt. Gleiches gilt für DNS-Anfragen, dafür steht die Option --domain (oder -d) zur Verfügung, mit der Sie angeben können, welche Domäne(n) Sie spoofen möchten. Das Blockieren bestimmter Domänen ist ebenfalls mit --blocklist/-b möglich. Beide Parameter können mehrfach angegeben werden, um mehrere Domänen einzuschließen/zu blockieren (z.B. -d domain.local -d otherdomain.local -b somehost.domain.local -b somehost.otherdomain.local).
Sowohl für das Host- als auch das DNS-Filtering wird einfaches String-Matching durchgeführt. Wenn Sie sich also entscheiden, auf wpad zu antworten, wird auch auf Anfragen für wpad.corpdomain.com geantwortet. Wenn Sie spezifischeres Filtern wünschen, verwenden Sie sowohl die Allowlist- als auch die Blocklist-Optionen, da die Blocklist Vorrang vor der Allowlist hat. Standardmäßig wird die zuerst angegebene Domäne als DNS-Suchdomäne verwendet. Wenn Sie diese Domäne explizit selbst angeben möchten, verwenden Sie die Option --localdomain.
mitm6 ist als Penetrationstest-Werkzeug konzipiert und sollte daher das Netzwerk so wenig wie möglich beeinträchtigen. Dies ist der Hauptgrund, warum mitm6 derzeit keine vollständige Man-in-the-Middle-Angriff implementiert, wie wir ihn beispielsweise beim SLAAC-Angriff sehen. Um die Auswirkungen weiter zu minimieren, haben die zugewiesenen IP-Adressen niedrige Time-to-Live (TTL)-Werte. Die Lease läuft innerhalb von 5 Minuten ab, wenn mitm6 gestoppt wird, wodurch der DNS-Server aus der Konfiguration der Opfer entfernt wird. Um zu verhindern, dass DNS-Antworten zwischengespeichert werden, werden alle Antworten mit einer TTL von 100 Sekunden gesendet, was sicherstellt, dass der Cache innerhalb von Minuten nach Beenden des Tools geleert wird.
mitm6 ist dafür ausgelegt, mit ntlmrelayx verwendet zu werden. Sie sollten die Tools nebeneinander ausführen; in diesem Szenario spoofed mitm6 den DNS, sodass Opfer sich für HTTP- und SMB-Verbindungen mit ntlmrelayx verbinden. Dazu müssen Sie sicherstellen, dass ntlmrelayx mit der Option -6 ausgeführt wird, wodurch es sowohl auf IPv4 als auch IPv6 lauscht. Um Anmeldedaten für WPAD zu erhalten, geben Sie den WPAD-Hostnamen an, der mit -wh HOSTNAME gespooft werden soll (jeder nicht vorhandene Hostname in der lokalen Domäne funktioniert, da mitm6 der DNS-Server ist). Optional können Sie auch den Parameter -wa N mit einer Anzahl von Versuchen verwenden, um eine Authentifizierung für die WPAD-Datei selbst anzufordern, falls Sie vermuten, dass die Opfer nicht den MS16-077-Patch installiert haben.
Sie können mitm6 auch verwenden, um Kerberos-Authentifizierung zu relayen, insbesondere über DNS. Verwenden Sie dazu den Parameter --relay und geben Sie einen Host an, zu dem Sie relayen möchten. Dieser Host wird imitiert, und mitm6 wird versuchen, Ihre Opfer dazu zu bringen, authentifizierte dynamische Updates unter Verwendung der Kerberos-Authentifizierung an krbrelayx zu senden. Weitere Informationen zu diesem Angriff finden Sie im folgenden Blog: https://dirkjanm.io/relaying-kerberos-over-dns-with-krbrelayx-and-mitm6/
Das Fox-IT Security Research Team hat Snort- und Suricata-Signaturen veröffentlicht, um betrügerischen DHCPv6-Verkehr und WPAD-Antworten über IPv6 zu erkennen. Die Signaturen sind hier verfügbar: https://gist.github.com/fox-srt/98f29051fe56a1695de8e914c4a2373f