• 6 hours
  • Medium

Free online content available in this course.

course.header.alt.is_video

course.header.alt.is_certifying

Got it!

Last updated on 12/21/23

Identifiez les faiblesses d’Active Directory

Identifiez la politique de mot de passe

Une partie des attaques que vous mènerez consiste à voler des crédentiels pour les réutiliser sur d’autres postes ou serveurs. Il se peut que ces identifiants aient été modifiés, et que vos tentatives soient infructueuses. Vous devrez être particulièrement vigilant à la politique de mot de passe mise en place dans l’entreprise. En effet, si vous vous trompez de mot de passe pour un compte, il est possible que vous bloquiez ce compte.

La politique de mot de passe mise en place dans un environnement Active Directory permet plusieurs choses ; notamment :

  • bloquer (temporairement ou non) un compte après un nombre de tentatives d’authentification échouées ;

  • imposer une taille et une complexité minimales pour les mots de passe ;

  • définir le temps de validité d’un mot de passe.

Identifier la politique de mot de passe vous permettra alors de passer sous les radars en évitant de bloquer des comptes par inadvertance. À mes débuts, j’ai utilisé un outil servant à retrouver les mots de passe d’utilisateurs en entreprise, mais qui ne prenait pas en compte la politique de mot de passe. J’ai alors bloqué plusieurs dizaines de comptes, ce qui a mis en pause le travail de plusieurs collaborateurs. J’ai heureusement pu fournir au client un script lui permettant de débloquer instantanément ces comptes. On apprend de ses erreurs, mais je préfère que vous ne passiez pas par cette phase douloureuse !

Pour récupérer la politique de mot de passe par défaut, l’utilitaire Get-ADDefaultDomainPasswordPolicy  peut être utilisé dans une console PowerShell.

PS C:\> Get-ADDefaultDomainPasswordPolicy

ComplexityEnabled           : True
DistinguishedName           : DC=medic,DC=ex
LockoutDuration             : 00:10:00
LockoutObservationWindow    : 00:30:00
LockoutThreshold            : 3
MaxPasswordAge              : 90.00:00:00
MinPasswordAge              : 1.00:00:00
MinPasswordLength           : 7
objectClass                 : {domainDNS}
objectGuid                  : dae14cb7-a84e-4d1d-8490-27399d6fbad5
PasswordHistoryCount        : 24
ReversibleEncryptionEnabled : False

Cette politique de mot de passe impose un mot de passe d’au moins 7 caractères (MinPasswordLength) et une complexité minimale, via le paramètreComplexityEnabled. Dans un intervalle de 30 minutes (LockoutObservationWindow), le compte sera bloqué après 3 tentatives erronées d’authentification (  LockoutThreshold  ). Il sera automatiquement débloqué après 10 minutes (LockoutDuration). Enfin, le mot de passe doit être modifié au moins tous les 90 jours (  MaxPasswordAge  ).

Pensez à bien prendre en compte tous ces paramètres lors de vos tentatives d’authentification avec des comptes dérobés !

Cartographiez l’Active Directory

La dernière étape que vous devez absolument mener dans la phase de reconnaissance est la cartographie de l’environnement Active Directory lui-même. En effet, il regroupe un très grand nombre d’objets (utilisateurs, ordinateurs, groupes, conteneurs, GPO, etc.), et chacun d’entre eux peut avoir des droits très fins sur les autres.

Or, par défaut, tous les utilisateurs du domaine peuvent lire l’ensemble des informations présentes dans Active Directory. Ainsi, avec un compte sans privilèges, vous pouvez lister l’ensemble des utilisateurs du domaine, les groupes auxquels ils appartiennent, les droits de ces utilisateurs et groupes, les attributs de toutes ces entités, et bien plus encore. De par cette complexité, il existe beaucoup de données parfois sensibles accessibles à tous, ou de chemins d’attaque cachés.

Informations sensibles dans l’AD

Chaque objet possède des attributs, et certains d’entre eux peuvent être utilisés par des administrateurs qui pensent être les seuls à y avoir accès.

