Table de Matieres
I. Présentation
Dans cet article, nous aborderons les méthodes de remédiation passives face aux vulnérabilités du protocole IPv6, sur une machine Windows.
Cet article fait suite à la découverte récente d’une nouvelle vulnérabilité (CVE-2024-38063) dans l’implémentation du protocole IPv6 sur Windows. L’exploitation de cette faiblesse permet une exécution de code à distance, révélant ainsi une faiblesse significative. Cette vulnérabilité expose non seulement les systèmes à des attaques potentielles, mais ouvre également la voie à divers autres exploits futurs…
Dans ce contexte, nous explorerons les stratégies pour atténuer ces risques et maintenir un contrôle efficace au sein de votre entreprise. Autrement dit, nous verrons comment et pourquoi les machines Windows de votre entreprise peuvent se passer de l’IPv6.
II. Pourquoi se passer d’IPv6 ?
Nous ne remettrons pas en question les recommandations précédentes concernant IPv6, mais il est important de tirer des conclusions claires sur son utilisation. Si IPv6 n’est pas encore administré ou déployé dans votre entreprise, son activation en interne peut être superflue. Sa présence ne fait qu’augmenter la surface d’attaque de vos machines.
De plus, la plupart des routeurs modernes utilisent la NAT (Network Address Translation), ce qui aide à gérer efficacement l’épuisement des adresses IPv4.
La question essentielle devient alors : comment se passer d’IPv6 ? Deux options principales se présentent :
- Désactiver IPv6 au niveau système : cette méthode désactive complètement le protocole IPv6 sur l’ensemble du système. Cela peut être approprié si vous ne prévoyez pas d’utiliser IPv6 à l’avenir ou si vous souhaitez éviter tout risque associé à ce protocole.
- Empêcher l’utilisation d’IPv6 au niveau de l’interface : vous pouvez configurer les interfaces réseau pour ne pas utiliser IPv6 tout en maintenant la capacité de le reconnaître. Cela équivaut à avoir une carte SIM dans un téléphone sans solde ni forfait d’appel : la carte est présente, mais le service n’est pas utilisé. Cette approche est souvent préférable à une désactivation totale, car elle conserve une certaine fonctionnalité sans exposer les systèmes aux risques potentiels d’IPv6.
Microsoft a rapidement publié un correctif pour la vulnérabilité CVE-2024-38063. Cependant, le cycle de patching peut varier d’une entreprise à l’autre, certaines entreprises possèdent encore des serveurs non supportés comme ceux sous Windows Server 2012 R2 ou version inférieure. Dans ce cas, comment s’y prendre pour désactiver IPv6 ?
III. Fragilité du protocole IPv6
Contrairement à IPv4, IPv6 utilise une auto-configuration via le mécanisme SLAAC (Stateless Address Autoconfiguration) permettant à une machine de générer une adresse IP unique à partir d’une partie de son adresse MAC, ce qui réduit la dépendance vis-à-vis du service DHCP.
Cependant, cette fonctionnalité peut exposer les systèmes à des attaques. Par exemple, des machines malveillantes peuvent tromper les systèmes en envoyant des configurations DNS falsifiées. Tout cela à cause du paramètre suivant activé par défaut sur les serveurs Windows Server et les postes de travail Windows.
L’attaque la plus connue dans ce contexte est le flood IPv6 ou l’empoisonnement DNS via le protocole RA (Router Advertisement). Pour illustrer cette vulnérabilité, nous allons démontrer une attaque sur un environnement patché.
Dans notre laboratoire, nous avons utilisé une machine Kali Linux pour jouer le rôle de l’attaquant. Avec l’outil mitm6, nous pouvons envoyer des configurations DNS aux machines IPv6 sans qu’elles soient correctement configurées. Ensuite, nous avons observé les échanges à partir d’un fichier de configuration WPAD pour illustrer la possibilité d’une attaque NTLM relay.
Pour cet exercice, nous utiliserons l’outil mitm6 disponible sur le GitHub suivant :
Commençons par installer l’outil à partir de la bibliothèque à l’aide de la commande suivante :
sudo git clone https://github.com/dirkjanm/mitm6.git
Déplacez-vous dans le dossier pour installer l’outil.
Une fois l’installation terminée, nous lancerons l’outil pour qu’il commence à écouter les demandes IPv6 sur le réseau. L’outil enverra régulièrement des requêtes ping pour détecter de nouvelles machines. Lorsqu’une machine est capturée, l’outil lui attribuera une fausse adresse IPv6 et un faux DNS afin d’intercepter les échanges.
Sur la machine victime, dans notre cas un poste Windows 10, nous pouvons observer des demandes DHCP et des échanges en cours.
Un faux fichier de configuration WPAD a été transmis. WPAD (Web Proxy Auto-Discovery Protocol) est utilisé pour découvrir automatiquement les serveurs proxy sur un réseau. En envoyant un fichier de configuration WPAD malveillant, un attaquant peut rediriger le trafic réseau de la machine victime vers un serveur proxy sous son contrôle, permettant ainsi l’interception et la manipulation des échanges.
En vérifiant la configuration DNS à l’aide de la commande « ipconfig /all », nous remarquons qu’un faux serveur DNS a été ajouté à la configuration, il s’agit de l’adresse de notre serveur d’attaque.
Nous n’irons pas plus loin dans cette attaque, mais nous avons pu constater, sans avoir besoin d’interaction ou de mot de passe, à quel point Windows peut être trompé par ce protocole, notamment en ce qui concerne la configuration IPv6.
IV. La désactivation d’IPv6 sur Windows
A. Désactiver IPv6 avec le Registre Windows
Outre le patch fourni par Microsoft pour la CVE évoquée précédemment, deux méthodes radicales ont été évoquées pour désactiver la prise en charge du protocole IPv6.
Avant de comparer ces méthodes, il est important de rappeler que Microsoft privilégie la mise en place de patchs comme principale contre-mesure plutôt que la désactivation du protocole au niveau système. Microsoft ne recommande pas cette dernière approche et ne fournit pas de support pour celle-ci.
Voici ce que nous pouvons lire sur cette page du site Microsoft :
Dans la pratique, la désactivation d’IPv6 peut se faire en modifiant la clé de registre suivante :
- Chemin : HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters\
- Nom de la clé : DisabledComponents
- Valeur : FF (pour désactiver IPv6)
Si besoin, vous trouverez plus de détails sur cette méthode en suivant le lien fourni ci-dessus.
Nous allons créer cette clé de registre, puis relancer l’attaque précédente pour observer les effets.
Nous constatons que l’attaque a bien fonctionné.
En effet, la clé nécessite un redémarrage du serveur ou de la machine pour devenir opérationnelle, ce qui n’est pas toujours envisageable dans un environnement de serveurs en production. De même, pour effectuer un rollback, un redémarrage des serveurs est également nécessaire. Ces raisons, en plus des recommandations de Microsoft, nous poussent à privilégier la deuxième méthode.
B. Désactiver IPv6 sur les interfaces réseaux Windows
La deuxième méthode consiste à désactiver la prise en charge d’IPv6 au niveau des interfaces réseau (câblées ou Wi-Fi), sans modifier le comportement global du système. Cela signifie que si une application est conçue pour rechercher une adresse IPv6, écouter sur IPv6, ou effectuer des calculs ou traductions IPv6, les interfaces réseau répondront comme si IPv6 était absent.
Cependant, le système continuera à utiliser l’adresse IPv6 loopback, ce qui permet d’éviter les problèmes potentiels. Cette approche est utile car, dans certains cas, IPv6 peut être prioritaire dans le développement de services et d’applications.
Sur chaque interface réseau, nous devons décocher l’option « Protocole Internet version 6 (TCP/IPv6) ». Ceci peut être fait à partir de l’interface graphique, ou de PowerShell.
Pour gagner du temps, vous pouvez exécuter la commande PowerShell ci-dessous pour effectuer cette opération sur l’ensemble des interfaces de votre machine. Cette commande doit être exécutée en tant qu’administrateur.
Get-NetAdapter | ForEach-Object { Disable-NetAdapterBinding -Name $_.Name -ComponentID ms_tcpip6 }
L’utilisation de la commande « Get-NetAdapter » liste uniquement les cartes réseau physiques, en ignorant les cartes virtuelles comme le loopback. Cette approche est recommandée pour éviter toute déstabilisation du système. Pour vous assurer que l’interface loopback IPv6 est toujours active, vous pouvez vérifier son état avec la commande suivante, en vous assurant que l’interface « Loopback » est bien en mode « Connected » :
Get-NetIPInterface
Sur la machine Kali, nous constatons que le résultat est immédiat : l’attaque échoue, et la carte réseau ne répond à aucune requête IPv6. Il n’a pas été nécessaire de redémarrer la machine pour observer cet effet.
Cependant, la carte réseau continue de recevoir des requêtes IPv6, comme les pings, que ce soit avec la première ou la deuxième méthode.
Il faudra alors renforcer la sécurité avec des règles Pare-feu Windows dans le but d’ignorer les paquets IPv6.
Pour automatiser la création de ces règles, voici un script PowerShell prêt à l’emploi disponible sur GitHub et créé par mes soins :
Le script « Firewall_DisableIpv6.PS1 » permet de créer des règles de pare-feu pour les connexions entrantes et sortantes, bloquant ainsi tous les protocoles IPV6. Comme mentionné ci-dessous.
Téléchargez le script « Firewall_DisableIpv6.PS1 ». Une fois le script téléchargé, exécutez-le en mode administrateur.
Nous pouvons voir les règles créées pour le trafic entrant et sortant. Toutes les règles ont un nom qui contient le préfixe « No-IPv6 » pour simplifier l’identification.
Avec cette deuxième méthode, nous pouvons être sûrs d’atténuer les différentes vulnérabilités IPv6 en attendant l’application des mises à jour en cours ou la disponibilité de nouvelles mises à jour pour d’éventuelles vulnérabilités futures.
V. Automatiser la désactivation d’IPv6 par GPO
Bien que l’atténuation puisse être mise en place facilement, sa gestion devient complexe lorsqu’il s’agit de déployer sur un grand nombre de machines. Si vous utilisez une solution de gestion des machines ou des serveurs comme SCCM, Intune, ou autre, il vous suffit de déployer les scripts sur l’ensemble des machines, ce qui rend l’action rapide et immédiate.
En revanche, si vous ne disposez pas de telles solutions, vous devriez envisager de déployer les scripts soit par GPO, soit par les tâches planifiées. Nous allons explorer ces méthodes pour rendre le déploiement possible et protéger l’ensemble de votre parc informatique Windows.
Note : Grace au protocole WinRM, il est possible d’exécuter des commandes sur des serveurs distants, notamment PowerShell. Étant donné que la commande de désactivation du protocole IPv6 sur la carte n’impacte pas la disponibilité de l’hôte, vous pouvez le faire à tout moment.
A. Préparer le script de configuration
Téléchargez le script « Manage-IPv6.ps1 » à partir du GitHub. Mettez-le dans un dossier de téléchargement par exemple, ou copiez-le seulement dans l’éditeur ISE.
Le script est composé de deux fonctions majeures, « Enable-IPv6Adapter » et « Disable-IPv6Adapter », l’une permet d’activer la prise en charge IPv6 sur toutes les cartes locales et l’autre de désactiver le protocole, c’est cette dernière qui est activée par défaut.
Pour effectuer un rollback, il suffit de commenter la fonction « Disable-IPv6Adapter » et de décommenter la fonction « Enable-IPv6Adapter » en retirant le caractère « # » devant celle-ci.
Notre GPO va donc exécuter deux scripts :
- Firewall_DisableIpv6.PS1 pour la création des règles de firewall
- Manage-IPv6.ps1 pour la désactivation de l’IPv6 dans les paramètres des cartes réseaux
B. Exécuter le script au démarrage de Windows
Nous allons créer une GPO pour exécuter les scripts au démarrage de Windows, ce qui implique un redémarrage de la machine pour l’application de la configuration. Nous évoquerons une autre méthode dans la suite de ce tutoriel.
À partir de la console de gestion des stratégies de groupe, créez une GPO au niveau de la racine ou des unités d’organisation (OUs) des ordinateurs de votre parc. Le choix final revient aux administrateurs. Il est intéressant d’exclure les serveurs du cercle 0 (DC et PKI), même si l’action est sans impact, afin de favoriser le changement manuel.
Nous avons appelé notre GPO « Disable_IPV6_Adapter« . De votre côté, respectez la convention de nommage dans votre entreprise.
Naviguez ensuite dans le chemin suivant :
- Configuration Ordinateur > Paramètres Windows > Scripts (Démarrage/arrêt) > Démarrage
Puis, basculez sur l’onglet « Scripts Powershell » et cliquez sur « Ajouter ».
Cliquez ensuite sur « Parcourir » pour lier les scripts.
Copiez les scripts précédemment téléchargés dans le chemin proposé, puis sélectionnez-les (c’est important pour qu’ils soient accessibles via le réseau !).
Pour rappel, nous avons copié les deux scripts à partir du GitHub. Le premier script évoqué dans cet article permet de créer des règles pour refuser les protocoles IPV6.
Note : certaines entreprises regroupent les scripts dans un dossier commun comme le Netlogon ou sur un partage DFS, si ce n’est pas votre cas, vous pouvez utiliser la méthode du chemin par défaut comme nous faisons.
Cliquez ensuite sur « Appliquer » puis « OK » pour fermer la fenêtre de la GPO. Vérifiez bien que 2 scripts sont liés à la GPO. L’ordre n’a pas d’importance.
Notre GPO est alors créée ! Au prochain redémarrage des serveurs et des machines, le protocole IPV6 sur les cartes sera bloqué.
Remarque : comme l’héritage est bloqué sur nos serveurs sensibles (DC), nous nous sommes permis de lier la GPO sur la racine. Pour avoir plus de détails sur l’objectif du blocage d’héritage sur l’OU « Domain Controllers », consultez l’article suivant :
Vous pouvez aussi utiliser le filtrage WMI pour cibler un OS particulier, suivez ce tutoriel si besoin d’approfondir le sujet.
Une fois la machine redémarrée, nous remarquons que le protocole a bien été décoché sur les cartes réseaux ! De plus, un fichier de log a été créé dans le dossier « C:\temp » de la machine sur laquelle s’est exécutée le script.
Voici un aperçu du fichier de log :
C. Utilisation de tâches planifiées
Il est possible d’appliquer immédiatement les scripts si l’entreprise ne possède pas d’outil de gestion de parc évoqué précédemment comme SCCM ou autres.
Cette méthode repose aussi sur l’utilisation d’une GPO, mais nécessite une maitrise et adaptation au contexte de l’environnement qui diffère d’une entreprise à l’autre. L’idée étant d’exécuter chaque script PowerShell via une tâche planifiée poussée par GPO.
Nous essaierons de vous proposer un tutoriel complémentaire sur cette méthode. En attendant, vous pouvez rejoindre le Discord IT-Connect pour en discuter ou laisser un commentaire si vous êtes intéressé. Vous pouvez aussi vous rapprocher de nous pour une mise en place.
Par ailleurs, si vous travaillez sur Intune, consultez cet article :
VI. Conclusion
En mettant en œuvre les mesures évoquées dans cet article, vous devriez être en mesure de protéger vos postes de travail et serveurs Windows des attaques liées l’IPv6. Ce sera d’ailleurs l’occasion de se protéger contre une vulnérabilité récente, bien que le correctif de sécurité de Microsoft sera toujours la meilleure option.
La disponibilité de l’IPv6 sur des machines où cela n’est pas nécessaire (réseau en IPv4) représente un risque réel. Pour minimiser ces risques et se protéger contre les menaces futures, il est recommandé de suivre les conseils et meilleures pratiques testés et décrits dans cet article.