Partez à la chasse aux fantômes dans vos annuaires Active Directory

Ce n’est un secret pour aucun RSSI, l’annuaire Active Directory est une cible de choix pour tous les attaquants qui voudraient devenir maître des clés et prendre le contrôle total d’un système d’information.

Chaque RSSI, en tant que bon cerbère de la porte se doit d’apporter une attention particulière à la sécurisation de l’AD. S’il est plus facile de faire appel à des professionnels ou des solutions commerciales pour auditer son annuaire, l’excellent outil Ping Castle généreusement partagé par son auteur Vincent LE TOUX qui continue d’évoluer régulièrement et pour lequel toute participation est la bienvenue, vous permettra déjà d’élever fortement les remparts de la forteresse. S’il permet d’identifier rapidement les problèmes de configuration et vous guide dans leur résolution, il s’avère un peu moins pratique dans la recherche et l’extraction d’objets précis, tâche qui fait également partie de l’assainissement de l’annuaire.

Alors, en complément des audits réguliers que vous pouvez réaliser avec Ping Castle, permettant de savoir si le niveau de sécurité de votre Active Directory s’est amélioré ou au contraire dégradé par rapport à sa dernière exécution, je vous propose de charger vos packs de protons et d’embarquer à bord d’Ecto-1 pour partir à la chasse aux fantômes !

En fin d’année dernière, alors que je savais que j’allais rejoindre un nouvel établissement et que j’aurais un annuaire Active Directory que je ne connaissais pas à auditer à mon arrivée, je me suis demandé comment je pourrais gagner du temps dans mes audits en étoffant un peu ma boîte à outils. Ping Castle fait un travail remarquable, mais j’avais souvent besoin d’aller interroger l’annuaire via Powershell pour extraire des données complémentaires et déterrer les fantômes qui se cachent dans les bas-fonds de l’AD. Comme les recherches sont souvent récurrentes, je me suis dit que toutes les centraliser me permettrait d’avoir un détecteur de fantômes intéressant, et PKE Meter est né.
Si chez nous les francophones, ce nom ne nous est pas familier, il désigne pourtant un objet que nous connaissons tous, le fameux « détecteur de fantômes » (Psycho Kinectic Energy Meter) inventé par le Dr Egon Spengler dans le film Ghostbusters, et il collait plutôt bien avec ce que je voulais faire.

Dans une première rubrique, je me suis intéressé aux objets de type « computer ». Pouvoir extraire rapidement tous les ordinateurs Windows par version de leur système d’exploitation, en sachant si le système est maintenu ou non, ça permet de pointer facilement les machines à migrer ou éventuellement à les sortir du domaine, si le système est obsolète et que son interconnexion avec ce dernier n’est pas nécessaire.

Quand j’ai parlé récemment de mon projet, certains m’ont répondu, Ping Castle le fait déjà. Effectivement Ping Castle permet de connaître le nombre de machines par version du système, et depuis la version 2.9.2.0 publiée en février, d’extraire désormais l’ensemble des machines avec le numéro de version NT. Mais j’avais besoin d’aller plus loin. Un poste Windows 10 par exemple ne signifie pas que son système est toujours maintenu. Quelle version de Windows 10 a été installée ? Une version LTSC ? Une version qui n’est déjà plus supportée ? Microsoft avait annoncé nous simplifier la vie avec Windows 10 sur la partie versionnage, je ne sais pas vous, mais je ne trouve pas que ça soit le cas.
J’ai donc créé un menu spécifique pour Windows 10, reprenant les différentes versions existantes, en indiquant celles qui sont maintenues ou non, ainsi que la date de fin de support lors de l’extraction :

Pour faciliter l’administration, je trouvais important d’extraire le contenu de la variable CanonicalName pour connaître le positionnement de la machine dans l’arborescence :

