Skip to content

Audit de l’Active Directory avec BTA

Il existe aujourd’hui peu d’outils qui permettent d’effectuer un audit de l’Active Directory Windows, je vous en présente aujourd’hui un que j’ai découvert à l’occasion du SSTIC 2014.

Plus un système d’information vieillit, plus il devient complexe, et les règles, comptes, périphériques et services s’accumulent au fil du temps. Il devient alors difficile de faire régner la loi et l’ordre au sein de tous ces échanges, la sécurité devient plus complexe à gérer et il faut effectuer des « check-up » réguliers afin de voir si les règles et les restrictions fixées sont bien suivies. C’est un peu le rôle de BTA, un outil d’audit de l’Active Directory.

I. Audit de l’AD Windows, pourquoi ?

L’Active Directory est, dans les environnements Windows, la pierre angulaire de la plupart des systèmes environnants, utilisateurs, clients ou applications (Exchange ou SharePoint par exemple). Il entre notamment en compte dans la plupart des systèmes d’authentification et est constamment sollicité. Sa sécurité est donc tout aussi importante, le fait est qu’un Active Directory peut rapidement devenir très (très) complexe et complet en raison du nombre de produits et de contextes dans lesquels il peut interagir.

Cela dépend bien sûr du nombre d’utilisateurs dans votre parc informatique, du nombre de machines, du nombre d’Unités Organisationnelles (OU) que vous avez créé, du nombre d’applications requérant des extensions de schéma de l’Active Directory comme Exchange…

Lors d’une intrusion, l’Active Directory va donc devenir une cible très intéressante, car obtenir des droits dans l’Active Directory pourra permettre aux attaquants d’obtenir des permissions et des possibilités d’action sur d’autres éléments du domaine (boites mails par exemple), la gestion des groupes à hauts privilèges comme celui des administrateurs du domaine est également vitale, car ceux-ci peuvent s’avérer encore plus dangereux que les accès « root » sous Linux en donnant un accès total à la plupart des machines du domaine.

II. BTA : l’outil

La création de cet outil par Philippe Biondi et Joffrey Czarny de chez Airbus Group Innovations vient répondre à plusieurs besoins à propos de l’audit de l’Active Directory Windows.

L’Audit d’un AD permet de vérifier que l’on respecte bien les bonnes pratiques d’utilisation et de configuration de celui-ci, je détaillerais le fonctionnement technique de BTA un peu plus loin, mais il faut savoir qu’il va permettre de faire une recherche au sein des objets de l’Active Directory et de leurs interconnexions afin de vérifier un certain nombre de points de contrôle considérés comme des bonnes pratiques et aussi plus simplement de lister certains objets, par exemple les personnes ayant la capacité de changer le mot de passe administrateur ou les utilisateurs ne s’étant pas authentifiés depuis 60 jours ou plus. On cherchera donc via cet outil à :

  • Vérifier l’application des bonnes pratiques
  • Vérifier la présente (ou l’absence) de modification(s) malveillante(s)
  • Effectuer un check-up régulier et formel de l’Active Directory
  • Comparer des « configurations » de l’Active Directory à différentes périodes
  • Inventorier certains points ou objets
  • Nettoyer les objets ou les éléments incorrectes ou obsolètes
  • Formaliser le tout avec des rapports

De même, après une attaque lorsque l’on effectue une analyse dite « post mortem », il est courant que les équipes IT se demandent si l’Active Directory doit être reconstruit (comprendre : refait depuis zéro). La mise en place de backdoor est en effet courant lors d’intrusion informatique, car les pirates vont vouloir revenir un jour sur le système pour commettre d’autres méfaits, la remise à zéro de l’Active Directory peut alors sembler la chose la plus sûre au vu de la complexité d’y retrouver une porte dérobée parmi toutes les permissions et les objets de l’Active Directory. Un Audit de l’Active Directory via BTA et d’autres outils complémentaires pourra venir rassurer les équipes techniques en effectuant des recherches dans l’AD et des possibles comparaisons entre avant et après l’attaque.

Nous allons maintenant nous pencher un peu plus sur le fonctionnement de cet outil. Il fonctionne donc avec une base de données mongodb et le langage de programmation Python, le tout tournant sous Linux 😉

