Поделиться через


Устранение неполадок с блокировкой учетной записи в AD FS на Windows Server

В этой статье описаны действия по устранению неполадок с блокировкой учетной записи в Microsoft службы федерации Active Directory (AD FS) (AD FS) в Windows Server.

Исходная версия продукта: Windows Server 2019, Windows Server 2016, Windows Server 2012 R2, Windows Server 2012
Исходный номер базы знаний: 4471013

Вы можете столкнуться с проблемой блокировки учетной записи в AD FS на Windows Server. Чтобы устранить эту проблему, сначала проверьте следующие моменты:

Использование Connect Health для создания данных для действий входа пользователей

Вы можете использовать Connect Health для создания данных о действии входа пользователя. Connect Health создает отчеты о самых плохих попытках паролей, сделанных в ферме AD FS.

Ознакомьтесь с сведениями в этой статье , чтобы проанализировать список учетных записей пользователей и IP-адресов неудачной попытки пароля. Затем перейдите к разделу "Анализ IP-адреса и имени пользователя учетных записей, затронутых неудачными попытками пароля".

Сбор журналов событий AD FS с серверов AD FS и прокси-серверах веб-приложений

Шаг 1. Сбор журналов событий AD FS с серверов AD FS и прокси-сервера веб-приложений

Чтобы собирать журналы событий, сначала необходимо настроить серверы AD FS для аудита. Если у вас есть подсистема балансировки нагрузки для фермы AD FS, необходимо включить аудит на каждом сервере AD FS в ферме. Аудит не должен быть настроен на серверах прокси-сервера веб-приложения.

Чтобы настроить серверы AD FS для аудита, можно использовать следующий метод:

Шаг 2. Поиск журналов AD FS

Для Windows Server 2012 R2 или Windows Server 2016 AD FS выполните поиск всех журналов событий безопасности серверов AD FS для событий "События с идентификатором 411 Source AD FS Auditing". Помните о следующих сведениях о событиях 411:

  • Вы можете скачать скрипт ADFS Account Lockout и Bad Cred Search (AD FSBadCredsSearch.ps1)PowerShell для поиска серверов AD FS для событий "411". Скрипт предоставляет CSV-файл, содержащий userPrincipalName, IP-адрес отправителя и время отправки всех неправильных учетных данных в ферму AD FS. Откройте CSV-файл в Excel и быстро фильтруйте по имени пользователя, IP-адресу или времени.
  • Эти события содержат имя участника-пользователя (UPN) целевого пользователя.
  • Эти события содержат сообщение "Сбой проверки маркера", указывающее, указывает ли событие на неудачную попытку пароля или блокировку учетной записи.
  • Если на сервере отображаются события "411", но поле IP-адреса отсутствует в событии, убедитесь, что к серверам применено последнее исправление AD FS. Дополнительные сведения см. в статье MS16-020: обновление системы безопасности для службы федерации Active Directory (AD FS), чтобы устранить отказ в обслуживании: 9 февраля 2016 г.

Для Windows Server 2008 R2 или Windows Server 2012 AD FS у вас нет необходимых сведений о событии 411. Вместо этого скачайте и запустите следующий скрипт PowerShell, чтобы сопоставить события безопасности 4625 (неудачные попытки пароля) и 501 (сведения об аудите AD FS), чтобы найти сведения о затронутых пользователях.

  • Вы можете скачать сценарий PowerShell для анализа событий аудита безопасности ADFS (ADFSSecAuditParse.ps1), чтобы найти серверы AD FS для событий. Скрипт предоставляет CSV-файл, содержащий userPrincipalName, IP-адрес отправителя и время отправки всех неправильных учетных данных в ферму AD FS.
  • Этот метод также можно использовать для изучения успешных подключений для пользователей в событиях 411. Дополнительные сведения можно найти в событиях AD FS "501".
  • При запуске скрипта PowerShell для поиска событий передайте имя участника-пользователя, который определен в событиях "411" или выполните поиск по отчетам о блокировке учетных записей.
  • IP-адрес злоумышленников отображается в одном из двух полей в событиях "501".
  • Для веб-сценариев и большинства сценариев проверки подлинности приложений вредоносный IP-адрес будет находиться в поле x-ms-client-ip .

Анализ IP-адреса и имени пользователя учетных записей, затронутых неудачными попытками пароля

После перечисления IP-адресов и имен пользователей определите IP-адреса, которые предназначены для непредвиденных расположений доступа.

Предприняты ли попытки из внешних неизвестных IP-адресов?

Обновление серверов AD FS с помощью последних исправлений

Чтобы убедиться, что серверы AD FS имеют последние функциональные возможности, примените последние исправления для серверов AD FS и прокси-сервера веб-приложения. Кроме того, 3134222 исправлений требуется в Windows Server 2012 R2 для регистрации IP-адресов в событии 411, которое будет использоваться позже.

Проверьте, включена ли блокировка экстрасети

Используйте Get-ADFSProperties , чтобы проверить, включена ли блокировка экстрасети.

Действия по проверке состояния блокировки

Для Windows Server 2012 R2 или более поздней версии

Смарт-блокировка — это новая функция, которая будет доступна в ближайшее время в AD FS 2016 и 2012 R2 через обновление. Этот раздел будет обновлен с помощью соответствующих шагов по включению смарт-блокировки, как только эта функция доступна. Затем перейдите к разделу "Проверка блокировки экстрасети" и пороговых значений внутреннего блокировки.

Для Windows Server 2008 R2 или более ранней версии

Рекомендуется обновить серверы AD FS до Windows Server 2012 R2 или Windows Server 2016. Дополнительные сведения см. в разделе "Обновление до AD FS" в Windows Server 2016. Затем выполните действия для Windows Server 2012 R2 или более новой версии.

