Résoudre les problèmes de verrouillage de compte dans AD FS sur Windows Server

Cet article décrit les étapes à suivre pour résoudre un problème de verrouillage de compte dans Microsoft Services ADFS (AD FS) sur Windows Server.

Version d’origine du produit : Windows Server 2019, Windows Server 2016, Windows Server 2012 R2, Windows Server 2012
Numéro de la base de connaissances d’origine : 4471013

Vous pouvez rencontrer un problème de verrouillage de compte dans AD FS sur Windows Server. Pour résoudre ce problème, case activée d’abord les points suivants :

Utiliser Connect Health pour générer des données pour les activités de connexion utilisateur

Vous pouvez utiliser Connect Health pour générer des données sur l’activité de connexion utilisateur. Connect Health génère des rapports sur les principales tentatives de mot de passe incorrectes effectuées sur la batterie de serveurs AD FS.

Reportez-vous aux informations de cet article pour analyser la liste des comptes d’utilisateur et des adresses IP de la tentative de mot de passe incorrecte. Ensuite, accédez à Analyser l’adresse IP et le nom d’utilisateur des comptes affectés par des tentatives de mot de passe incorrectes.

Collecter les journaux des événements AD FS à partir des serveurs AD FS et web Proxy d'application

Étape 1 : Collecter les journaux des événements AD FS à partir des serveurs AD FS et web Proxy d'application

Pour collecter les journaux des événements, vous devez d’abord configurer des serveurs AD FS pour l’audit. Si vous disposez d’un équilibreur de charge pour votre batterie de serveurs AD FS, vous devez activer l’audit sur chaque serveur AD FS de la batterie de serveurs. L’audit n’a pas besoin d’être configuré sur les serveurs web Proxy d'application.

Pour configurer des serveurs AD FS pour l’audit, vous pouvez utiliser la méthode suivante :

Étape 2 : Recherche les journaux AD FS

Pour Windows Server 2012 R2 ou Windows Server 2016 AD FS, recherchez dans les journaux des événements de sécurité de tous les serveurs AD FS les événements « Id d’événement 411 Audit AD FS source ». Tenez compte des informations suivantes sur les « événements 411 » :

  • Vous pouvez télécharger le script PowerShell Lockout de compte ADFS et Bad Cred Recherche (AD FSBadCredsSearch.ps1)) pour rechercher dans vos serveurs AD FS des événements « 411 ». Le script fournit un fichier CSV qui contient le UserPrincipalName, l’adresse IP de l’expéditeur et l’heure de toutes les soumissions d’informations d’identification incorrectes à votre batterie de serveurs AD FS. Ouvrez le fichier CSV dans Excel et filtrez rapidement par nom d’utilisateur, adresse IP ou heure.
  • Ces événements contiennent le nom d’utilisateur principal (UPN) de l’utilisateur ciblé.
  • Ces événements contiennent un message « Échec de la validation du jeton » qui indique si l’événement indique une tentative de mot de passe incorrecte ou un verrouillage de compte.
  • Si le serveur a des événements « 411 » affichés, mais que le champ d’adresse IP n’est pas dans l’événement, vérifiez que le dernier correctif logiciel AD FS est appliqué à vos serveurs. Pour plus d’informations, consultez MS16-020 : Mise à jour de sécurité pour Services ADFS pour résoudre le déni de service : 9 février 2016.

Pour Windows Server 2008 R2 ou Windows Server 2012 AD FS, vous n’aurez pas les détails de l’événement 411 nécessaires. Au lieu de cela, téléchargez et exécutez le script PowerShell suivant pour mettre en corrélation les événements de sécurité 4625 (tentatives de mot de passe incorrectes) et 501 (détails d’audit AD FS) pour rechercher les détails sur les utilisateurs concernés.

  • Vous pouvez télécharger le script PowerShell de l’analyseur d’événements d’audit de sécurité ADFS (ADFSSecAuditParse.ps1) pour rechercher des événements sur vos serveurs AD FS. Le script fournit un fichier CSV qui contient le UserPrincipalName, l’adresse IP de l’expéditeur et l’heure de toutes les soumissions d’informations d’identification incorrectes à votre batterie de serveurs AD FS.
  • Vous pouvez également utiliser cette méthode pour examiner les connexions réussies pour les utilisateurs dans les événements « 411 ». Vous pouvez rechercher les événements AD FS « 501 » pour plus d’informations.
  • Lorsque vous exécutez le script PowerShell pour rechercher les événements, transmettez l’UPN de l’utilisateur identifié dans les événements « 411 » ou effectuez une recherche par rapport de verrouillage de compte.
  • L’adresse IP des expéditeurs malveillants s’affiche dans l’un des deux champs des événements « 501 ».
  • Pour les scénarios web et la plupart des scénarios d’authentification d’application, l’adresse IP malveillante se trouve dans le champ x-ms-client-ip .

