19/09/2024

Active Directory

Déverrouiller des comptes utilisateur dans l’Active Directory

I. Présentation

Dans ce tutoriel, nous allons voir comment déverrouiller rapidement des comptes utilisateur verrouillés au sein de l’Active Directory. Nous réaliserons cette tâche via l’interface graphique, puis en ligne de commande via PowerShell. Nous verrons notamment comment déverrouiller des comptes en fonction de leur date de verrouillage, par exemple pour déverrouiller tous les comptes qui sont verrouillés depuis moins de 15 minutes.

Le déverrouillage des comptes utilisateur Active Directory peut être nécessaire en raison de tentatives de connexion échouées ou de verrouillages automatiques par sécurité. PowerShell offre un moyen rapide et efficace pour déverrouiller ces comptes.

Au sein de l’Active Directory, seuls certains comptes privilégiés peuvent déverrouiller un compte utilisateur. Les prérequis pour réaliser cette opération sont les suivants :

  • Vous devez disposer des droits administratifs pour déverrouiller les comptes utilisateur dans l’Active Directory. Cela signifie que vous devez être membre d'un groupe à privilèges ou disposer d'une délégation de permissions pour lire/écrire l'attribut "lockoutTime" des utilisateurs.
  • Module Active Directory : Assurez-vous que le module « ActiveDirectory » pour PowerShell est installé. Vous pouvez aussi réaliser l’opération directement depuis un accès au contrôleur de domaine.

II. Verrouillage des comptes, qu’est-ce que c’est ?

Pour commencer, faisons un bref rappel de ce qu’est le verrouillage d’un compte utilisateur. Au sein de l’Active Directory, les comptes utilisateur sont protégés par une politique de mot de passe, qui inclut notamment la politique de verrouillage des comptes. Il s’agit de quelques paramètres qui permettent de déclencher un verrouillage automatique et temporaire d’un compte suite au dépassement d’un seuil de tentatives d’authentifications échouées.

Pour en savoir plus sur cette stratégie de verrouillage, consultez notre article complet sur ce sujet :

Ces paramètres aident donc à se protéger contre les attaques par brute force, qui consistent à tenter de nombreux mots de passe pour un même compte utilisateur jusqu’à trouver le bon avec un peu de chance. Le sujet des attaques par brute force est abordé dans notre article dédié :

Grâce à cette politique de verrouillage, nous pouvons verrouiller temporairement un compte utilisateur qui est ciblé par une attaque par brute force, et ainsi empêcher l’attaquant de découvrir son mot de passe.

III. Déverrouiller un compte utilisateur via l’interface graphique

Nous allons à présent voir comment rapidement déverrouiller un compte utilisateur à l’aide de l’interface graphique.

Depuis l’Active Directory ou un système d’administration ayant les outils RSAT installés, il faut lancer la console "Utilisateurs et ordinateurs Active Directory" puis aller faire un clic droit “Propriétés” sur l’utilisateur concerné. Ensuite, il faut se rendre dans l’onglet “Compte” et cocher la case “Déverrouiller le compte” :

Déverrouillage d’un compte depuis la console “Utilisateurs et ordinateurs Active Directory”.
Déverrouillage d’un compte depuis la console "Utilisateurs et ordinateurs Active Directory".

On pourra ensuite cliquer sur "Appliquer" pour valider le déverrouillage du compte, qui devrait prendre effet immédiatement.

Cette méthode est pratique pour déverrouiller un compte ou deux, mais peut devenir fastidieuse si vous devez traiter plusieurs comptes simultanément, nous allons voir comment effectuer cette opération plus rapidement.

IV. Déverrouiller un compte utilisateur en PowerShell

Nous allons à présent aller un peu plus loin en utilisant PowerShell pour lister les comptes actuellement verrouillés et les déverrouiller.

A. Lister et compter les comptes verrouillés

Commençons par utiliser PowerShell pour lister les comptes qui sont actuellement dans un état “verrouillé” au sein de notre Active Directory. Nous allons pour cela utiliser la commande "Search-ADAccount" du module "ActiveDirectory" :

# Lister tous les comptes utilisateur verrouillés
Search-ADAccount -LockedOut | Select-Object Name, LockedOut

# Compter le nombre de comptes verrouillés
$LockedOutUsers = Search-ADAccount -LockedOut
$LockedOutUsers.Count

Voici un résultat possible :

Liste des utilisateurs actuellement verrouillés en PowerShell.
Liste des utilisateurs actuellement verrouillés en PowerShell.

La commande "Search-ADAccount" est très pratique pour cette tâche, car elle permet de sortir les comptes qui correspondent au filtre représenté par un paramètre (ici "-LockedOut"). Cependant, si l’on veut plus de détails, par exemple, la date de verrouillage des comptes, il faut passer par la commande "Get-ADUser" :

# Lister les comptes verrouillés avec date de verrouillage
Get-ADUser -Properties lockedout,accountlockouttime -filter * |
Where-Object {$_.Lockedout -eq "True"} |
Select -Property SamAccountName,LockedOut,AccountLockoutTime