La première information importante pour vous, ce sont les noms des objets. Les serveurs sont souvent nommés de manière explicite pour faciliter la vie des administrateurs. Vous retrouverez souvent des noms tels que “SQLSRV”, “FILER01” ou encore “INTRANET”. Grâce à ces informations, vous serez en mesure d’identifier plus facilement les serveurs clés et les machines d’intérêt.

Par ailleurs, plusieurs attributs sont parfois renseignés et peuvent contenir des informations sensibles, notamment les attributs “description” et “comment” dans lesquels vous trouverez potentiellement des informations plus détaillées sur certains éléments, voire des mots de passe temporaires ou non.

Lors de mes tests d’intrusion, il m’arrive très fréquemment de trouver un mot de passe de compte de service dans le champ “description” de l’objet. Ainsi, la commande suivante que j’envoie dans une console PowerShell me permet de très rapidement avoir un aperçu des utilisateurs ou ordinateurs ayant un champ de description non vide :

PS C:\> Get-ADObject -LDAPFilter "(|(ObjectClass=user)(ObjectClass=computer))" -SearchBase "DC=MEDIC,DC=EX" -Property * |  where description -ne $null | Select Name, Description, ObjectClass

Name           Description                                         ObjectClass
----           -----------                                         -----------
Administrateur Compte d’utilisateur d’administration               user
Invité         Compte d’utilisateur invité                         user
krbtgt         Compte de service du centre de distribution de clés user
Lucie POIRIER  Mot de passe temporaire: Welcome123                 user

 L’outil ldapdomaindump sur Linux permet également de récolter des informations sur l’Active Directory, et notamment la liste des utilisateurs et de leur description dans le fichier domain_users.html.

ldapdomaindump -u ‘medic.ex\pixis’ -p P4ssw0rd dc01.medic.ex

Groupes à privilèges

Dans un environnement Active Directory, il existe des groupes intégrés qui possèdent des privilèges élevés. Tous les membres de ces groupes héritent alors de ces privilèges. Il est donc important que vous connaissiez ces groupes pour identifier les utilisateurs à cibler dans vos attaques. Les trois principaux sont les suivants :

  • administrateurs de l’entreprise : c’est le groupe d’administration le plus élevé. Dans une forêt comportant plusieurs domaines, il sera automatiquement ajouté au groupe d’administration de chaque domaine ;

  • admins du domaine : présent dans chaque domaine, ce groupe est administrateur local de tous les postes du domaine ;

  • administrateurs : ce groupe est également propre à chaque domaine. Il a des droits élevés sur toutes les opérations liées au domaine, notamment sur les contrôleurs de domaine.

Il existe d’autres groupes privilégiés détaillés dans la documentation de Microsoft, que je vous conseille d’aller lire pour en avoir connaissance.

Il y en a beaucoup, des groupes privilégiés ? C’est compliqué de retenir toutes ces informations, et puis tu nous as parlé de plein de types d’objets, de droits très fins, comment je m’en sors pour savoir qui a le droit de faire quoi ? Comment j’avance dans mon attaque ?

Pour répondre à ces questions, je vais vous parler d’un outil qui a beaucoup fait évoluer la sécurité des environnements Active Directory, c’est BloodHound.

Logo de BloodHound avec un chien stylisé, en couleur rouge. Et le nom de l'entreprise dessous.
Logo de BloodHound

BloodHound est un outil vous permettant de cartographier un environnement Active Directory en le représentant sous forme de graphe. Cette représentation offre alors la puissance de la théorie des graphes pour découvrir des chemins d’attaque qui vous auraient été autrement difficiles, voire impossibles à détecter.

L’idée de cet outil est d’analyser un environnement Active Directory en énumérant les différents objets de l’environnement (utilisateurs, ordinateurs, groupes, etc.), et en les liant avec des relations. Par exemple, si un utilisateur pdevaux est membre du groupe helpdesk, l’utilisateur sera lié par la relation MemberOf au groupe. 

Impression d'écran de BloodHound présentant l'appartenance à un groupe. Pdevaux@MedicEx est  membre de Helpdesk@MedicEx.
Appartenance à un groupe

