
Exploite la configuration IPv6 par défaut de Windows pour usurper le DNS via DHCPv6, redirigeant le trafic de la victime en vue d'un relais d'identifiants et d'attaques man-in-the-middle lors de tests d'intrusion.
mitm6 est un outil de test d'intrusion qui exploite la configuration par défaut de Windows pour prendre le contrôle du serveur DNS par défaut. Il le fait en répondant aux messages DHCPv6, en fournissant aux victimes une adresse IPv6 link-local et en définissant l'hôte de l'attaquant comme serveur DNS par défaut. En tant que serveur DNS, mitm6 répond sélectivement aux requêtes DNS choisies par l'attaquant et redirige le trafic des victimes vers la machine de l'attaquant plutôt que vers le serveur légitime. Pour une explication complète de l'attaque, consultez notre blog à propos de mitm6. Mitm6 est conçu pour fonctionner avec ntlmrelayx d'impacket pour l'usurpation WPAD et le relais d'identifiants.
mitm6 est compatible avec Python 2.7 et 3.x. Vous pouvez installer les dépendances pour votre version avec pip install -r requirements.txt. Dans les deux cas, mitm6 utilise les paquets suivants :
Pour Python 2.7, il utilise le module de rétroportage ipaddress.
Vous pouvez installer la dernière version depuis PyPI avec , ou la version la plus récente depuis les sources avec après avoir cloné ce dépôt git.
pip install mitm6python setup.py installAprès installation, mitm6 sera disponible en tant que programme en ligne de commande appelé mitm6. Comme il utilise la capture brute de paquets avec Scapy, il doit être exécuté en tant que root. mitm6 devrait détecter vos paramètres réseau par défaut et utiliser votre interface principale pour son usurpation. La seule option que vous aurez probablement besoin de spécifier est le domain Active Directory que vous usurpez. Pour un réglage avancé, les options suivantes sont disponibles :
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
Pour de l'aide ou pour signaler des problèmes, visitez https://github.com/dirkjanm/mitm6
arguments optionnels :
-h, --help affiche ce message d'aide et quitte
-i INTERFACE, --interface INTERFACE
Interface à utiliser (par défaut : détection automatique)
-l LOCALDOMAIN, --localdomain LOCALDOMAIN
Nom de domaine à utiliser comme domaine de recherche DNS (par défaut : utilise le premier domaine DNS)
-4 ADDRESS, --ipv4 ADDRESS
Adresse IPv4 depuis laquelle envoyer les paquets (par défaut : détection automatique)
-6 ADDRESS, --ipv6 ADDRESS
Adresse IPv6 link-local depuis laquelle envoyer les paquets (par défaut : détection automatique)
-m ADDRESS, --mac ADDRESS
Adresse MAC personnalisée - probablement casse des trucs (par défaut : MAC de l'interface sélectionnée)
-a, --no-ra Ne pas s'annoncer nous-mêmes (utile pour les réseaux qui détectent les annonces de routeur non autorisées)
-r TARGET, --relay TARGET
Cible du relais d'authentification, sera utilisée comme nom d'hôte du faux serveur DNS pour déclencher l'authentification Kerberos
-v, --verbose Affiche des informations détaillées
--debug Affiche des informations de débogage
Options de filtrage :
-d DOMAIN, --domain DOMAIN
Nom de domaine pour filtrer les requêtes DNS (principe de liste blanche, plusieurs peuvent être spécifiés.)
-b DOMAIN, --blocklist DOMAIN, --blacklist DOMAIN
Nom de domaine pour filtrer les requêtes DNS (principe de liste noire, plusieurs peuvent être spécifiés.)
-hw DOMAIN, -ha DOMAIN, --host-allowlist DOMAIN, --host-whitelist DOMAIN
Nom d'hôte (FQDN) pour filtrer les requêtes DHCPv6 (principe de liste blanche, plusieurs peuvent être spécifiés.)
-hb DOMAIN, --host-blocklist DOMAIN, --host-blacklist DOMAIN
Nom d'hôte (FQDN) pour filtrer les requêtes DHCPv6 (principe de liste noire, plusieurs peuvent être spécifiés.)
--ignore-nofqdn Ignorer les requêtes DHCPv6 qui ne contiennent pas l'option Fully Qualified Domain Name (FQDN).
Vous pouvez remplacer manuellement la plupart des options de détection automatique (bien que remplacer l'adresse MAC casse certaines choses). Si le réseau possède du matériel qui bloque ou détecte les messages d'annonce de routeur non autorisés, vous pouvez ajouter le drapeau --no-ra pour ne pas les diffuser. Les annonces de routeur ne sont pas nécessaires au fonctionnement de mitm6 car il repose principalement sur les messages DHCPv6.
Plusieurs options de filtrage sont disponibles pour sélectionner les hôtes que vous souhaitez attaquer et usurper. Tout d'abord, il y a les options --host-allowlist et --host-blocklist (ou -hw et -hb en abrégé), qui prennent un domaine (partiel) comme argument. Les requêtes DHCPv6 entrantes sont filtrées en fonction de cette liste. La propriété vérifiée est l'option DHCPv6 FQDN, dans laquelle le client fournit son nom d'hôte.
Il en va de même pour les requêtes DNS, pour lesquelles l'option --domain (ou -d) est disponible pour spécifier le(s) domaine(s) que vous souhaitez usurper. Bloquer des domaines spécifiques est également possible avec --blocklist/-b. Les deux paramètres peuvent être spécifiés plusieurs fois pour inclure/bloquer plusieurs domaines (par exemple -d domain.local -d otherdomain.local -b somehost.domain.local -b somehost.otherdomain.local).
Pour le filtrage des hôtes et des DNS, une simple correspondance de chaîne est effectuée. Donc, si vous choisissez de répondre à wpad, il répondra également aux requêtes pour wpad.corpdomain.com. Si vous souhaitez un filtrage plus spécifique, utilisez à la fois les options de liste blanche et de liste noire, car la liste noire a priorité sur la liste blanche.
Par défaut, le premier domaine spécifié sera utilisé comme domaine de recherche DNS ; si vous souhaitez spécifier ce domaine vous-même explicitement, utilisez l'option --localdomain.
mitm6 est conçu comme un outil de test d'intrusion et devrait donc impacter le réseau le moins possible. C'est la principale raison pour laquelle mitm6 n'implémente pas actuellement une attaque de type machine-in-the-middle complète, comme on le voit par exemple dans l'attaque SLAAC. Pour minimiser davantage l'impact, les adresses IP attribuées ont des valeurs de durée de vie (TTL) faibles. Le bail expire dans les 5 minutes après l'arrêt de mitm6, ce qui supprime le serveur DNS de la configuration des victimes. Pour éviter que les réponses DNS soient mises en cache, toutes les réponses sont envoyées avec un TTL de 100 secondes, ce qui garantit que le cache est vidé en quelques minutes après la sortie de l'outil.
mitm6 est conçu pour être utilisé avec ntlmrelayx. Vous devez exécuter les outils côte à côte. Dans ce scénario, mitm6 usurpe le DNS, ce qui amène les victimes à se connecter à ntlmrelayx pour les connexions HTTP et SMB. Pour cela, vous devez vous assurer d'exécuter ntlmrelayx avec l'option -6, qui le fera écouter à la fois sur IPv4 et IPv6. Pour obtenir les identifiants pour WPAD, spécifiez le nom d'hôte WPAD à usurper avec -wh NOMHOTE (tout nom d'hôte inexistant dans le domaine local fonctionnera puisque mitm6 est le serveur DNS). Optionnellement, vous pouvez également utiliser le paramètre -wa N avec un nombre de tentatives pour demander l'authentification pour le fichier WPAD lui-même au cas où vous soupçonneriez que les victimes n'ont pas le correctif MS16-077 appliqué.
Vous pouvez également utiliser mitm6 pour relayer l'authentification Kerberos, notamment via DNS. Pour ce faire, utilisez le paramètre --relay et spécifiez un hôte vers lequel vous souhaitez relayer. Cet hôte sera usurpé, et mitm6 essaiera de convaincre vos victimes d'envoyer des mises à jour dynamiques authentifiées en utilisant l'authentification Kerberos vers krbrelayx. Plus d'informations sur cette attaque sont disponibles sur le blog suivant : https://dirkjanm.io/relaying-kerberos-over-dns-with-krbrelayx-and-mitm6/
L'équipe Fox-IT Security Research Team a publié des signatures Snort et Suricata pour détecter le trafic DHCPv6 non autorisé et les réponses WPAD sur IPv6. Les signatures sont disponibles ici : https://gist.github.com/fox-srt/98f29051fe56a1695de8e914c4a2373f