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.
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.
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.
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 !
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
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 :
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.
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 !