Шаг 1. Проверка порогов блокировки экстрасети и внутренних блокировок

Убедитесь, что пороговые значения блокировки экстрасети и внутренние пороговые значения блокировки настроены правильно. Дополнительные сведения см. в статье "Рекомендуемые конфигурации безопасности". Как правило, значение ExtranetLockoutThreshold должно быть меньше порога блокировки для AD, чтобы пользователь заблокировали доступ к экстрасети только без блокировки в Active Directory для внутреннего доступа.

Шаг 2. Включение современной проверки подлинности и проверки подлинности на основе сертификатов

Рекомендуется включить современную проверку подлинности, проверку подлинности на основе сертификатов и другие функции, перечисленные на этом шаге, чтобы снизить риск атак методом подбора.

Развертывание современной проверки подлинности

Помимо удаления одного из векторов атак, которые в настоящее время используются через Exchange Online, развертывание современной проверки подлинности для клиентских приложений Office позволяет вашей организации воспользоваться многофакторной проверкой подлинности. Современная проверка подлинности поддерживается всеми последними Приложение Office ликациями на платформах Windows, iOS и Android.

Дополнительные сведения см. в статье "Развертывание современной проверки подлинности для Office 365".

Так как запросы на доступ на основе паролей и имени пользователя будут по-прежнему уязвимы, несмотря на упреждающая и реактивная защита, организации должны планировать внедрение методов доступа на основе паролей как можно скорее.

Для AD FS и прокси веб-приложения доступны следующие типы проверки подлинности, отличные от пароля.

  • Проверка подлинности на основе сертификатов

    Если проверка подлинности на основе сертификатов используется в качестве альтернативы имени пользователя и доступу на основе паролей, учетные записи пользователей и доступ защищаются следующим образом:

    • Так как пользователи не используют свои пароли через Интернет, эти пароли менее подвержены раскрытию. Имена пользователей и конечные точки паролей могут быть заблокированы полностью на брандмауэре. Это удаляет вектор атаки для атак блокировки или атак методом подбора.

    • Даже если имена пользователей и конечные точки паролей хранятся в брандмауэре, вредоносные имена пользователей и запросы на основе паролей, которые вызывают блокировку, не влияют на запросы доступа, использующие сертификаты. Поэтому законный доступ пользователя сохраняется.

      Дополнительные сведения о проверке подлинности на основе сертификатов для идентификатора Microsoft Entra и Office 365 см . в этой статье блога о удостоверении Microsoft Entra.

  • многофакторная идентификация Azure (MFA);

    Azure MFA — это еще один метод доступа, отличный от пароля, который можно использовать таким же образом, как проверка подлинности на основе сертификатов, чтобы избежать использования конечных точек паролей и имен пользователей.

    Azure MFA можно использовать для защиты учетных записей в следующих сценариях.

    Сценарии Преимущество
    Использование Azure MFA в качестве дополнительной проверки подлинности в экстрасети Добавление Azure MFA или любого дополнительного поставщика проверки подлинности в AD FS и требование, чтобы дополнительный метод использовался для запросов экстрасети, защищает учетные записи от доступа с помощью украденного или принудительного пароля подбора. Это можно сделать в AD FS 2012 R2 и 2016.
    Использование Azure MFA в качестве основной проверки подлинности Это новая возможность в AD FS 2016 для включения доступа без пароля с помощью Azure MFA вместо пароля. Это защищает от нарушений паролей и блокировки.

    Дополнительные сведения о настройке Azure MFA с помощью AD FS см. в статье "Настройка AD FS 2016 и Azure MFA"

  • Windows Hello для бизнеса

    Windows Hello для бизнеса доступна в Windows 10. Windows Hello для бизнеса обеспечивает бесплатный доступ к паролям из экстрасети на основе надежных криптографических ключей, привязанных как к пользователю, так и к устройству.

    Windows Hello для бизнеса поддерживается AD FS в Windows Server 2016. См. проверку подлинности удостоверений без паролей с помощью Windows Hello для бизнеса.

Шаг 3. Отключение устаревшей проверки подлинности и неиспользуемых конечных точек

Отключите устаревшие конечные точки, используемые клиентами EAS через Exchange Online, например следующие:

/adfs/services/trust/13/usernamemixed endpoint

Примечание.

Это может нарушить некоторые функции. Однако это может помочь уменьшить объем векторов поверхности, доступных злоумышленникам для использования. Кроме того, рекомендуется отключить неиспользуемые конечные точки.

Убедитесь, что проблема устранена.

Убедитесь, что учетные данные обновляются в службе или приложении

Если учетная запись пользователя используется в качестве учетной записи службы, последние учетные данные могут не обновляться для службы или приложения. В этой ситуации служба может попытаться пройти проверку подлинности с помощью неправильных учетных данных. Это приводит к возникновению условия блокировки.

Чтобы устранить эту проблему, проверьте конфигурацию учетной записи службы в службе или приложении, чтобы убедиться, что учетные данные верны. Если нет, выполните следующий шаг.

Очистка кэшированных учетных данных в приложении

Если учетные данные пользователя кэшируются в одном из приложений, повторные попытки проверки подлинности могут привести к блокировке учетной записи. Чтобы устранить эту проблему, снимите кэшированные учетные данные в приложении. Убедитесь, что проблема устранена.

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


Средство синтаксического анализа событий аудита безопасности 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++
 }

Свяжитесь с нами для получения помощи

Если у вас есть вопросы или вам нужна помощь, создайте запрос в службу поддержки или обратитесь за поддержкой сообщества Azure. Вы также можете отправить отзыв о продукте в сообщество отзывов Azure.