Erreurs

❌ Erreur Windows "Event ID 4625 — Échec d'ouverture de session" — Causes et Solutions

🪟 Windows / Active Directory

Tentative de connexion Windows échouée — mauvais mot de passe ou compte verrouillé

🪟 Windows 📋 6 causes 🔧 5 solutions
L'Event ID 4625 dans l'Observateur d'événements Windows (eventvwr.msc) indique un échec d'authentification. C'est l'événement le plus utile pour détecter les attaques par force brute, les comptes verrouillés et les mauvaises configurations d'authentification.

⚠️ Causes possibles

⚠️
Mauvais mot de passe
L'utilisateur a saisi un mot de passe incorrect — cause la plus courante
⚠️
Compte verrouillé
Trop de tentatives échouées ont déclenché le verrouillage du compte (Account Lockout)
⚠️
Compte expiré ou désactivé
Le compte Active Directory est expiré, désactivé ou la session est restreinte
⚠️
Type d'ouverture de session incorrect
Logon Type 3 (réseau) refusé car le compte n'a pas le droit de connexion réseau
⚠️
Kerberos / NTLM échoue
Problème de synchronisation d'horloge (±5 min max pour Kerberos) ou conflit de protocole
⚠️
Attaque par force brute
Un script ou attaquant tente des combinaisons login/mot de passe en masse

🔧 Solutions étape par étape

1

Lire et analyser l'Event ID 4625

terminal
# Voir les 20 derniers événements 4625
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4625} -MaxEvents 20 |
  Select-Object TimeCreated, Message | Format-List

# Extraire les informations clés
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4625} -MaxEvents 50 | ForEach-Object {
  $xml = [xml]$_.ToXml()
  [PSCustomObject]@{
    Time       = $_.TimeCreated
    User       = $xml.Event.EventData.Data | Where-Object {$_.Name -eq 'TargetUserName'} | Select-Object -Exp '#text'
    IP         = $xml.Event.EventData.Data | Where-Object {$_.Name -eq 'IpAddress'}     | Select-Object -Exp '#text'
    LogonType  = $xml.Event.EventData.Data | Where-Object {$_.Name -eq 'LogonType'}     | Select-Object -Exp '#text'
    Reason     = $xml.Event.EventData.Data | Where-Object {$_.Name -eq 'SubStatus'}     | Select-Object -Exp '#text'
  }
} | Format-Table -AutoSize
2

Déchiffrer le SubStatus (code d'erreur)

terminal
# Codes SubStatus importants :
# 0xC000006A → Mauvais mot de passe
# 0xC0000234 → Compte verrouillé (Account Locked Out)
# 0xC0000072 → Compte désactivé
# 0xC000006F → Heure de connexion non autorisée
# 0xC0000070 → Poste de travail non autorisé
# 0xC0000064 → Nom d'utilisateur inexistant
# 0xC000006D → Échec générique d'authentification

# Chercher spécifiquement les comptes verrouillés
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4625} -MaxEvents 100 |
  Where-Object { $_.Message -like '*0xC0000234*' } |
  Select-Object TimeCreated, Message
3

Gérer les comptes verrouillés

terminal
# Voir les comptes verrouillés dans AD
Search-ADAccount -LockedOut | Select-Object Name, SamAccountName, LockedOut

# Déverrouiller un compte
Unlock-ADAccount -Identity "jdupont"

# Voir l'historique de verrouillage d'un compte
Get-ADUser -Identity "jdupont" -Properties LockedOut, BadLogonCount, LastBadPasswordAttempt |
  Select-Object Name, LockedOut, BadLogonCount, LastBadPasswordAttempt

# Voir la politique de verrouillage AD
Get-ADDefaultDomainPasswordPolicy | Select-Object LockoutThreshold, LockoutDuration, LockoutObservationWindow
4

Détecter une attaque par force brute

terminal
# Compter les échecs par utilisateur sur les dernières 24h
$events = Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4625;
  StartTime=(Get-Date).AddHours(-24)} -ErrorAction SilentlyContinue

$events | ForEach-Object {
  $xml = [xml]$_.ToXml()
  $xml.Event.EventData.Data | Where-Object {$_.Name -eq 'TargetUserName'} |
    Select-Object -ExpandProperty '#text'
} | Group-Object | Sort-Object Count -Desc | Select-Object -First 20

# Compter les échecs par IP source
$events | ForEach-Object {
  $xml = [xml]$_.ToXml()
  $xml.Event.EventData.Data | Where-Object {$_.Name -eq 'IpAddress'} |
    Select-Object -ExpandProperty '#text'
} | Group-Object | Sort-Object Count -Desc | Select-Object -First 10
5

Configurer l'audit et les alertes

terminal
# Vérifier que l'audit est activé
auditpol /get /subcategory:"Logon"
auditpol /get /subcategory:"Account Lockout"

# Activer l'audit des échecs de connexion
auditpol /set /subcategory:"Logon" /failure:enable
auditpol /set /subcategory:"Account Lockout" /failure:enable

# Via GPO (recommandé en domaine) :
# Computer Configuration → Policies → Windows Settings
# → Security Settings → Advanced Audit Policy Configuration
# → Logon/Logoff → Audit Logon → Failure

🛡️ Comment éviter cette erreur

  • ✅ Configurer une politique de verrouillage AD : seuil 5 tentatives, durée 30 min, observation 30 min
  • ✅ Activer l'audit des échecs de connexion via GPO sur tous les contrôleurs de domaine
  • ✅ Monitorer les pics d'Event ID 4625 avec Zabbix ou SIEM (Wazuh, Splunk) pour détecter les attaques
  • ✅ Utiliser Microsoft Entra ID Protection pour détecter les connexions suspectes en environnement hybride
Ajouter Les Fibrés à mes sources préférées
Retrouvez plus souvent nos guides dans vos résultats Google