Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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:
- Si tiene Microsoft Entra Connect Health configurado para servidores de AD FS, vaya a la sección Usar Connect Health para generar datos para las actividades de inicio de sesión de usuario.
- Si no tiene Microsoft Entra Connect Health configurado para los servidores de AD FS, vaya a la sección Recopilación de registros de eventos de AD FS desde servidores de AD FS y proxy de aplicación web.
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":
- Puede descargar el script de PowerShell de bloqueo de la cuenta de ADFS y la búsqueda de Bad Cred (AD FSBadCredsSearch.ps1) para buscar los servidores de AD FS para eventos "411". 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. Abra el archivo CSV en Excel y filtre rápidamente por nombre de usuario, dirección IP o hora.
- Estos eventos contienen el nombre principal de usuario (UPN) del usuario de destino.
- Estos eventos contienen un mensaje "error de validación de tokens" que indica si el evento indica un intento de contraseña incorrecto o un bloqueo de cuenta.
- Si el servidor tiene eventos "411" mostrados, pero el campo dirección IP no está en el evento, asegúrese de que tiene la revisión más reciente de AD FS aplicada a los servidores. Para obtener más información, consulte MS16-020: Actualización de seguridad para Servicios de federación de Active Directory (AD FS) para solucionar la denegación de servicio: 9 de febrero de 2016.
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?
- Si los intentos se realizan desde direcciones IP desconocidas externas, vaya a Actualizar servidores de AD FS con las revisiones más recientes.
- Si los intentos no se realizan desde direcciones IP desconocidas externas, vaya a Asegúrese de que las credenciales se actualizan en el servicio o la aplicación.
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.
- Si el bloqueo de extranet está habilitado, vaya a Comprobar el bloqueo de extranet y los umbrales de bloqueo internos.
- Si el bloqueo de extranet no está habilitado, inicie los pasos siguientes para la versión adecuada de AD FS.
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.
Bloqueo de cuenta de ADFS y búsqueda de Bad Cred
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.