C’est une visualisation assez claire d’une appartenance, mais l’outil ne s’arrête pas là. Il vous permet de voir également que le groupe helpdesk fait partie du groupe RDPUsers ; donc par héritage, le compte pdevaux en fait également partie.

Impression d'écran de BloodHound, représentant l'héritage des droits. Pdevaux@medicEx est membre de Helpdesk@medicEx, lui même membre de Rdpusers@medicEx.
Héritage des droits

Et en fait, ce n’est pas tout : si on demande de lister l’ensemble des groupes auxquels appartient pdevaux, on se rend compte qu’il appartient finalement à beaucoup d’autres groupes !

Impression d'écran de BloodHound, présentant l'ensemble des héritages de groupes. on voit les différentes connexions entre les membres.
Ensemble des héritages de groupes

Bien entendu, il existe bien d’autres relations entre les objets, notamment des relations permettant de voir qu’un objet est administrateur d’un autre, le droit d’utiliser RDP, le fait qu’un utilisateur est connecté sur une machine, etc.

Je vous propose de découvrir plus en détail cet outil en vidéo :

Pour collecter les informations sur l’Active Directory, il faut utiliser SharpHound depuis une session authentifiée. Si vous êtes sur une machine du domaine, vous pouvez lancer l’outil sans argument. Si en revanche vous êtes sur votre machine d’attaque, il faudra dans un premier temps vous mettre dans le contexte d’un utilisateur du domaine avec l’utilitaire RunAs  .

runas /netonly /user:medic.ex\pixis cmd.exe

Une fois la console ouverte en tant que l’utilisateur, vous pouvez utiliser SharpHound.

.\SharpHound.exe -c All
Impression d'écran du code
Exemple de sortie de SharpHound

Quand l’outil termine de récolter les informations, il produit un fichier ZIP qu’il est possible d’importer dans BloodHound.

Pour exécuter BloodHound, suivez les instructions disponibles sur leur Github. Si tout se déroule correctement, vous devriez avoir la vue suivante :

Impression d'écran de la page d'accueil de BloodHound
Accueil de BloodHound

Notez la présence de requêtes pré-enregistrées qui vous permettront de rapidement détecter des chemins d’attaque ou des configurations vulnérables. Pour cela, il suffit de cliquer sur l’onglet “CYPHER”, puis sur le petit dossier ouvert. Les requêtes sont triées par catégories, et il vous suffit de cliquer sur l’une d’entre elles pour l’exécuter. Il faut bien entendu que vous ayez fourni des données à BloodHound au préalable pour que ces requêtes vous fournissent des résultats.

Impression d'écran de l'onglet CYPHER dans BloodHound
Requête pré-enregistrées

Il existe d’autres outils permettant de faire une première passe sur un environnement Active Directory, afin d’identifier les éléments que nous avons vus ensemble, et qui parfois vont plus loin. L’outil PingCastle est développé par un Français, et permet de générer des rapports complets sur l’état de santé de votre environnement Active Directory. 

En résumé

La découverte de l’Active Directory permet de préparer son plan d’attaque. Plusieurs pistes peuvent être étudiées :

  • Découvrir la politique de mot de passe de l’entreprise vous permettra de cibler vos attaques de découverte de mots de passe.

  • Extraire les comptes à privilèges de l’ensemble des objets afin de mieux préparer vos cibles d’attaque.

  • Repérer les chemins d’attaque potentiels.

C’est la fin de cette partie sur la phase d’énumération. Grâce aux informations récoltées jusqu’à maintenant, vous avez toutes les cartes en main pour mener à bien les différentes attaques que vous allez découvrir dans la deuxième partie. Ces attaques vous permettront de prendre le contrôle de machines, d’utilisateurs, d’élever vos privilèges, de vous déplacer latéralement dans le réseau et de maintenir votre accès une fois ces éléments compromis. C’est un sacré programme, n’est-ce pas ? C’est parti !

Example of certificate of achievement
Example of certificate of achievement