Analyser l’adresse IP et le nom d’utilisateur des comptes affectés par des tentatives de mot de passe incorrectes

Après avoir énuméré les adresses IP et les noms d’utilisateur, identifiez les adresses IP destinées aux emplacements d’accès inattendus.

Les tentatives sont-elles effectuées à partir d’adresses IP externes inconnues ?

Mettre à jour les serveurs AD FS avec les derniers correctifs logiciels

Pour vous assurer que les serveurs AD FS disposent des dernières fonctionnalités, appliquez les derniers correctifs logiciels pour les serveurs AD FS et Web Proxy d'application. En outre, le correctif logiciel 3134222 est requis sur Windows Server 2012 R2 pour journaliser les adresses IP dans l’événement 411 qui seront utilisées ultérieurement.

Vérifier si le verrouillage extranet est activé

Utilisez Get-ADFSProperties pour case activée si le verrouillage extranet est activé.

Étapes pour case activée le status de verrouillage

Pour Windows Server 2012 R2 ou version ultérieure

Le verrouillage intelligent est une nouvelle fonctionnalité qui sera bientôt disponible dans AD FS 2016 et 2012 R2 via une mise à jour. Cette section sera mise à jour avec les étapes appropriées pour activer le verrouillage intelligent dès que la fonctionnalité sera disponible. Ensuite, accédez à Vérifier les seuils de verrouillage extranet et de verrouillage interne.

Pour Windows Server 2008 R2 Windows ou version antérieure

Nous vous recommandons de mettre à niveau les serveurs AD FS vers Windows Server 2012 R2 ou Windows Server 2016. Pour plus d’informations, consultez Mise à niveau vers AD FS dans Windows Server 2016. Ensuite, suivez les étapes pour Windows Server 2012 R2 ou version ultérieure.

Étape 1 : Vérifier les seuils de verrouillage extranet et de verrouillage interne

Assurez-vous que les seuils de verrouillage extranet et de verrouillage interne sont correctement configurés. Pour plus d’informations, consultez Configurations de sécurité recommandées. En règle générale, extranetLockoutThreshold doit être inférieur au seuil de verrouillage pour AD afin que l’utilisateur soit verrouillé pour l’accès extranet uniquement sans être également verrouillé dans Active Directory pour l’accès interne.

Étape 2 : Activer l’authentification moderne et l’authentification basée sur les certificats

Nous vous recommandons d’activer l’authentification moderne, l’authentification basée sur les certificats et les autres fonctionnalités répertoriées dans cette étape pour réduire le risque d’attaques par force brute.

Déployer l’authentification moderne

En plus de supprimer l’un des vecteurs d’attaque actuellement utilisés via Exchange Online, le déploiement de l’authentification moderne pour vos applications clientes Office permet à votre organization de tirer parti de l’authentification multifacteur. L’authentification moderne est prise en charge par toutes les dernières applications Office sur les plateformes Windows, iOS et Android.

Pour plus d’informations, consultez Guide pratique pour déployer l’authentification moderne pour Office 365.

Étant donné que les demandes d’accès basées sur le nom d’utilisateur et le mot de passe continueront d’être vulnérables malgré nos défenses proactives et réactives, les organisations doivent prévoir d’adopter des méthodes d’accès non basées sur un mot de passe dès que possible.

