Active Directory : Comment détecter un changement dans un groupe ?

I. Présentation

Après avoir vu récemment comment détecter un changement au sein des stratégies de groupe, nous allons voir comment détecter un changement dans un groupe de l'Active Directory. Nous n'utiliserons pas de logiciels tiers pour parvenir à réaliser cette surveillance, bien que des solutions existent (notamment chez Netwrix).

L'objectif n'est pas de surveiller le groupe "Secrétariat" mais plutôt les groupes critiques et sensibles, tels que Admins du domaine, les administrateurs de l'entreprise et du schéma, etc... Que ce soit dans le cadre d'une mauvaise manipulation, ou bien si vous êtes la cible d'une attaque, il y a des chances pour qu'un compte utilisateur suspect soit ajouté au sein d'un de ces groupes.

Avec la méthode que nous allons utiliser, qui s'appuie tout simplement sur un script PowerShell, il sera possible de détecter un ajout ou une suppression au sein d'un des groupes surveillés.

Pour parvenir à mes fins, j'ai pris un script existant comme base que j'ai ensuite personnalisé pour obtenir ce que je souhaitais. Voici le lien vers le script original : https://gallery.technet.microsoft.com/scriptcenter/Detect-Changes-to-AD-Group-012c3ffa

II. Comment fonctionne le script "Get-AdGroupMembershipChange.ps1" ?

Retrouvez ma version de ce script, qui reprend comme base le travail mentionné précédemment, sur mon GitHub : Get-AdGroupMembershipChange

Je ne vais pas coller ici le code du script, ça n'aurait pas d'intérêt, je vous invite à le consulter et le récupérer directement depuis le lien.

  • Voici quelques informations quant au script :

- Lors de la première exécution, le script va générer un fichier CSV qui sera utilisé comme référence. En effet, à partir de la deuxième exécution, le script va comparer le contenu du fichier CSV avec l'état actuel de l'AD à l'instant t. Le script sait si c'est la première exécution ou non en testant l’existence du fichier CSV de référence.

- Lorsque le script va comparer le CSV de référence et l'état des groupes à l'instant t, il y aura 2 balayages effectués pour la comparaison, un premier dans un sens pour détecter les suppressions éventuelles, et un dans le sens inverse pour détecter les ajouts.

- Pour la partie notification, un e-mail sera envoyé en cas de changement, que ce soit un ajout ou une suppression, au sein de l'un ou de plusieurs des groupes surveillés. Il faudra configurer la partie serveur de messagerie au sein du script directement.

-Si vous ne souhaitez pas recevoir de notification par e-mail, vous pouvez choisir l'affichage en mode console directement au sein d'une table, ou alors un export au sein d'un fichier HTML. Le rapport HTML sera équivalent au contenu du rapport par e-mail.

- Dans la version de base, un e-mail de notification est envoyé par changement détecté. Dans cette version, il y a seulement un e-mail récapitulatif envoyé par exécution.

  • Par exemple, une liste de groupes à surveiller :

- Administrateurs de l’entreprise
- Administrateurs du schéma
- Admins du domaine
- Administrateurs
- Opérateurs de sauvegarde

  • Les journaux

Ci-dessous un exemple d'exécution du script avec l'ensemble des paramètres, que je vais vous expliquer.

.\Get-AdGroupMembershipChange.ps1 -Email "florian.burnel@mydomain.fr" -SendByMail:$true -ExportAsHTML "C:\Logs\Audit_Get-AdGroupMembershipChange\rapport.html" -LogFilePath "C:\Logs\Audit_Get-AdGroupMembershipChange\Audit_log.csv" -GroupFilePath "C:\Logs\Audit_Get-AdGroupMembershipChange\Audit_list_reference.csv" -Group "Administrateurs de l’entreprise", "Administrateurs du schéma", "Admins du domaine", "Administrateurs", "Opérateurs de sauvegarde"

Finalement, il n'y a pas tant de paramètres que ça... Seulement 4 mais ce sont les valeurs associées qui peuvent rendre la commande longue.

Email : Destinataire pour envoyer la notification par e-mail en cas de changement (rapport HTML dans le corps du mail)

LogFilePath : Le fichier de log pour consigner l'activité du script, format CSV

GroupFilePath : Le fichier de référence qui stocke l'état des groupes audités à l'instant t, format CSV

Group : La liste des groupes à auditer, surveiller