La première chose intéressante sur le fonctionnement de l’outil est qu’il permet de travailler sur le contenu de l’Active Directory sans aller le perturber systématiquement. En effet, on va passer par une extraction du contenu de l’Active Directory dans un fichier ntds.dit pour ensuite le passer aux équipes d’audit qui pourront effectuer des requêtes dessus, cela évitera de consommer des ressources de l’Active Directory inutilement, mais aussi de pouvoir gérer le versionning et les comparatifs entre plusieurs extractions du même AD à des dates différentes (faire le différentiel des analyses d’un point donné), ce qui ne serait pas possible avec un travail en direct sur l’Active Directory en production. L’extraction de l’Active Directory en NTDS.dit peut être faite de plusieurs manières, mais il est recommandé de suivre celle décrite par les développeurs du projet pour ne pas avoir de corruption du fichier qui pourrait le rendre illisible par BTA.

Les informations dans une base de données NTDS.dit ne sont pas facilement lisibles et encore moins facilement requetables pour y trouver des valeurs recherchées, de plus avec les extensions de schémas et les différents objets pouvant s’y trouver, l’AD contient de nombreuses colonnes et valeurs vides lorsqu’elles ne sont pas configurées, ce qui ne va pas en faveur de la performance lorsque l’on est amené à effectuer des requêtes sur ce genre de base de données. Les développeurs ont donc fait le choix de convertir la base NTDS.dit dans une base de données MongoDb principalement pour y faciliter le requêtage mais aussi pour éviter d’avoir à traiter des valeurs vides, ils utilisent pour cela la librairie libesedb. La conversion du NTDS.dit en base de données pouvant être traitée par BTA s’effectue via btaimport, il est temps de présenter les différentes commandes de l’outil BTA :

  • btaimport : Importe la base NTDS.dit dans une base mongodb et post-processing.
  • btamanage : Effectue l’intendance sur les bases NTDS importées (lister, effacer…).
  • btaminer : Appelle les miners permettant de requêter les données et propriétés des objets.
  • btadiff : Effectue un différentiel entre deux instances de l’AD intégrées en base.

On va donc, dans un premier temps, convertir notre base de données NTDS.dit en base de données mongodb puis faire requêter cette ou ces bases par des miners qui ont chacun un rôle de vérification spécifique et qui généreront des rapports en fonction de ce qu’ils doivent trouver, voici un schéma que j’ai piqué sur la documentation du projet :

BTA06

Les miners sont des sortes de scripts qui vont chacun avoir un rôle de vérification d’un point de contrôle et la génération d’un rapport sur ce point de contrôle. On peut choisir quel miner affecter à notre analyse via la ligne de commande comme je le montre dans la partie suivante. Voici la liste des miners présents aujourd’hui dans le projet : Liste des miners sur le bitbucket du projet

Pour chaque miner, différentes valeurs peuvent être retrouvées, par exemple pour le miner « passwords » qui se charge de différents points de contrôle sur les mots de passe et sessions utilisateurs :

BTA08III. Installation et exemples d’utilisation

L’outil étant relativement nouveau, il n’est pas encore présent dans les dépôts Debian ou autre, voici la procédure d’installation décrite sur le bitbucket (dépôts du code source) du projet :

Installation rapide

pip install bta

Installation depuis les sources

Les dépendances :

  • mongodb (apt-get install mongodb-server python-pymongo)
  • libesedb http://code.google.com/p/libesedb/
  • openpyxl (>= 2.0.2)

Installation:

python setup.py install

En passant par les sources, je n’ai eu aucun mal avec mongodb que je n’avais jamais utilisé, mais j’ai rencontré quelques problèmes de version avec les paquets lxml et openpyxl qui permettent de générer les rapports entre autres. La librairie libsedb permet elle l’analyse du fichier NTDS.dit

Une fois l’outil installé, il faut lui donner quelque chose à manger ! On va donc aller récupérer un Active Directory et extraire son contenu dans un fichier NTDS.dit en suivant la procédure de la documentation du projet que vous trouverez ici (elle contient bien plus d’information sur le produit que cet article pour ceux que ça intéresse 😉 ) : BTA : outil open-source d’analyse AD

Les informations d’un domaine Active Directory se trouvent toutes dans le fichier de base de données nommé NTDS.DIT. Il est créé lors de l’installation du 1er contrôleur de domaine et est automatiquement répliqué les DC associés s’il en existe. Il faut l’extraire pour travailler dessus hors ligne comme je l’ai expliqué plus haut. Cela permet d’éviter d’interagir constamment avec l’Active Directory et permet en plus de profiter de mongodb pour améliorer les performances des requêtes.