Vous noterez la simplicité du versionnage de Windows dans cet exemple où le numéro de build 18362 correspond à la version 1903… que du bonheur quand il faut « requêter » tout ça manuellement en Powershell…

La date de dernière authentification me paraissait également être une information intéressante à avoir sous la main.

Au vu du nombre de versions déjà existantes, j’ai ajouté une option permettant d’extraire les machines Windows 10 par version et dans des fichiers séparés pour retrouver facilement les machines dont la version du système est supportée ou non :

La taille des fichiers va vite vous indiquer si vous avez des machines dans telle ou telle version.
Vous êtes persuadé que tout votre parc est homogène et que vous avez la dernière version LTSC installée sur tous vos postes ? Je vous invite à faire le test :p
Toutes les versions de systèmes qui ne sont plus supportées sont extraites dans un fichier dont le nom commence par « unsupported_os ».

Dans une seconde rubrique, je me suis intéressé aux objets de type « user » :


Comme dans Ping Castle, je me suis penché sur les comptes ayant le flag « AdminSDHolder ». Pour rappel, il s’agit des comptes ayant obtenu dans le passé le rôle « suprême » d’administrateur du domaine. Après une extraction au format CSV de ces comptes, PKE Meter va vous proposer de supprimer le flag pour chaque compte :

L’extraction des comptes administrateurs comprend tous les comptes ayant des droits d’administration, qu’ils soient administrateurs du domaine ou non.

Je me suis ensuite intéressé aux comptes d’administration disposant d’une messagerie, comptes pouvant être d’autant plus à risque quand on sait le nombre de cochonneries qui transitent par courriel.

Vous trouverez également d’autres extractions possibles, comme les groupes ayant des droits d’administration, les comptes inactifs (non connectés depuis plus de trois mois), les comptes désactivés, les comptes avec et sans messagerie, les utilisateurs ayant un mot de passe qui n’expire jamais ou n’étant pas autorisés à le modifier.

Les comptes inactifs peuvent être désactivés après extraction avec une simple confirmation. Attention à ne pas désactiver des comptes fraîchement créés pour des utilisateurs qui doivent prendre leurs fonctions prochainement…


Autre fonctionnalité qui m’a paru intéressante, extraire la date de dernière modification du mot de passe pour chaque utilisateur :

Dans une troisième rubrique apparue plus récemment, je me suis penché sur les groupes :

La première option permet d’extraire tous les groupes existants, ce qui permet parfois de faire de jolies découvertes.

La seconde options permet de trouver tous les objets (dont d’autres groupes possiblement), appartenant à un groupe défini.

La troisième option permet d’afficher tous les groupes auxquels appartient un objet défini.

Des groupes avec des droits spécifiques pour des accès externes à l’infrastructure Windows, mais pour lesquels l’annuaire AD est utilisé comme source d’authentification (applications tierces, passerelles VPN…) pouvant être créés, il était nécessaire pour moi de pouvoir rechercher ailleurs quand dans des groupes d’administration « classiques ». De plus si la délégation de droits au niveau Active Directory est correctement réalisée, faire des recherches dans divers groupes peut s’avérer pertinent pour identifier d’éventuels problèmes d’habilitation.
Ce sont vos commissaires aux comptes qui vont être contents de voir à quel point vous effectuez finement vos recherches lors de vos revues des habilitations ;-)

PKE Meter a pour vocation de compléter les investigations pouvant être effectuées avec Ping Castle. Il vous permettra d’intervenir dans une seconde phase, nécessitant l’utilisation du module Powershell Active Directory.

Il est téléchargeable au format exécutable Windows, mais également dans son format Powershell d’origine pour vous permettre de l’adapter à vos besoins et pourquoi pas le faire évoluer en soumettant des « pull requests ».

Merci à mon ami Gérard GASTON, RSSI du Groupe LNA Santé pour ses retours d’expériences et remarques qui m’ont permis de faire évoluer ce script.

Partager ce document sur les réseaux

?>