ExportAsHTML : Si vous souhaitez générer un rapport HTML, indiquez le chemin vers le rapport.

SendByMail : Un booléen pour indiquer si oui ou non il faut envoyer le rapport HTML par mail (directement en mode contenu HTML)

Après quelques secondes d'exécution, le verdict va arriver directement dans votre boîte mail 🙂

Au fil des exécutions, le fichier de log va se remplir et vous permettra d'avoir un historique au format texte :

08-18-2017 17:07:23.391+000: The log file [C:\Logs\Audit_Get-AdGroupMembershipChange\Audit_list_reference.csv] does not exist yet. Creating file.
08-18-2017 17:07:23.562+000: Querying Active directory domain for group memberships...
08-18-2017 17:07:23.781+000: Querying the [Administrateurs de l’entreprise] group for members...
08-18-2017 17:07:23.812+000: Found [7] members in the [Administrateurs de l’entreprise] group
08-18-2017 17:07:23.859+000: [Administrateurs de l’entreprise] not found in log file. Dumping all members into it...
08-18-2017 17:07:23.937+000: Reading previous [Administrateurs de l’entreprise] group members...
08-18-2017 17:07:24.16+000: No members have been removed since last check
08-18-2017 17:07:24.31+000: Found [1] members that have been added since last check
08-18-2017 17:07:24.141+000: Emailed change notification to florian.burnel@mydomain.fr
08-18-2017 17:07:24.141+000: Querying the [Administrateurs du schéma] group for members...

...Ou encore :

08-18-2017 17:11:31.394+000: Reading previous [Admins du domaine] group members...
08-18-2017 17:11:31.409+000: Found [2] members that have been removed since last check
08-18-2017 17:11:31.409+000: Emailed change notification to florian.burnel@mydomain.fr

 

III. Les notifications

Le script génère un rapport au format HTML, qu'il est ensuite possible de consulter facilement, comme vous le verrez sur l'image ci-dessous. J'ai essayé de le faire le plus clair possible, en mettant en évidence les changements, avec d'un côté les ajouts et d'un autre les suppressions.

Le script peut envoyer le contenu du rapport directement dans un e-mail en tant que contenu HTML, ce qui permet d'avoir le compte-rendu directement visible dans sa messagerie, par exemple :

En exécutant ce script via une tâche planifiée de manière régulière sur votre Active Directory, vous serez en mesure de détecter tout comportement suspect au niveau des groupes Active Directory sensibles. Ceci me paraît indispensable alors je vous encourage à mettre en place ce type de surveillance, que ce soit par l'intermédiaire de ce script, ou d'un autre outil/script.

Sinon concernant le script que je vous propose, avez-vous des idées d'amélioration ?

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Florian Burnel

Co-Fondateur d'IT-Connect, je souhaite partager mes connaissances et expériences avec vous, et comme la veille techno' est importante je partage aussi des actus.

florian a publié 1601 articles sur IT-Connect.See all posts by florian

4 réactions sur “Active Directory : Comment détecter un changement dans un groupe ?

  • 22/09/2017 à 18:57
    Permalink

    Merci Florian,
    Je cherchais un script qui me permettrait de cibler lorsqu’on dépasse un nombre X d’usagers dans un groupe. Je serai en mesure de me baser sur celui que tu proposes.
    Le but étant de recevoir une notification dans notre billetterie lorsque unp nombre d’usager est atteint, une fonction très utile pour la gestion des licences de type User Cal.

    Répondre
  • 22/09/2017 à 22:56
    Permalink

    Bonjour !
    Ce script est très intéressant, merci pour le partage.
    Je suis en train de chercher comment on peut l’améliorer sur 2 aspects :

    – Amélioration de la sécurité en se basant sur les GUID des objets utilisateurs vérifiés, plutôt que le logusername
    – Tenter d’utiliser un encodage UTF-8 des fichiers CSV. Car aujourd’hui si un utilisateur possède un tréma dans son prénom par ex, le script le détecte en faux positif (utilisateur ajouté puis supprimé)

    Répondre
  • 17/10/2017 à 16:28
    Permalink

    Bonjour,
    script fonctionnel. Merci beaucoup.
    J’ai juste un soucis dans mon rapport, il y a des suppressions et ajouts du même compte. Le soucis viens des accents (du coupe, du groupe ou de l’OU).

    Répondre

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *