Suivi des menaces et investigation numérique dans l’Active Directory avec l’outil ADTimeline
Sommaire
I. Présentation
Dans cet article, nous allons apprendre à utiliser l'outil ADTimeline proposé par l'ANSSI. Nous pouvons utiliser pour identifier les actions malveillantes effectuées au sein de l'Active Directory et effectuer un suivi des menaces.
Dans la première partie de cet article, nous allons évoquer les deux grandes méthodes pour accéder à la traçabilité des changements effectués dans l'Active Directory, puis nous verrons comment utiliser l'outil ADTimeline. Ceci nous amènera à utiliser Splunk pour effectuer l'analyse des données collectées par cet outil.
En complément, je vous recommande la lecture de cet article :
II. Traçabilité des changements effectués dans l'Active Directory
A. Les journaux d'audit
Il y a plusieurs façons d'effectuer la traçabilité des changements opérés dans l'Active Directory. La bonne pratique consiste à configurer la stratégie d'audit des contrôleurs de domaine Active Directory afin de générer des événements de sécurité pertinent et de les collecter dans un SIEM ou un puits de logs, afin de les centraliser, de les sauvegarder et de les analyser plus facilement (corrélation entre les événements). Ces journaux peuvent aussi être analysés par des applications tierces spécialisées dans la surveillance de l'Active Directory.
Les journaux d'audit sont visibles via le journal "Sécurité" que nous pouvons consulter par l'intermédiaire de l'Observateur d'événements de Windows.
Malheureusement, cette configuration recommandée est encore trop peu souvent mis en place dans les organisations. Dans ce cas, comment faire ?
B. Les métadonnées de réplication
Il y a une autre source sur laquelle nous pouvons nous appuyer pour tenter de retracer l'historique des changements apportés à l'Active Directory : les métadonnées de réplication.
Bien que ce ne soit pas aussi complet que le journal "Sécurité" de Windows, c'est une source d'informations précieuses comme nous le verrons dans la suite de cet article. Surtout, elles le sauront d'autant plus si les journaux d'audit ne sont pas actifs ou qu'ils ont été supprimés par un attaquant.
Remarque : les métadonnées de réplication seront générées sur un contrôleur de domaine Active Directory, même s'il s'agit d'un environnement avec un seul contrôleur de domaine.
À chaque fois qu'un objet de l'Active Directory est modifié, ceci modifie un ou plusieurs attributs, et engendre la création d'informations de réplication pour résumer l'opération effectuée.
- msDS-ReplAttributeMetaData pour les attributs non liés, ce qui permet d'avoir des informations sur la dernière modification de chacun des attributs. À chaque fois, plusieurs propriétés seront précisées, notamment "pszAttributeName" pour le nom de l'attribut modifié et "ftimeLastOriginatingChange" pour la date de la dernière modification de l'attribut.
À partir des cmdlets PowerShell permettant d'interroger l'Active Directory, notamment "Get-ADUser" et "Get-ADGroup", cet attribut peut être consulté. Voici un exemple pour obtenir les métadonnées de réplication associées à l'utilisateur "tech.t2" :
Get-ADUser -Identity "Tech.T2" -Properties msDS-ReplAttributeMetaData | Select -ExpandProperty msDS-ReplAttributeMetaData
Ce qui donne :
- msDS-ReplValueMetaData pour les attributs liés, dont la valeur dépend d'un calcul effectué à partir d'un autre attribut.
Par ailleurs, ces informations peuvent être consultées à l'aide de l'outil "repadmin" ou du cmdlet PowerShell nommé "Get-ADReplicationAttributeMetadata". L'exemple ci-dessous permet d'obtenir les métadonnées de réplication pour l'objet "CN=Technicien T2,OU=Utilisateurs,OU=T2,OU=Tiering,OU=IT,DC=it-connect,DC=local" (utilisateur nommé "Technicien T2"), à partir du DC nommé "SRV-ADDS-01.it-connect.local", en sélectionnant uniquement l'événement le plus récent.
Get-ADReplicationAttributeMetadata -Object "CN=Technicien T2,OU=Utilisateurs,OU=T2,OU=Tiering,OU=IT,DC=it-connect,DC=local" -Server "SRV-ADDS-01.it-connect.local" | Select -First 1
Voici le résultat retourné par cette commande :
Remarque : un attribut non lié correspond à un attribut dont la valeur est spécifique à l'objet (l'e-mail, le nom, etc...) alors qu'un attribut lié stocke une information qui met en relation deux objets (la liste des groupes dont est membre un utilisateur, par exemple).
III. Qu'est-ce que l'outil ADTimeline ?
ADTimeline est un outil de suivi des modifications apportées à l'Active Directory. Il peut être utilisé par les administrateurs systèmes, mais également les professionnels de la cybersécurité dans le cadre d'une investigation numérique ou d'une réponse à incident. Il permet de faciliter les opérations de threat hunting (recherche de menaces).
En effet, l'outil ADTimeline a été développé par l'ANSSI (Agence nationale de la sécurité des systèmes d'information) dans le but de générer la chronologie des modifications apportées à Active Directory à partir des métadonnées de réplication. Autrement dit, il ne dépend pas directement du journal "Sécurité" de Windows puisque sa source de données est différente.
Cet outil gratuit est développé en PowerShell et il est disponible sur GitHub. Je vous invite à récupérer l'archive ZIP de ce projet si vous souhaitez l'utiliser.
ADTimeline a été présenté pour la première fois à l'occasion de l'événement CoRI&IN 2019 (Conférence sur la réponse aux incidents et l’investigation numérique). Vous pouvez retrouver les slides de cette présentation sur cette page.
IV. Exécuter un audit avec ADTimeline
Désormais, nous allons commencer à manipuler ADTimeline : la première étape consiste à effectuer une analyse de l'Active Directory pour générer des fichiers d'audit.
ADTimeline peut analyser un Active Directory en ligne, ainsi qu'une base Active Directory hors ligne à partir du fichier "ntds.dit". Ici, nous allons analyser le domaine Active Directory "it-connect.local" qui contient 2 contrôleurs de domaine : "SRV-ADDS-01" et "SRV-ADDS-02".
Pour cela, téléchargez le ZIP du projet à partir du GitHub et décompressez-le sur votre serveur. Il convient d'être "Administrateur du domaine" pour effectuer l'analyse. À partir d'une console PowerShell, exécutez simplement la commande suivante (des paramètres sont disponibles pour cibler un DC spécifique, par exemple) :
.\ADTimeline.ps1
Patientez pendant l'analyse. ADTimeline va analyser les métadonnées de réplications de vos objets et générer un rapport.
Suite à l'analyse, ADTimeline va générer un ensemble de fichiers. Voici ce qui est précisé sur le GitHub officiel à ce sujet :
- timeline_%DOMAINFQDN%.csv : la chronologie générée avec les métadonnées de réplication AD des objets récupérés.
- logfile_%DOMAINFQDN%.log : fichier journal du script. Vous y trouverez également diverses informations sur le domaine.
- ADobjects_%DOMAINFQDN%.xml : objets d'intérêt récupérés via LDAP.
- gcADobjects_%DOMAINFQDN%.xml : objets d'intérêt récupérés via le catalogue global.
Pour ma part, j'ai obtenu les fichiers suivants :
Que fait-on de ces fichiers ? Ne vous attendez pas à trouver un rapport HTML ou un document prêt à l'emploi. Pour analyser ces données, nous allons devoir utiliser Splunk.
V. Analyser les données d'ADTimeline avec Splunk
La seconde étape consiste à exploiter les fichiers générés par ADTimeline avec la solution Splunk. Nous pouvons utiliser la version gratuite. Bien qu'elle soit limitée, elle conviendra pour l'utilisation d'ADTimeline.
A. Installer Splunk sur Windows Server
Splunk peut être installé sur Windows Server, sur Linux, mais aussi par l'intermédiaire d'un conteneur Docker. Pour cette démonstration, il sera installé sur un serveur Windows Server 2022 : l'exécutable permet de l'installer en quelques clics.
Vous pouvez télécharger Splunk en utilisant le lien ci-dessous. Ceci implique de créer un compte sur le site de Splunk. "Après l'installation, vous disposerez d'une licence d'essai pour l'entreprise pendant 60 jours. Vous pouvez passer à la licence gratuite à tout moment avant la fin de la période d'essai.", précise le site officiel de Splunk.
Pour effectuer l'installation, suivez l'assistant... La seule chose à effectuer, c'est de définir un nom d'utilisateur et un mot de passe pour le compte "Administrateur" de la plateforme.
Ensuite, vous pouvez vous connecter à l'interface Web de Splunk avec un navigateur et vous authentifier avec votre compte.
http://127.0.0.1:8000/
http://<Adresse IP du serveur>:8000/
Pour plus d'informations sur la version gratuite, consultez ce lien :
B. Ajouter l'application ADTimeline à Splunk
L'ANSSI a créé une application "ADTimeline" pour Splunk afin de permettre l'analyse des données à partir de cette plateforme. A partir de votre compte Splunk, vous pouvez télécharger cette archive sur la Splunkbase :
Pour installer l'application, suivez cette procédure :
1 - Cliquez sur "Apps" dans le menu puis sur "Manage Apps".
2 - Cliquez sur "Install App From File" en haut à droite.
3 - Cliquez sur le bouton "Choose File" pour sélectionner le fichier "adtimeline_12.tgz" et validez.
Patientez un instant pendant l'installation de l'application. Ceci va créer une nouvelle entrée dans le menu "Apps" :
Inutile de cliquer dessus pour le moment, car nous devons commencer par importer des données.
C. Importer les données dans Splunk
Nous allons devoir importer les données dans Splunk, c'est-à-dire les fichiers générés par ADTimeline (sauf le fichier "logfile"). Pour ma part, je dois importer les deux fichiers suivants :
timeline_it-connect.local.csv
ADobjects_it-connect.local.xml
A partir de la page d'accueil de Splunk, cliquez sur le bouton "Add data".
Puis, chargez un premier fichier, par exemple, le fichier "timeline_<domaine>.csv". Il faut charger un fichier à la fois.
À l'étape "Set Source Type", choisissez le type de source "adtimeline" pour ce fichier. Attention, le type de source à sélectionner dépend du fichier choisi à l'étape précédente.
- timeline_%DOMAINFQDN%.csv = adtimeline
- ADobjects_%DOMAINFQDN%.xml = adobjects
- gcADobjects_%DOMAINFQDN%.xml = gcobjects
À l'étape "Input Settings", sélectionnez "Constant value" et indiquez le nom de votre domaine.
Poursuivez jusqu'à la fin...
Répétez l'opération pour importer chaque fichier généré par ADTimeline.
D. Le tableau de bord ADTimeline
Il est temps de cliquer sur "ADTimeline" dans le menu "Apps" de Splunk pour explorer les données ! Plusieurs onglets sont accessibles :
- Search : exécuter des requêtes sur le jeu de données importé en s'appuyant sur le langage SPL (Search Processing Language) développé par Splunk.
- Getting started : documentation de l'outil ADTimeline, similaire à celle du GitHub.
- AD General Information : des informations sur votre infrastructure Active Directory et les comptes sensibles.
- AD Threat Hunting : des événements relatifs à vos objets Active Directory, de façon chronologique, ainsi que des métriques clés pour permettre d'identifier et de suivre les menaces (threat hunting).
Désormais, nous allons regarder d'un peu plus près les différents onglets, notamment ceux nommés "AD General Information" et "AD Threat hunting".
E. ADTimeline : AD General Information
Cet onglet donne accès à deux sous-sections : "Active Directory Infrastructure" et "Sensitive Accounts".
- Active Directory Infrastructure
Cette section va permettre d'obtenir des informations sur le niveau fonctionnel du domaine et de la forêt, la liste des contrôleurs de domaine Active Directory, la répartition des rôles FSMO, l'état de certaines fonctionnalités d'ADDS (corbeille, LAPS, silo d'authentification, groupe Protected Users, Service Connection Points, etc.), et il va aussi indiquer s'il y a un serveur de messagerie Exchange, un ADCS ou un ADFS.
- Sensitive Accounts
Cette section, comme son nom l'indique, va permettre d'obtenir la liste des comptes sensibles, à commencer par les comptes "Administrateurs". Il s'intéresse aussi à tous les comptes où l'attribut "adminCount" est égal à "1", tout en retraçant l'historique de modifications de ces comptes.
👉 Active Directory et l'attribut adminCount
Mais ce n'est pas tout, l'outil va permettre de remonter les comptes sensibles vulnérables à l'attaque ASREPRoast. Il met aussi en évidence le ratio entre les comptes sensibles et les comptes non sensibles vulnérables à ASREPRoast. Ici, j'ai volontairement configuré un compte de mon annuaire Active Directory pour qu'il soit détecté par ADTimeline :
Pour en savoir plus sur l'attaque ASREPRoast, vous pouvez lire notre article complet sur le sujet :
👉 Active Directory et l'attaque ASREPRoast
F. ADTimeline : AD Threat Hunting
Désormais, nous allons basculer sur les différentes sections sous "AD Threat Hunting", toujours à partir de Splunk.
- Investigate timeframe
La section "Investigate timeframe" liste toutes les modifications effectuées dans l'annuaire Active Directory, de façon chronologique, en s'appuyant sur les métadonnées de réplications. Il est possible d'appliquer des filtres pour cibler une période précise.
Par exemple, sur l'image ci-dessous, nous constatons qu'il y a eu un verrouillage sur le compte "Admin T0" et une modification de l'attribut "msD-SupportedEncryptionTypes" sur le compte "Technicien T2", ce qui a aussi eu un impact sur l'attribut "UserAccountControl". Nous savons également quel DC a été sollicité pour effectuer l'opération.
👉 Active Directory et l'attribut UserAccountControl
Ce qui est puissant et pratique, c'est le fait de pouvoir cliquer sur les éléments des graphes. Par exemple, si nous cliquons sur "UserAccountControl", nous pouvons obtenir des informations sur tous les comptes où cet attribut a été altéré, avec une vue chronologique. Autrement dit, ceci permet de visualiser toutes les occurences d'un événement.
Cette section remonte également d'autres informations, dont des statistiques telles que la répartition par ObjectClass pour les modifications des objets, ainsi qu'une timeline avec le nombre de modifications par jour.
- Track suspicious activity
Pour effectuer un suivi des actions suspectes, rendez-vous dans l'entrée "Track suspicious activity" où ADTimeline va regrouper tous les événements importants pouvant être le signe d'une activité suspecte. Voici quelques indicateurs visibles sur cette page :
- Historique de verrouillage des comptes, par jour : s'il y a un pic avec de nombreux comptes verrouillés sur une même journée, c'est suspect !
- Modifications sur les ACL (permissions)
- Comptes ajoutés et retirés des groupes
- Modifications suspectes de l'attribut SIDHistory
- Modifications sur les GPO pour altérer la stratégie d'audit (ce qui va impacter le journal "Sécurité")
- Détection d'une attaque de type DCShadow
- Etc...
Je vous encourage à consulter la documentation d'ADTimeline pour avoir la liste complète. À chaque fois, vous remarquerez la présence de liens pour renvoyer vers les TTP correspondantes dans le framework MITRE ATT&CK.
En complément, l'entrée "Track suspicious activity" du menu sert à obtenir des informations sur les événements suspects relatifs à un serveur Exchange.
VI. Conclusion
ADTimeline est un outil très utile et facile à utiliser puisque la collecte des informations est simple, tout comme l'installation de Splunk et l'intégration des données. Néanmoins, l'analyse des résultats n'est pas à la portée de tout le monde. En effet, il faut avoir une bonne connaissance de l'Active Directory, notamment des attributs, ainsi que des attaques fréquentes, pour être capable d'identifier et de retracer une activité malveillante.
Qu'en pensez-vous ?