Les types d’authentification non basés sur mot de passe suivants sont disponibles pour AD FS et le web Proxy d'application.

  • Authentification basée sur des certificats

    Lorsque l’authentification basée sur les certificats est utilisée comme alternative à l’accès basé sur le nom d’utilisateur et le mot de passe, les comptes d’utilisateur et l’accès sont protégés de la manière suivante :

    • Étant donné que les utilisateurs n’utilisent pas leurs mots de passe sur Internet, ces mots de passe sont moins susceptibles d’être divulgués. Les points de terminaison de nom d’utilisateur et de mot de passe peuvent être complètement bloqués au niveau du pare-feu. Cela supprime le vecteur d’attaque pour les attaques par verrouillage ou par force brute.

    • Même si les points de terminaison de nom d’utilisateur et de mot de passe restent disponibles au niveau du pare-feu, les demandes de nom d’utilisateur et de mot de passe malveillantes qui provoquent un verrouillage n’affectent pas les demandes d’accès qui utilisent des certificats. Par conséquent, l’accès de l’utilisateur légitime est conservé.

      Pour plus d’informations sur l’authentification basée sur les certificats pour Microsoft Entra ID et Office 365, consultez cet article de blog sur l’identité Microsoft Entra.

  • Azure Multi-Factor Authentication (MFA)

    Azure MFA est une autre méthode d’accès non basée sur mot de passe que vous pouvez utiliser de la même manière que l’authentification basée sur les certificats pour éviter d’utiliser complètement les points de terminaison de mot de passe et de nom d’utilisateur.

    Azure MFA peut être utilisé pour protéger vos comptes dans les scénarios suivants.

    Scénarios Avantage
    Utilisation d’Azure MFA comme authentification supplémentaire sur l’extranet L’ajout d’Azure MFA ou d’un fournisseur d’authentification supplémentaire à AD FS et l’exigence que la méthode supplémentaire soit utilisée pour les demandes extranet protège vos comptes contre l’accès à l’aide d’un mot de passe volé ou forcé. Cette opération peut être effectuée dans AD FS 2012 R2 et 2016.
    Utilisation d’Azure MFA comme authentification principale Il s’agit d’une nouvelle fonctionnalité dans AD FS 2016 qui permet d’activer l’accès sans mot de passe à l’aide d’Azure MFA au lieu du mot de passe. Cela protège contre les violations de mot de passe et les verrouillages.

    Pour plus d’informations sur la configuration d’Azure MFA à l’aide d’AD FS, consultez Configurer AD FS 2016 et Azure MFA

  • Windows Hello Entreprise

    Windows Hello Entreprise est disponible dans Windows 10. Windows Hello Entreprise permet un accès sans mot de passe à partir de l’extranet, en fonction de clés de chiffrement fortes liées à l’utilisateur et à l’appareil.

    Windows Hello Entreprise est pris en charge par AD FS dans Windows Server 2016. Consultez Authentification des identités sans mot de passe via Windows Hello Entreprise.

Étape 3 : Désactiver l’authentification héritée et les points de terminaison inutilisés

Désactivez les points de terminaison hérités utilisés par les clients EAS via Exchange Online, par exemple :

/adfs/services/trust/13/usernamemixed endpoint

Remarque

Cela peut perturber certaines fonctionnalités. Toutefois, il peut aider à réduire les vecteurs de surface qui sont disponibles pour les attaquants à exploiter. En outre, nous vous recommandons de désactiver les points de terminaison inutilisés.

Vérifiez si le problème est résolu.

Assurez-vous que les informations d’identification sont mises à jour dans le service ou l’application

Si le compte d’utilisateur est utilisé comme compte de service, les informations d’identification les plus récentes peuvent ne pas être mises à jour pour le service ou l’application. Dans ce cas, le service peut continuer à essayer de s’authentifier en utilisant des informations d’identification incorrectes. Cela provoque une condition de verrouillage.

Pour résoudre ce problème, case activée la configuration du compte de service dans le service ou l’application pour vous assurer que les informations d’identification sont correctes. Si ce n’est pas le cas, suivez l’étape suivante.

Effacer les informations d’identification mises en cache dans l’application

Si les informations d’identification de l’utilisateur sont mises en cache dans l’une des applications, des tentatives d’authentification répétées peuvent entraîner le verrouillage du compte. Pour résoudre ce problème, effacez les informations d’identification mises en cache dans l’application. Vérifiez si le problème est résolu.

PARAM ($PastDays = 1, $PastHours)
#************************************************
# ADFSBadCredsSearch.ps1
# Version 1.0
# Date: 6-20-2016
# Author: Tim Springston [MSFT]
# Description: This script will parse the ADFS server's (not proxy) security ADFS
#  for events which indicate an incorrectly entered username or password. The script can specify a
#  past period to search the log for and it defaults to the past 24 hours. Results will be placed into a CSV for 
#  review of UPN, IP address of submitter, and timestamp.
#************************************************

cls
if ($PastHours -gt 0)
 {$PastPeriod = (Get-Date).AddHours(-($PastHours))}
 else
  {$PastPeriod = (Get-Date).AddDays(-($PastDays)) }
$Outputfile = $Pwd.path + "\BadCredAttempts.csv"
$CS = get-wmiobject -class win32_computersystem
$Hostname = $CS.Name + '.' + $CS.Domain
$Instances = @{}
$OSVersion = gwmi win32_operatingsystem
[int]$BN = $OSVersion.Buildnumber 
if ($BN -lt 9200){$ADFSLogName = "AD FS 2.0/Admin"}
 else {$ADFSLogName = "AD FS/Admin"}

