Script PowerShell pour désactiver NetBIOS (DHCP)
Introduction
Les protocoles de la suite NetBIOS sur TCP/IP (ou NBT) implémentent les services NetBIOS sur TCP et UDP, qui sont décrits dans RFC 1001 et RFC 1002 :
- NetBIOS Name Service : NBNS sur UDP (ou TCP) port 137 (similaire à DNS et aussi connu sous le nom WINS)
- NetBIOS Datagram Service : NBDS sur UDP port 138 (peu utilisé)
- NetBIOS Session Service : NBSS sur TCP port 139
En gros, il permet à un poste client Windows de rechercher un nom sur le réseau (broadcast) après une recherche DNS classique qui n’aboutit pas : fichier « host » local -> cache DNS local -> serveur DNS puis NBNS.
On parle d’une méthode qui date de la fin des années 80. Autant dire la préhistoire en informatique !
Aujourd’hui, il n’y a plus lieu de l’utiliser en entreprise (sauf cas spécifiques). Et surtout, il pourrait compromettre votre entreprise car il est simple de mettre en écoute un faux serveur qui répondrait aux requêtes clientes et ainsi intercepter/collecter les valeurs de hash NTLMv1 et v2.
Il suffirait ensuite à l’attaquant de réutiliser ce hash suivant la technique du « pass-the-hash » pour s’en servir contre les ressources internes. En effet, dans certains cas, il n’est même pas utile de connaître le mot de passe…
Cet article permet d’apporter une partie de la solution en désactivant globalement NetBIOS à la source, au niveau des serveurs DHCP Windows d’un domaine d’entreprise. Grâce à ce script.
Ainsi, après renouvellement du bail, toute nouvelle requête DHCP ou client DHCP recevra ces informations, visibles avec un « ipconfig /all » en ligne de commande (CMD) une fois l’adresse IP attribuée.
Pourquoi un script PowerShell ?
Tout simplement pour permettre de faire les changements sur un grand parc de serveurs DHCP. Dans mon cas, une trentaine de serveurs DHCP (correspondants à une trentaine de sites autonomes).
Le faire manuellement peut vite devenir fastidieux : quantité importante de serveurs, de scopes, une latence élevé pour peu que les serveurs soient éloignés géographiquement et malgré le mode cluster, ces informations ne se répliquent pas d’un serveur à l’autre…
D’où l’idée du script PowerShell.
Que fait ce script ?
Il va tout simplement permettre d’activer ou désactiver NetBIOS sur les serveurs DHCP Windows (options scopes « Avancées »).
Dans les grandes lignes :
- Obtenir la liste complète des serveurs DHCP du domaine Windows
- Sélection du serveur DHCP sur lequel faire le changement
- Vérifiez si le serveur est accessible ainsi que l’adresse IPv4 associée
- Choix d’activer ou de désactiver NetBIOS
- Confirmation avant d’exécuter le script
- Boucle sur les scopes présents pour effectuer la modification
- Afficher le temps d’exécution du script sur le serveur DHCP et consigner les modifications stockées dans %TEMP%.
J’ai fait le choix d’effectuer les changements serveur par serveur mais il est facilement modifiable pour qu’il puisse faire les changements sur tout un domaine d’un coup.
Conclusion
Pour rappel, le script ce trouve ici et il est suffisamment commenté je pense.
Voilà, j’espère qu’il pourra aider certains administrateurs. Je n’étais pas très familier avec PowerShell mais finalement je le trouve très accessible comme langage, plus que Python pour ma part par exemple.
Si voulez poursuivre la sécurisation de votre réseau en retirant les « vieux » protocoles obsolètes, je vous conseille cet article qui complète le travail en désactivant LLMNR et indique la marche à suivre côté client aussi si besoin.
Un dernier point bénéfique que je n’ai pas mentionné en désactivant NetBIOS c’est l’amélioration des performances du réseau.