Afin de vous donner un aperçu de ce que peut faire BTA voici quelques tests que j’ai effectués sur un Active Directory créé pour l’occasion (donc avec très peu d’informations à l’intérieur, ce qui enlève un peu d’intérêt à l’outil). J’ai orienté la création de mes utilisateurs et de mes objets pour provoquer des réactions de l’outil, tentatives de connexion infructueuses, user jamais loggués, etc.

Il peut par exemple être utile de lister les membres d’un groupe précis comme le groupe des « Admins du domaines » comme c’est le cas pour la commande suivante :

btaminer -C ::test3 ListGroup --match "Admins du domaine"

BTA02

L’Active Directory est souvent rempli de comptes que l’on oublie de supprimer et qui, pour certains, n’ont jamais servi, on peut facilement retrouver ces comptes avec BTA via la commande suivante :

btaminer -C ::test3 passwords --never-logged

BTA03

À noter qu’il est aussi possible de spécifier un nombre de jour pour, par exemple, faire ressortir les utilisateurs ne s’étant pas loggués depuis plus de 360 jours.

On peut aussi faire ressortir le nombre de tentatives infructueuses de connexion par compte et ainsi savoir si un compte est attaqué, par exemple :

btaminer -C ::test5 passwords --bad-password-count

BTA05

De la même manière on peut facilement retrouver un compte qui s’est récemment fait promouvoir Adminisrateur, on fixe alors une date après laquelle l’analyse se porte et tous les comptes s’étant fait promouvoir Admin après cette date sont affichés :

btaminer -C ::test3 NewAdmin --creation 2014-09-01

On peut également établir une liste de tous les membres de chaque groupe.

btaminer -C ::test3 Membership --all-groups

Certaines commandes peuvent avoir de très grandes sorties, on peut alors orienter la sortie vers un fichier Excel ou CSV pour faciliter la consultation, même si l’affichage est basique, il permet d’avoir un rapport formel sur les analyses faites et également d’avoir une sortie transportable et consultable ultérieurement :

BTA07

Pour paramétrer la sortie en un format spécifique, il suffira d’utiliser l’option « -t » suivie de ReST, CSV ou excel en fonction du format souhaité. On redirigera ensuite la sortie vers un fichier comme suivant :

btaminer -C ::test3 -t CSV Membership --all-groups > rapport.csv

IV. Limite et contexte d’utilisation

BTA est un très bon outil pour avoir une base d’analyse de l’Active Directory au sein d’un environnement Windows, en revanche il faut être prudent quant aux résultats qu’il donne. Ce n’est pas parce qu’il ne détecte rien que l’Active Directory devient inviolable. BTA ne détectera les anomalies que si leur détection est présente au sein de son code (des miners) et que si l’auditeur a exécuté les bons miners. Il va s’en dire que l’outil ne peut et ne pourra jamais vérifier l’intégralité de la sécurité de l’AD. La principale raison à cela est que chaque Active Directory est propre à son environnement et au métier de l’entreprise dans lequel se trouve le système d’information. L’outil n’est pas exhaustif, mais peut permettre de fixer une première base pour l’utilisation d’outils exploratoires dans une deuxième phase d’audit comme celui développé par l’ANSSI.

C’est pourquoi le contexte d’utilisation de l’outil est important, même si la collaboration technique entre les équipes IT et les auditeurs peut sembler se restreindre à l’extraction du NTDS.dit, elle est en réalité cruciale dans la bonne conduction de l’audit de l’AD et dans la bonne interprétation des résultats donnés par BTA. En effet, un auditeur externe ne pourra jamais savoir si le fait que l’utilisateur X ou Y soit admin est une anomalie ou non, en revanche les équipes IT le sauront et pourront alors mener les corrections nécessaires. De la même manière, les développeurs du projet soulignent l’importance de la collaboration avec les équipes IT par le fait qu’elles sauront guider les recherches, par exemple pour donner le nom de groupes ou d’objets purement métier qu’il peut être important d’auditer.

Le tout en Open-Source ! Pour ceux qui sont intéressés, je vous encourage à aller visionner la conférence SSTIC qui m’a fait connaitre l’outil.

Partager :
Published inOutils

Be First to Comment

Laisser un commentaire

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