$Users = @()
$IPAddresses = @()
$Times = @()
$AllInstances = @()
Write-Host "Searching event log for bad credential events..."
if ($BN -ge 9200) {Get-Winevent  -FilterHashTable @{LogName= "Security"; StartTime=$PastPeriod; ID=411} -ErrorAction SilentlyContinue | Where-Object  {$_.Message -match "The user name or password is incorrect"} |  % {
 $Instance = New-Object PSObject
 $UPN = $_.Properties[2].Value
 $UPN = $UPN.Split("-")[0]
 $IPAddress = $_.Properties[4].Value
 $Users += $UPN
 $IPAddresses += $IPAddress
 $Times += $_.TimeCreated
 add-member -inputobject $Instance -membertype noteproperty -name "UserPrincipalName" -value $UPN
 add-member -inputobject $Instance -membertype noteproperty -name "IP Address" -value $IPAddress
 add-member -inputobject $Instance -membertype noteproperty -name "Time" -value ($_.TimeCreated).ToString()
 $AllInstances += $Instance
 $Instance = $null
 }
}


$AllInstances | select * | Export-Csv -Path $Outputfile -append -force -NoTypeInformation 
Write-Host "Data collection finished. The output file can be found at $outputfile`."
$AllInstances = $null


Analyseur des événements d’audit de sécurité ADFS

PARAM ($SearchCriteria, $PastDays = 1, $PastHours)
#************************************************
# ADFSSecAuditParse.ps1
# Version 1.0
# Date: 2-2-2016
# Author: Tim Springston [MSFT]
# Description: This script will parse an ADFS Security event log file (EVTX)
#  and search for audit events related to a specific user or other criteria.
#  The script will work for the each ADFS login instance for a given criteria during a stated time frame.
#  If you need to locate a second then filter and save the event log to focus in.
# Return an array of initial instance IDs with the criteria, run the search function against each and output
# a unique text file for each.
#************************************************

cls
if ($PastHours -gt 0)
 {
 $PastPeriod = (Get-Date).AddHours(-($PastHours))
 }
 else
  {$PastPeriod = $PastDays}
 
$CS = get-wmiobject -class win32_computersystem
$Hostname = $CS.Name + '.' + $CS.Domain
$Instances = @()
Get-Winevent -ComputerName $Hostname -LogName Security  | Where-Object {(($_.ID -eq 501) `
-and ($_.Properties.Value -contains $SearchCriteria) -and ($_.TimeCreated -gt $PastPeriod))} | % { $Instances += $_.Properties[0].Value}

function FindADFSAuditEvents  { 
 param ($valuetomatch, $counter, $instance, $PastPeriod)
  $Results = $pwd.Path + "\" + $SearchCriteria + "-ADFSSecAudit" + '-' + $Counter + ".txt" 
  $SearchString = $SearchCriteria + " and instance " + $Instance + " in Security event log."
  "Security Audit Events which match $SearchString" | Out-File $Results -Encoding UTF8 
  Get-WinEvent -ComputerName $Hostname -LogName Security  -WarningAction SilentlyContinue | `
  Where-Object -ErrorAction SilentlyContinue {($_.TimeCreated -gt $PastPeriod) -and (($_.Properties -contains $ValueToMatch) -or ($_.Properties[0].Value -match $Instance))}  | % {
  $Event = New-object PSObject
  add-member -inputobject $Event -membertype noteproperty -name "Event ID" -value $_.ID
  add-member -inputobject $Event -membertype noteproperty -name "Provider" -value $_.ProviderName
  add-member -inputobject $Event -membertype noteproperty -name "Machine Name" -value $_.MachineName
  add-member -inputobject $Event -membertype noteproperty -name "User ID" -value $_.UserID
  add-member -inputobject $Event -membertype noteproperty -name "Time Created " -value $_.TimeCreated  
  $Event | FL *
  $Event | Out-File $Results -Encoding UTF8  -Append
  $_.Properties | FL *
  $_.Properties | Out-File $Results -Encoding UTF8  -Append
  $DateTimeExport = $_.TimeCreated
  }
 $DateTime = (($DateTimeExport.ToShortDateString()).Replace('/','-') + '@' + (($DateTimeExport.ToShortTimeString()).Replace(' ','')))
 $DateTime = $DateTime.Replace(':','')
 $Results2 = $pwd.Path + "\" + $SearchCriteria + '-' + $DateTime + "-ADFSSecAudit" + $Counter + ".txt"
 Rename-Item -Path $Results -NewName $Results2
 } 

$Counter = 1
foreach ($instance in $Instances)
 {
 FindADFSAuditEvents -ValueToMatch $SearchCriteria  -Instance $Instance -PastPeriod $PastPeriod -Counter $Counter
 $Counter++
 }

Contactez-nous pour obtenir de l’aide

Pour toute demande ou assistance, créez une demande de support ou posez une question au support de la communauté Azure. Vous pouvez également soumettre des commentaires sur les produits à la communauté de commentaires Azure.