Nous utilisons des cookies et d’autres technologies sur notre site web pour vous proposer l’ensemble de nos fonctionnalités. Ils peuvent également être mis en place à des fins d’analyse. En continuant à utiliser notre site web, vous acceptez l’utilisation de cookies. Pour plus d’informations, notamment sur la manière de les désactiver, veuillez consulter notre politique de confidentialité.
Comment détecter les comptes utilisateurs ayant un mot de passe obsolète ?
L’un des principaux défis liés à la mise en œuvre d’une nouvelle stratégie de mots de passe dans Active Directory consiste à s’assurer que les utilisateurs ont modifié leurs mots de passe pour – justement – se conformer à cette nouvelle stratégie. Comme il n’est pas possible d’afficher les mots de passe actuels des utilisateurs en texte brut pour vérifier s’ils répondent aux exigences de longueur et de complexité (et dans le cas de la politique de mot de passe Specops qu’ils ne contiennent pas de mots de dictionnaire interdits), la meilleure façon de s’en assurer consiste à vérifier que tous les utilisateurs ont bien changé leur mot de passe depuis la date de mise en œuvre de votre nouvelle politique de mots de passe.
Vous pouvez vérifier manuellement l’attribut pwdLastSet sur chaque compte d’utilisateur pour voir à quand remonte leur dernière modification de mot de passe. Utilisez ADSIEdit ou Utilisateurs et ordinateurs Active Directory (avec les fonctionnalités avancées activées) pour afficher l’attribut directement :

Lorsque vous utilisez PowerShell pour extraire l’attribut, vous verrez que l’attribut est en fait enregistré dans ce que l’on appelle le format « filetime ».

Filetime est un horodatage stocké en tant que décompte du nombre d’intervalles de 100 nanosecondes qui se sont écoulés depuis minuit le 1er janvier 1601 (UTC).
Il est intéressant de se pencher sur le cas d’un utilisateur pour lequel l’attribut pwdLastSet est 0 (c’est-à-dire « jamais ») – comme c’est le cas lorsque le compte d’un utilisateur est configuré pour exiger le changement de mot de passe à la prochaine connexion :

Pour convertir l’horodatage en un format lisible, il faut le convertir à l’aide d’un code comme celui-ci :
get-aduser user0000 -properties pwdlastset | select @{Name= »PasswordLastSet »;Expression={[datetime]::FromFileTimeUTC($_.pwdlastset)}}
Une fois exécuté sur le compte d’un utilisateur qui doit changer de mot de passe à la prochaine connexion, c’est ce résultat qui s’affiche (bon à savoir : si vous vous demandez pourquoi il semble que certains de vos utilisateurs aient changé leur mot de passe pour la dernière fois alors que Shakespeare était encore en vie – il s’agit juste une bizarrerie qui découle de la façon dont Active Directory implémente un changement de mot de passe requis) :

En exécutant la même commande sur le compte d’un utilisateur avec un mot de passe réel, nous pouvons à présent voir la date et l’heure réelles de la dernière modification du mot de passe :

Remarque : Active Directory utilise ce format filetime pour d’autres attributs temporels, par exemple : lastlogon, lastlogontimestamp, accountExpires, badpasswordtime. Le même code PowerShell peut être utilisé pour convertir ces attributs en un format date/heure lisible.
Mais revenons à ce que nous souhaitions mettre en place ! Le script PowerShell suivant trouvera tous les utilisateurs activés dans une unité d’organisation/un conteneur particulier n’ayant pas changé leur mot de passe depuis une date donnée, à l’exclusion des utilisateurs dont les comptes sont configurés pour exiger un changement de mot de passe à la prochaine connexion. Modifiez simplement les variables searchdate et searchbase selon vos besoins pour qu’elles s’exécutent dans votre environnement.
$verbosepreference = « continue »
$searchdate = « 2019-05-01 » #yyyy-MM-dd format
$searchbase = « OU=Users,OU=Specops,DC=specopsdemo1,DC=com »
$passwordsNotChangedSince = $([datetime]::parseexact($searchdate,’yyyy-MM-dd’,$null)).ToFileTime()
write-verbose « Finding users whose passwords have not changed since $([datetime]::fromfiletimeUTC($passwordsNotChangedSince)) »
Get-ADUser -filter { Enabled -eq $True } `
–Properties pwdLastSet `
-searchbase $searchbase |
where { $_.pwdLastSet -lt $passwordsNotChangedSince -and `
$_.pwdLastSet -ne 0 } |
Select-Object name,sAmAccountName,
@{Name= »PasswordLastSet »;Expression={
[datetime]::FromFileTimeUTC($_.pwdLastSet)
}
}

En parallèle, les administrateurs système peuvent télécharger Specops Password Auditor. Les résultats fournis inclueront la date à laquelle les mots de passe ont été modifiés pour la dernière fois ainsi que d’autres informations sur les vulnérabilités détectées, notamment les mots de passe expirés ou compromis (par exemple si le mot de passe d’un utilisateur a été trouvé sur une liste de mots de passe piratés).
(Dernière mise à jour le 29/08/2022)