Compartir a través de


Solución de problemas de bloqueo de cuentas en AD FS en Windows Server

En este artículo se proporcionan pasos para solucionar problemas de bloqueo de cuentas en Microsoft Servicios de federación de Active Directory (AD FS) (AD FS) en Windows Server.

Versión original del producto: Windows Server 2019, Windows Server 2016, Windows Server 2012 R2, Windows Server 2012
Número de KB original: 4471013

Puede experimentar un problema de bloqueo de cuenta en AD FS en Windows Server. Para solucionar este problema, compruebe primero los siguientes puntos:

Uso de Connect Health para generar datos para las actividades de inicio de sesión de usuario

Puede usar Connect Health para generar datos sobre la actividad de inicio de sesión de usuario. Connect Health genera informes sobre los principales intentos de contraseña incorrecta que se realizan en la granja de AD FS.

Consulte la información de este artículo para analizar la lista de cuentas de usuario y direcciones IP del intento de contraseña incorrecta. A continuación, vaya a Analizar la dirección IP y el nombre de usuario de las cuentas afectadas por intentos de contraseña incorrectos.

Recopilación de registros de eventos de AD FS de servidores proxy de aplicación web y AD FS

Paso 1: Recopilar registros de eventos de AD FS de servidores de AD FS y proxy de aplicación web

Para recopilar registros de eventos, primero debe configurar los servidores de AD FS para la auditoría. Si tiene un equilibrador de carga para la granja de AD FS, debe habilitar la auditoría en cada servidor de AD FS de la granja de servidores. La auditoría no tiene que configurarse en los servidores proxy de aplicación web.

Para configurar servidores de AD FS para la auditoría, puede usar el método siguiente:

Paso 2: Buscar en los registros de AD FS

Para Windows Server 2012 R2 o Windows Server 2016 AD FS, busque todos los registros de eventos de seguridad de los servidores de AD FS para ver los eventos de "Auditoría de AD FS de origen 411". Tenga en cuenta la siguiente información sobre los "eventos 411":

Para Windows Server 2008 R2 o Windows Server 2012 AD FS, no tendrá los detalles necesarios del evento 411. En su lugar, descargue y ejecute el siguiente script de PowerShell para correlacionar los eventos de seguridad 4625 (intentos de contraseña incorrecta) y 501 (detalles de auditoría de AD FS) para encontrar los detalles sobre los usuarios afectados.

  • Puede descargar el script de PowerShell del analizador de eventos de auditoría de seguridad de ADFS (ADFSSecAuditParse.ps1) para buscar eventos en los servidores de AD FS. El script proporciona un archivo CSV que contiene userPrincipalName, la dirección IP del remitente y la hora de todos los envíos de credenciales incorrectas a la granja de AD FS.
  • También puede usar este método para investigar qué conexiones son correctas para los usuarios en los eventos "411". Puede buscar en los eventos "501" de AD FS para obtener más detalles.
  • Al ejecutar el script de PowerShell para buscar en los eventos, pase el UPN del usuario que se identifica en los eventos "411" o busque por informes de bloqueo de cuenta.
  • La dirección IP de los remitentes malintencionados se muestra en uno de los dos campos de los eventos "501".
  • Para escenarios basados en web y la mayoría de los escenarios de autenticación de aplicaciones, la dirección IP malintencionada estará en el campo x-ms-client-ip .

Analizar la dirección IP y el nombre de usuario de las cuentas afectadas por intentos de contraseña incorrectos

Después de enumerar las direcciones IP y los nombres de usuario, identifique las direcciones IP que se encuentran para ubicaciones de acceso inesperadas.

¿Se realizan los intentos de direcciones IP desconocidas externas?

Actualización de servidores de AD FS con las revisiones más recientes

Para asegurarse de que los servidores de AD FS tienen la funcionalidad más reciente, aplique las revisiones más recientes para los servidores de AD FS y Proxy de aplicación web. Además, la revisión 3134222 es necesaria en Windows Server 2012 R2 para registrar direcciones IP en el evento 411 que se usará más adelante.

Compruebe si el bloqueo de extranet está habilitado.

Use Get-ADFSProperties para comprobar si el bloqueo de extranet está habilitado.

Pasos para comprobar el estado del bloqueo

Para Windows Server 2012 R2 o una versión más reciente

El bloqueo inteligente es una nueva característica que estará disponible pronto en AD FS 2016 y 2012 R2 a través de una actualización. Esta sección se actualizará con los pasos adecuados para habilitar el bloqueo inteligente en cuanto la característica esté disponible. A continuación, vaya a Comprobar el bloqueo de extranet y los umbrales de bloqueo internos.

Para Windows Server 2008 R2 Windows o una versión anterior

Se recomienda actualizar los servidores de AD FS a Windows Server 2012 R2 o Windows Server 2016. Para obtener más información, consulta Actualización a AD FS en Windows Server 2016. A continuación, siga los pasos para Windows Server 2012 R2 o una versión más reciente.

Paso 1: Comprobación del bloqueo de extranet y los umbrales de bloqueo internos

Asegúrese de que los umbrales de bloqueo de extranet y de bloqueo interno estén configurados correctamente. Para obtener más información, consulte Configuraciones de seguridad recomendadas. Por lo general, ExtranetLockoutThreshold debe ser menor que el umbral de bloqueo de AD para que el usuario se bloquee solo para el acceso de extranet sin bloquearse en Active Directory para el acceso interno.

