Mots de passe dans les attributs Active Directory : le champ Description lisible par tous
C'est l'une des découvertes les plus fréquentes et les plus embarrassantes d'un audit Active Directory : un mot de passe de compte de service noté dans le champ Description, « pour ne pas l'oublier ». Par défaut, tout utilisateur du domaine peut lire cet attribut. Un attaquant qui compromet un simple poste n'a qu'à interroger l'annuaire.
Pourquoi ces attributs sont lisibles par tous
Active Directory est conçu comme un annuaire : par défaut, les utilisateurs authentifiés peuvent lire la plupart des attributs des objets utilisateurs, groupes et ordinateurs. C'est ce qui permet aux carnets d'adresses, aux applications et aux outils d'administration de fonctionner. La contrepartie est simple : tout ce qui est écrit dans un attribut non protégé est à la portée de n'importe quel compte du domaine, y compris un compte de stagiaire ou un compte d'ordinateur compromis.
Les attributs à surveiller
| Attribut | Nom dans les consoles | Risque |
|---|---|---|
description | Description | visible dans toutes les consoles, utilisé comme pense-bête |
info | Notes (onglet Téléphones) | champ libre rarement relu |
comment | non affiché par défaut | renseigné par des scripts ou des outils tiers |
userPassword | non affiché par défaut | peut contenir un mot de passe lisible selon la configuration de la forêt |
unixUserPassword | non affiché par défaut | hérité des intégrations Unix, parfois renseigné |
Le cas de userPassword mérite une précision. Selon un paramètre de la forêt (dans l'attribut dSHeuristics), cet attribut est soit traité comme un alias du vrai mot de passe et alors non lisible, soit traité comme un attribut ordinaire. Dans ce second cas, qui est la situation par défaut des forêts récentes, une application qui y écrit un mot de passe le stocke tel quel, lisible par ceux qui ont le droit de lecture. Des connecteurs d'annuaire et d'anciennes applications LDAP le font encore.
Il faut aussi garder en tête d'autres emplacements classiques : les anciennes préférences de stratégie de groupe contenant un mot de passe dans SYSVOL, les scripts d'ouverture de session, ou les attributs de l'ancien LAPS mal protégés.
Trouver les secrets
La recherche se fait avec les outils d'administration habituels. Une requête PowerShell du module Active Directory qui récupère les attributs description, info et comment de tous les utilisateurs et ordinateurs, puis filtre sur des mots-clés (« mdp », « pwd », « pass », « mot de passe », « motdepasse »), suffit à révéler la plupart des cas. Pour userPassword et unixUserPassword, le simple fait qu'ils soient renseignés est un signal : ils ne devraient pas l'être.
Ne vous limitez pas aux comptes actifs : les comptes désactivés sont souvent réactivés, et un mot de passe noté il y a des années peut encore être valide sur un autre compte ou un autre système.
Nettoyer correctement
- Considérez chaque mot de passe trouvé comme compromis : il a pu être lu par n'importe qui, depuis n'importe quand.
- Changez-le sur le compte concerné et sur tous les systèmes où il a pu être réutilisé.
- Videz l'attribut, puis vérifiez que l'application ou le script qui l'y écrivait ne va pas le remettre.
- Pour les comptes de service, migrez vers des comptes de service administrés de groupe (gMSA) lorsque c'est possible, ce qui supprime le besoin de connaître le mot de passe.
- Stockez les secrets restants dans un coffre-fort de mots de passe avec des accès tracés.
Et les attributs confidentiels ?
Active Directory permet de marquer un attribut comme confidentiel (indicateur dans searchFlags) : sa lecture exige alors un droit de contrôle d'accès spécifique, que les utilisateurs ordinaires n'ont pas. C'est utile pour des attributs personnalisés contenant des données sensibles. En revanche, les attributs du schéma de base, dont description, ne peuvent pas être rendus confidentiels. La solution n'est donc pas de cacher le mot de passe, mais de ne jamais l'écrire dans l'annuaire.
Une règle simple. Aucun secret dans l'annuaire, quel que soit l'attribut. Inscrivez-la dans les procédures d'administration et vérifiez-la régulièrement, car ces pratiques réapparaissent avec chaque nouvel intervenant pressé.
Ce qu'un audit vérifie
- la présence de mots-clés évoquant des mots de passe dans
description,infoetcomment; - les objets dont
userPasswordouunixUserPasswordest renseigné ; - la configuration de
dSHeuristicsrelative àuserPassword; - la présence de mots de passe dans SYSVOL et les scripts de connexion ;
- la rotation effective des mots de passe découverts lors d'un précédent audit.