Auditer les mots de passe faibles
Trouver tous les comptes utilisent un mot de passe faible avec HaveIBeenPwned et DSInternals
Dans Active Directory, il est souvent nécessaire de savoir quels sont les membres d’un groupe ou inversement, de quels groupes est membre un objet.
Si le premier besoin est couvert par la commande Get-ADGroupMember et son paramètre -Recursive, qui permet d’obtenir tous les membres (même indirects) le deuxième besoin n’a pas de commande dédiée.
Il y a plusieurs manières d’être membre d’un groupe Active Directory :
À ma connaissance, voici les quatre méthodes les plus efficaces pour lister les appartenances d’un objet à des groupes, de la plus simple à la plus complexe :
Toutes ne fournissent pas la même information et ne peuvent pas être utilisées dans les mêmes conditions / sur tous les types d’objets.
D’autres méthodes existent (récupérer tous les membres de tous les groupes du domaine par exemple) mais elles ne sont pas aussi efficaces que celles indiquées dans l’article.
Cette méthode est la plus simple : on interroge simplement l’attribut “MemberOf” présent sur l’objet pour voir les appartenances directes à des groupes :
(Get-ADUser jsmith -Properties MemberOf).MemberOf | Get-ADGroup
Autre méthode, tout aussi simple : l’utilisation de la commande dédiée Get-ADPrincipalGroupMembership qui permet de faire la même chose que l’attribut MemberOf en ajoutant l’appartenance au groupe primaire.
Get-ADPrincipalGroupMembership -Identity jsmith
L’utilitaire WHOAMI avec le paramètre /GROUPS permet de lire le contenu de l’Access Token LSA qui contient toutes les appartenances directes et indirectes de l’utilisateur actuellement connecté à des groupes. Ce n’est donc pas une requête sur Active Directory, mais simplement une lecture des informations de la session locale.
Je n’ai pas trouvé de source qui explique clairement que WHOAMI exploite l’Access Token LSA, c’est une supposition de ma part.
$whoami = WHOAMI /GROUPS /FO CSV |
ConvertFrom-Csv |
Where-Object {$_.SID -like 'S-1-5-21-*'}
$groups = $whoami | ForEach-Object {
$sid = $_.SID
Get-ADGroup -Filter {objectSid -eq $sid}
}
$groups | Sort-Object -Unique
L’attribut TokenGroups permet de lister tous les SID des groupes auquel appartient un objet, de manière directe et indirecte. Cet attribut est calculé par le contrôleur de domaine et reste coûteux en ressources, donc à utiliser avec parcimonie.
$dn = (Get-ADUser -Identity jsmith).DistinguishedName
(Get-ADUser $dn -Properties tokenGroups).tokenGroups.Value | Get-ADGroup
| Méthode | Compatibilité | Groupes directs | Groupes indirects | Groupe primaire |
|---|---|---|---|---|
| Attribut MemberOf | Utilisateurs, groupes et ordinateurs | ✅ Oui | ❌ Non | ❌ Non |
| Commande Get-ADPrincipalGroupMembership | Utilisateurs, groupes et ordinateurs | ✅ Oui | ❌ Non | ✅ Oui |
| Utilitaire WHOAMI | Utilisateur connecté uniquement | ✅ Oui | ✅ Oui | ❌ Non |
| Attribut TokenGroups | Utilisateurs, groupes et ordinateurs | ✅ Oui | ✅ Oui | ✅ Oui |
Trouver tous les comptes utilisent un mot de passe faible avec HaveIBeenPwned et DSInternals