Paso 2: Habilitar la autenticación moderna y la autenticación basada en certificados

Se recomienda habilitar la autenticación moderna, la autenticación basada en certificados y las demás características que se enumeran en este paso para reducir el riesgo de ataques por fuerza bruta.

Implementación de la autenticación moderna

Además de quitar uno de los vectores de ataque que se usan actualmente a través de Exchange Online, la implementación de la autenticación moderna para las aplicaciones cliente de Office permite a su organización beneficiarse de la autenticación multifactor. La autenticación moderna es compatible con todas las aplicación de Office licaciones más recientes en las plataformas Windows, iOS y Android.

Para obtener más información, vea Cómo implementar la autenticación moderna para Office 365.

Dado que las solicitudes de acceso basadas en contraseña y nombre de usuario seguirán siendo vulnerables a pesar de nuestras defensas proactivas y reactivas, las organizaciones deben planear adoptar métodos de acceso no basados en contraseña lo antes posible.

Los siguientes tipos de autenticación no basados en contraseña están disponibles para AD FS y el proxy de aplicación web.

  • Autenticación basada en certificados

    Cuando se usa la autenticación basada en certificados como alternativa al acceso basado en nombre de usuario y contraseña, las cuentas de usuario y el acceso se protegen de la siguiente manera:

    • Dado que los usuarios no usan sus contraseñas a través de Internet, esas contraseñas son menos susceptibles a la divulgación. Los puntos de conexión de nombre de usuario y contraseña se pueden bloquear completamente en el firewall. Esto elimina el vector de ataque para los ataques por bloqueo o fuerza bruta.

    • Aunque los puntos de conexión de nombre de usuario y contraseña estén disponibles en el firewall, el nombre de usuario malintencionado y las solicitudes basadas en contraseña que provocan un bloqueo no afectan a las solicitudes de acceso que usan certificados. Por lo tanto, se conserva el acceso del usuario legítimo.

      Para obtener más información sobre la autenticación basada en certificados para el identificador de Microsoft Entra y Office 365, consulte este artículo de blog de identidad de Microsoft Entra.

  • Autenticación multifactor (MFA) de Azure

    Azure MFA es otro método de acceso no basado en contraseña que puede usar de la misma manera que la autenticación basada en certificados para evitar el uso de puntos de conexión de nombre de usuario y contraseña completamente.

    Azure MFA se puede usar para proteger las cuentas en los escenarios siguientes.

    Escenarios Ventaja
    Uso de Azure MFA como autenticación adicional a través de la extranet Agregar Azure MFA o cualquier proveedor de autenticación adicional a AD FS y exigir que el método adicional se use para las solicitudes de extranet protege a las cuentas del acceso mediante una contraseña robada o forzada bruta. Esto se puede hacer en AD FS 2012 R2 y 2016.
    Uso de Azure MFA como autenticación principal Se trata de una nueva funcionalidad en AD FS 2016 para habilitar el acceso sin contraseña mediante Azure MFA en lugar de la contraseña. Esto protege contra infracciones de contraseña y bloqueos.

    Para más información sobre cómo configurar Azure MFA mediante AD FS, consulte Configuración de AD FS 2016 y Azure MFA.

  • Windows Hello para empresas

    Windows Hello para empresas está disponible en Windows 10. Windows Hello para empresas habilita el acceso sin contraseña desde la extranet, en función de claves criptográficas seguras vinculadas tanto al usuario como al dispositivo.

    Windows Hello para empresas es compatible con AD FS en Windows Server 2016. Consulte Autenticación de identidades sin contraseñas a través de Windows Hello para empresas.

Paso 3: Deshabilitar la autenticación heredada y los puntos de conexión sin usar

Deshabilite los puntos de conexión heredados que usan los clientes de EAS a través de Exchange Online, como los siguientes:

/adfs/services/trust/13/usernamemixed endpoint

Nota:

Esto podría interrumpir alguna funcionalidad. Sin embargo, puede ayudar a reducir los vectores de superficie que están disponibles para que los atacantes aprovechen. Además, se recomienda deshabilitar los puntos de conexión sin usar.

Compruebe si se ha resuelto el problema.

Asegúrese de que las credenciales se actualizan en el servicio o la aplicación.

Si la cuenta de usuario se usa como una cuenta de servicio, es posible que las credenciales más recientes no se actualicen para el servicio o la aplicación. En esta situación, el servicio podría seguir intentando autenticarse mediante las credenciales incorrectas. Esto provoca una condición de bloqueo.

Para resolver este problema, compruebe la configuración de la cuenta de servicio en el servicio o la aplicación para asegurarse de que las credenciales son correctas. Si no es así, siga el paso siguiente.

Borrar las credenciales almacenadas en caché en la aplicación

Si las credenciales de usuario se almacenan en caché en una de las aplicaciones, los intentos de autenticación repetidos pueden hacer que la cuenta se bloquee. Para resolver este problema, borre las credenciales almacenadas en caché en la aplicación. Compruebe si se ha resuelto el problema.

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


Analizador de eventos de auditoría de seguridad de 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++
 }

Ponte en contacto con nosotros para obtener ayuda

Si tiene preguntas o necesita ayuda, cree una solicitud de soporte o busque consejo en la comunidad de Azure. También puede enviar comentarios sobre el producto con los comentarios de la comunidad de Azure.