Voici un résultat possible lors de l’utilisation de "Get-ADUser" pour afficher également la date de verrouillage de chaque compte :

Liste des comptes utilisateur verrouillés avec date et heure de verrouillage.
Liste des comptes utilisateur verrouillés avec date et heure de verrouillage.

Cela nous permet notamment de trier les utilisateurs par date de verrouillage :

# Trier les comptes par date de verrouillage
Get-ADUser -Properties lockedout,accountlockouttime -filter * |
Where-Object {$_.Lockedout -eq "True"} |
Select -Property SamAccountName,LockedOut,AccountLockoutTime |
Sort-Object -Property AccountLockoutTime

B. Déverrouiller un ou plusieurs comptes utilisateur

Maintenant que nous savons quel compte utilisateur est verrouillé, nous pouvons utiliser la cmdlet "Unlock-ADAccount" pour le déverrouiller :

# Déverrouiller un compte spécifique
Unlock-ADAccount -Identity "NomUtilisateur"

# Exemple
Unlock-ADAccount -Identity "COLE_MUNOZ"

Nous pouvons facilement utiliser cette cmdlet afin de déverrouiller plusieurs comptes en une seule fois, ce qui est bien plus pratique comparé à l’interface graphique. Nous allons pour cela effectuer une sélection des comptes verrouillés, puis utiliser "Unlock-ADAccount" sur cette sélection :

# Sélection de tous les comptes verrouillés
$LockedOutUsers = Search-ADAccount -LockedOut

# Boucle sur la sélection et déverouillage
foreach ($User in $LockedOutUsers) {
  Unlock-ADAccount -Identity $User
}

Attention toutefois, la commande précédente va déverrouiller la totalité des comptes utilisateur actuellement verrouillés, ce qui est rarement souhaité. Certains comptes peuvent avoir été verrouillés pour de bonnes raisons. Pour modifier les comptes utilisateur déverrouillés, il suffit de modifier la sélection.

C. Déverrouiller un compte récemment verrouillé en PowerShell

Pour déverrouiller tous les comptes verrouillés depuis moins de 15 minutes, il nous suffit d’effectuer une sélection incluant un filtre sur la date de verrouillage via "Search-ADAccount", puis d’utiliser "Unlock-ADAccount" pour déverrouiller les comptes de cette sélection :

# Déverrouiller les comptes verrouillés depuis moins de 15 minutes
$RecentLockedOutUsers = Get-ADUser -Properties lockedout,accountlockouttime -Filter * |
Where-Object { $_.Lockedout -eq "True" } |
Where-Object { $_.AccountLockoutTime -ge (Get-Date).AddMinutes(-15) } |
Select-Object -Property SamAccountName

foreach ($User in $RecentLockedOutUsers) { Unlock-ADAccount -Identity $User.SamAccountName }

Cette commande est notamment pratique en cas d’urgence, par exemple, si une erreur a été faite par un développeur ou un administrateur et a entraîné le blocage de tous les comptes utilisateur du domaine. Gardez-la donc dans un coin !

V. Obtenir des statistiques sur les comptes verrouillés en PowerShell

Il faut savoir que le verrouillage d’un compte utilisateur peut être journalisé. Cela dépend de votre stratégie d’audit, qui détermine les évènements qui seront journalisés au sein de votre Active Directory. Pour obtenir des statistiques sur les comptes verrouillés, vous pouvez utiliser les journaux d’événements :

# Obtenir les événements de verrouillage des comptes
$Events = Get-EventLog -LogName Security -InstanceId 4740

# Compter le nombre de verrouillages par jour
$Events | Group-Object { $_.TimeGenerated.Date } | Select-Object Name, Count

Voici un résultat possible, avec le nombre de verrouillages de compte par jour :

Affichage du nombre de verrouillages de compte en PowerShell.
Affichage du nombre de verrouillages de compte en PowerShell.

Pour une analyse plus avancée, vous pouvez exporter ces données vers un SIEM. Voici un exemple visuel d’une telle analyse sur un SIEM ELK :

Visualisation du nombre de verrouillages de compte AD dans le temps via ELK.
Visualisation du nombre de verrouillages de compte AD dans le temps via ELK.

Pour plus de détails sur les évènements de verrouillage des comptes utilisateur et leur utilisation au sein d’ELK, consultez notre article dédié à la détection des attaques par brute force dans Active Directory.

VI. Conclusion

Le déverrouillage des comptes utilisateur dans l’Active Directory est une tâche courante de la gestion de la sécurité dans un environnement Active Directory. Que ce soit via l’interface graphique ou en ligne de commande avec PowerShell, il est important de connaître les différentes méthodes disponibles pour réagir rapidement aux incidents de verrouillage de comptes. PowerShell est notamment pratique pour traiter plusieurs comptes à la fois.

Enfin, n’oubliez pas de toujours vérifier les causes sous-jacentes des verrouillages de comptes pour éviter des problèmes récurrents et améliorer la sécurité globale de votre environnement Active Directory.

author avatar
Mickael Dorigny Co-founder
Co-fondateur d'IT-Connect.fr. Auditeur/Pentester chez Orange Cyberdéfense.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.