On dépile le NTDS #1 - Introduction

Part 1 : Format, structure et parsing

Dans cette série d’articles, nous vous proposons d’analyser le contenu de la base de données de l’Active Directory (AD), le fichier NTDS.dit. Cette base est utilisée en entrée de notre service managé IAMBuster pour analyser le niveau de sécurité de l’Active Directory de nos clients.  

Dans cette première partie, nous vous présentons le format et la structure du fichier NTDS, ainsi que les solutions pour lire (parser) son contenu.

Le format

Le fichier NTDS est la base de données de l’Active Directory de Microsoft (initialement appelé NTDS pour NT Directory Services). L’Active Directory est le service d’annuaire de Windows qui gère les informations d’identification et de sécurité pour les objets dans un Active Directory. Le fichier NTDS est stocké sur chaque contrôleur de domaine et est créé lorsqu’un serveur Windows est promu contrôleur de domaine. Son emplacement par default est le suivant : %SystemRoot%\ntds\NTDS.DIT.

Le format ayant été choisi par Microsoft pour cette base de données est le format ESE (Extensible Storage Engine), également connu sous le nom de Jet Blue. Sa création a débuté en 1996, lorsque Microsoft travaillait sur sa première version de l’AD. Le choix de ce format aurait été fait au détriment du format SQL qui, à l’époque, se trouvait être limitant et contraignant en termes de stockage et de performance. (cf. http://dsblog.azurewebsites.net/?p=762#comment-69).

Plusieurs applications et services de Microsoft se sont également appuyés sur la base ESE, dont Microsoft Exchange jusqu’à la version 5.5. Depuis, cette dernière repose sur l’Active Directory. En 2021, Microsoft a publié le code source sur GitHub.

La structure

Le fichier NTDS contient différentes tables :

NTDS #1

Dans le cadre de l’analyse des données stockées au sein de l’Active Directory, nous nous intéressons aux 3 tables suivantes :

  • Datatable : contient les informations sur les objets dans l’annuaire (utilisateurs, machines, groupes, etc.), y compris les attributs de chaque objet (statuts, noms affichés, date de dernière connexion ou de mise à jour, etc.). Les réponses aux différentes requêtes pouvant être effectuées sur le service d’annuaire LDAP(1) se trouvent dans cette table.
  • Link_table : contient les liens entre les objets dans l’annuaire, y compris les identifiants des objets “parents” et “enfants” et les types de relations, etc. (ex : l’attribut MemberOf d’un utilisateur contient les liens vers les groupes auxquels il appartient).
  • Sd_table : contient les descripteurs de sécurité des objets contenus dans l’Active Directory, les Access Control Entries appelées ACE(2).

Les autres tables dans la base de données NTDS.dit sont utilisées pour stocker des informations spécifiques telles que les quotas de stockage pour les objets de l’annuaire ou d’autres données techniques pour le bon fonctionnement du service AD.

L’export et parsing du fichier NTDS

Avant de lire le NTDS, il convient de l’exporter en premier lieu. L’utilitaire ntdsutil(3) employé avec la méthode IFM(4), dédié à la sauvegarde et la restauration de la base de données NTDS.DIT, est la manière fiable pour réaliser un export “propre” :
« ntdsutil « activate instance ntds » « files » « create full c:\audit_backup »

NTDS #1

En effet, le NTDS étant ouvert exclusivement par le système, il ne peut pas être copié proprement pendant son utilisation. Il existe néanmoins d’autres façons de procéder à son extraction :

  • Copier le fichier depuis un contrôleur de domaine éteint ;
  • Copier le fichier avec l’utilitaire ntbackup ou Windows Server Backup. Il sera cependant nécessaire de joindre les fichiers de journalisation et de point de contrôle (présent dans même dossier que le NTDS) afin de le reconstruire à l’aide de l’utilitaire esentutl.exe.
  • Réaliser une copie à partir d’une sauvegarde issue du mécanisme Volume ShadowCopy Service tel que VSSadmin ou DiskShadow (peut également nécessiter une reconstruction) ;
  • Utiliser des logiciels tiers de sauvegarde.

TIPS : Si des erreurs lors de l’utilisation de ntdsutil surviennent, il est recommandé de vérifier qu’une solution de sécurité telle qu’un EDR n’entrave pas le bon déroulé du processus.


Cette extraction du NTDS demandera des privilèges très élevés sur le domaine. Elle peut par exemple être réalisée par un administrateur de domaine.

Une fois que le NTDS est récupéré, il peut être lu au travers de divers outils / bibliothèques. Le parsing de fichiers au format ESE étant complexe(5), il est recommandé d’utiliser les ressources connues suivantes, disponibles sur Internet :

Afin de faciliter l’analyse des données, il est préférable de parcourir le NTDS et d’exporter les données vers une base de données d’un autre type, tel que SQL ou MongoDB. En effet, ces types de bases de données, à l’inverse de la bibliothèque libesedb, permettent d’effectuer des requêtes sur les données retournant des résultats dans un temps raisonnable.

NOTE : Pour notre service managé IAMBuster, nous avons opté pour le parser inclus dans la suite d’outils Impacket et pour MongoDB concernant le stockage des données.

Le temps de traitement / parsing du NTDS varie en fonction de sa taille, qui dépend de l’envergure de votre Active Directory. Cette opération peut prendre quelques minutes pour un petit fichier de 50 Mo, plusieurs dizaines de minutes pour un NTDS d’1 Go, voire plusieurs heures pour un NTDS de plus de 10 Go.

Cet article a permis d’éclaircir des notions relatives au format et à la structure du fichier NTDS.DIT et a également abordé la partie parsing dédiée à la lecture et à l’extraction des informations de l’Active Directory.
Dans les prochaines parties, nous étudierons les données qu’il contient ainsi que les informations pertinentes à observer dans le cadre d’un audit de sécurité.


XMCO

Découvrir d'autres articles

  • Active Directory

    On dépile le NTDS #6 – LAPS, des attributs particuliers (1/2)

    Lire l'article
  • Active Directory

    On dépile le NTDS #2 – La Datatable

    Lire l'article
  • Active Directory

    On dépile le NTDS #5 – Les comptes machines dans l’Active Directory

    Lire l'article