
Sfrutta la configurazione predefinita di Windows IPv6 per falsificare il DNS tramite DHCPv6, reindirizzando il traffico della vittima per il credential relaying e attacchi man-in-the-middle durante i test di penetrazione.
mitm6 è uno strumento di penetration testing che sfrutta la configurazione predefinita di Windows per prendere il controllo del server DNS predefinito. Lo fa rispondendo ai messaggi DHCPv6, fornendo alle vittime un indirizzo IPv6 link-local e impostando l'host dell'attaccante come server DNS predefinito. Come server DNS, mitm6 risponderà selettivamente alle query DNS scelte dall'attaccante e reindirizzerà il traffico delle vittime verso la macchina dell'attaccante invece del server legittimo. Per una spiegazione completa dell'attacco, consulta il nostro blog su mitm6. Mitm6 è progettato per funzionare insieme a ntlmrelayx da impacket per lo spoofing WPAD e il relay di credenziali.
mitm6 è compatibile sia con Python 2.7 che con 3.x. Puoi installare i requisiti per la tua versione con pip install -r requirements.txt. In entrambi i casi, mitm6 utilizza i seguenti pacchetti:
Per Python 2.7, utilizza il modulo backport ipaddress.
Puoi installare l'ultima versione da PyPI con , oppure l'ultima versione dal sorgente con dopo aver clonato questo repository git.
pip install mitm6python setup.py installDopo l'installazione, mitm6 sarà disponibile come programma da riga di comando chiamato mitm6. Poiché utilizza la cattura di pacchetti raw con Scapy, dovrebbe essere eseguito come root. mitm6 dovrebbe rilevare le impostazioni di rete predefinite e utilizzare la tua interfaccia primaria per lo spoofing. L'unica opzione che probabilmente dovrai specificare è il dominio AD che stai spoofando. Per una regolazione avanzata, sono disponibili le seguenti opzioni:
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.
Puoi sovrascrivere manualmente la maggior parte delle opzioni di rilevamento automatico (anche se sovrascrivere l'indirizzo MAC romperà le cose). Se la rete ha hardware che blocca o rileva messaggi Router Advertisement non autorizzati, puoi aggiungere il flag --no-ra per non trasmetterli. I Router Advertisement non sono necessari per il funzionamento di mitm6 poiché si basa principalmente sui messaggi DHCPv6.
Sono disponibili diverse opzioni di filtro per selezionare quali host vuoi attaccare e spoofare. Prima ci sono le opzioni --host-allowlist e --host-blocklist (o in breve -hw e -hb), che accettano un dominio (parziale) come argomento. Le richieste DHCPv6 in entrata verranno filtrate in base a questa lista. La proprietà controllata è l'opzione DHCPv6 FQND, in cui il client fornisce il proprio hostname.
Lo stesso vale per le richieste DNS, per le quali è disponibile l'opzione --domain (o -d), dove puoi specificare quale/i dominio/i vuoi spoofare. Bloccare domini specifici è possibile anche con --blocklist/-b. Entrambi i parametri possono essere specificati più volte per includere/bloccare più domini (ad esempio -d domain.local -d otherdomain.local -b somehost.domain.local -b somehost.otherdomain.local).
Sia per il filtro host che DNS, viene eseguito un semplice confronto di stringhe. Quindi se scegli di rispondere a wpad, risponderà anche a query per wpad.corpdomain.com. Se vuoi un filtro più specifico, usa entrambe le opzioni allowlist e blocklist, poiché la blocklist ha la precedenza sull'allowlist.
Per impostazione predefinita, il primo dominio specificato verrà utilizzato come dominio di ricerca DNS, se vuoi specificare esplicitamente questo dominio tu stesso, usa l'opzione --localdomain.
mitm6 è progettato come strumento di penetration testing e quindi dovrebbe avere il minor impatto possibile sulla rete. Questa è la ragione principale per cui mitm6 attualmente non implementa un attacco man-in-the-middle completo, come vediamo ad esempio nell'attacco SLAAC. Per ridurre ulteriormente l'impatto, gli indirizzi IP assegnati hanno valori di time-to-live (TTL) bassi. Il lease scadrà entro 5 minuti quando mitm6 viene fermato, il che rimuoverà il server DNS dalla configurazione delle vittime. Per evitare che le risposte DNS vengano memorizzate nella cache, tutte le risposte vengono inviate con un TTL di 100 secondi, che garantisce che la cache venga cancellata entro pochi minuti dall'uscita dello strumento.
mitm6 è progettato per essere utilizzato con ntlmrelayx. Dovresti eseguire gli strumenti uno accanto all'altro, in questo scenario mitm6 spoofarà il DNS, spingendo le vittime a connettersi a ntlmrelayx per le connessioni HTTP e SMB. Per questo devi assicurarti di eseguire ntlmrelayx con l'opzione -6, che lo farà ascoltare sia su IPv4 che su IPv6. Per ottenere le credenziali per WPAD, specifica l'hostname WPAD da spoofare con -wh HOSTNAME (qualsiasi hostname inesistente nel dominio locale funzionerà poiché mitm6 è il server DNS). Opzionalmente puoi anche usare il parametro -wa N con un numero di tentativi per richiedere l'autenticazione per il file WPAD stesso nel caso sospetti che le vittime non abbiano applicato la patch MS16-077.
Puoi anche usare mitm6 per il relay dell'autenticazione Kerberos, specialmente via DNS. Per fare ciò, usa il parametro --relay e specifica un host a cui vuoi fare il relay. Questo host verrà impersonato, e mitm6 cercherà di convincere le tue vittime a inviare aggiornamenti dinamici autenticati usando l'autenticazione Kerberos a krbrelayx. Maggiori informazioni su questo attacco sono disponibili nel seguente blog: https://dirkjanm.io/relaying-kerberos-over-dns-with-krbrelayx-and-mitm6/
Il team Fox-IT Security Research Team ha rilasciato firme Snort e Suricata per rilevare traffico DHCPv6 non autorizzato e risposte WPAD su IPv6. Le firme sono disponibili qui: https://gist.github.com/fox-srt/98f29051fe56a1695de8e914c4a2373f