Udostępnij za pośrednictwem


Rozwiązywanie problemów z blokadą konta w usługach AD FS w systemie Windows Server

Ten artykuł zawiera kroki rozwiązywania problemów z blokadą konta w usługach Microsoft Active Directory Federation Services (AD FS) w systemie Windows Server.

Oryginalna wersja produktu: Windows Server 2019, Windows Server 2016, Windows Server 2012 R2, Windows Server 2012
Oryginalny numer KB: 4471013

Może wystąpić problem z blokadą konta w usługach AD FS w systemie Windows Server. Aby rozwiązać ten problem, najpierw sprawdź następujące kwestie:

Generowanie danych dla działań logowania użytkowników przy użyciu programu Connect Health

Możesz użyć programu Connect Health, aby wygenerować dane dotyczące aktywności logowania użytkownika. Program Connect Health tworzy raporty dotyczące najważniejszych nieudanych prób haseł w farmie usług AD FS.

Zapoznaj się z informacjami w tym artykule , aby przeanalizować listę kont użytkowników i adresów IP nieprawidłowego hasła. Następnie przejdź do pozycji Analizuj adres IP i nazwę użytkownika kont, na które mają wpływ nieprawidłowe próby hasła.

Zbieranie dzienników zdarzeń usług AD FS z usług AD FS i serwerów serwer proxy aplikacji sieci Web

Krok 1. Zbieranie dzienników zdarzeń usług AD FS z usług AD FS i serwerów serwer proxy aplikacji sieci Web

Aby zbierać dzienniki zdarzeń, należy najpierw skonfigurować serwery usług AD FS na potrzeby inspekcji. Jeśli masz moduł równoważenia obciążenia dla farmy usług AD FS, należy włączyć inspekcję na każdym serwerze usług AD FS w farmie. Inspekcja nie musi być skonfigurowana na serwerach serwer proxy aplikacji sieci Web.

Aby skonfigurować serwery usług AD FS do inspekcji, można użyć następującej metody:

Krok 2. Wyszukiwanie dzienników usług AD FS

W przypadku systemu Windows Server 2012 R2 lub Windows Server 2016 AD FS wyszukaj wszystkie dzienniki zdarzeń zabezpieczeń serwerów usług AD FS pod kątem zdarzeń "Identyfikator zdarzenia 411 Źródłowy inspekcja usług AD FS". Należy pamiętać o następujących informacjach o zdarzeniach "411":

W przypadku systemu Windows Server 2008 R2 lub Windows Server 2012 AD FS nie będziesz mieć niezbędnych szczegółów zdarzenia 411. Zamiast tego pobierz i uruchom następujący skrypt programu PowerShell, aby skorelować zdarzenia zabezpieczeń 4625 (nieprawidłowe próby hasła) i 501 (szczegóły inspekcji usług AD FS), aby znaleźć szczegółowe informacje o dotkniętych użytkownikach.

  • Analizator zdarzeń inspekcji zabezpieczeń usług ADFS (ADFSSecAuditParse.ps1) programu PowerShell umożliwia wyszukiwanie serwerów usług AD FS pod kątem zdarzeń. Skrypt zawiera plik CSV, który zawiera userPrincipalName, adres IP przesyłania i czas wszystkich złych poświadczeń przesłanych do farmy usług AD FS.
  • Można również użyć tej metody, aby zbadać, które połączenia są pomyślne dla użytkowników w zdarzeniach "411". Aby uzyskać więcej informacji, możesz wyszukać zdarzenia "501" usług AD FS.
  • Po uruchomieniu skryptu programu PowerShell w celu wyszukania zdarzeń przekaż nazwę UPN użytkownika, który jest identyfikowany w zdarzeniach "411" lub wyszukuj według raportów blokady konta.
  • Adres IP złośliwych osób przesyłających jest wyświetlany w jednym z dwóch pól zdarzeń "501".
  • W przypadku scenariuszy internetowych i większości scenariuszy uwierzytelniania aplikacji złośliwy adres IP będzie znajdować się w polu x-ms-client-ip .

Analizowanie adresu IP i nazwy użytkownika kont, na które mają wpływ nieprawidłowe próby hasła

Po wyliczenie adresów IP i nazw użytkowników zidentyfikuj adresy IP, które są przeznaczone dla nieoczekiwanych lokalizacji dostępu.

Czy próby są podejmowane z zewnętrznych nieznanych adresów IP?

Aktualizowanie serwerów usług AD FS przy użyciu najnowszych poprawek

Aby upewnić się, że serwery usług AD FS mają najnowsze funkcje, zastosuj najnowsze poprawki dla serwerów usług AD FS i sieci Web serwer proxy aplikacji. Ponadto w systemie Windows Server 2012 R2 jest wymagana poprawka 3134222 do rejestrowania adresów IP w zdarzeniu 411, które będą używane później.

Sprawdzanie, czy blokada ekstranetu jest włączona

Użyj właściwości Get-ADFSProperties , aby sprawdzić, czy blokada ekstranetu jest włączona.

Kroki sprawdzania stanu blokady

W przypadku systemu Windows Server 2012 R2 lub nowszej wersji

Inteligentna blokada to nowa funkcja, która będzie dostępna wkrótce w usługach AD FS 2016 i 2012 R2 za pośrednictwem aktualizacji. Ta sekcja zostanie zaktualizowana o odpowiednie kroki umożliwiające włączenie inteligentnej blokady zaraz po udostępnieniu funkcji. Następnie przejdź do pozycji Sprawdź blokadę ekstranetu i wewnętrzne progi blokady.

W przypadku systemu Windows Server 2008 R2 Windows lub starszej wersji

Zalecamy uaktualnienie serwerów usług AD FS do systemu Windows Server 2012 R2 lub Windows Server 2016. Aby uzyskać więcej informacji, zobacz Uaktualnianie do usług AD FS w systemie Windows Server 2016. Następnie wykonaj kroki dla systemu Windows Server 2012 R2 lub nowszej wersji.

Krok 1. Sprawdzanie blokady ekstranetu i wewnętrznych progów blokady

Upewnij się, że blokada ekstranetu i wewnętrzne progi blokady są poprawnie skonfigurowane. Aby uzyskać więcej informacji, zobacz Zalecane konfiguracje zabezpieczeń. Ogólnie rzecz biorąc, wartość ExtranetLockoutThreshold powinna być mniejsza niż próg blokady dla usługi AD, dzięki czemu użytkownik zostanie zablokowany tylko dla dostępu ekstranetu bez konieczności blokowania dostępu wewnętrznego w usłudze Active Directory.

Krok 2. Włączanie nowoczesnego uwierzytelniania i uwierzytelniania opartego na certyfikatach

Zalecamy włączenie nowoczesnego uwierzytelniania, uwierzytelniania opartego na certyfikatach i innych funkcji wymienionych w tym kroku w celu obniżenia ryzyka ataków siłowych.

Wdrażanie nowoczesnego uwierzytelniania

Oprócz usuwania jednego z wektorów ataków, które są obecnie używane za pośrednictwem usługi Exchange Online, wdrażanie nowoczesnego uwierzytelniania dla aplikacji klienckich pakietu Office umożliwia organizacji korzystanie z uwierzytelniania wieloskładnikowego. Nowoczesne uwierzytelnianie jest obsługiwane przez wszystkie najnowsze aplikacja pakietu Office licacje na platformach Windows, iOS i Android.

Aby uzyskać więcej informacji, zobacz Jak wdrożyć nowoczesne uwierzytelnianie dla usługi Office 365.

Ze względu na to, że żądania dostępu oparte na nazwach użytkowników i hasłach będą nadal podatne na zagrożenia pomimo proaktywnej i reaktywnej ochrony, organizacje powinny planować wdrożenie metod dostępu nienależących do haseł tak szybko, jak to możliwe.

Następujące typy uwierzytelniania nie oparte na hasłach są dostępne dla usług AD FS i sieci Web serwer proxy aplikacji.

  • Uwierzytelnianie oparte na certyfikatach

    Jeśli uwierzytelnianie oparte na certyfikatach jest używane jako alternatywa dla nazwy użytkownika i dostępu opartego na hasłach, konta użytkowników i dostęp są chronione w następujący sposób:

    • Ponieważ użytkownicy nie używają swoich haseł przez Internet, te hasła są mniej podatne na ujawnienie. Punkty końcowe nazwy użytkownika i hasła mogą być całkowicie blokowane w zaporze. Spowoduje to usunięcie wektora ataku na blokadę lub ataki siłowe.

    • Nawet jeśli nazwy użytkownika i punkty końcowe haseł są przechowywane w zaporze, złośliwe nazwy użytkownika i żądania oparte na hasłach, które powodują blokadę, nie mają wpływu na żądania dostępu korzystające z certyfikatów. W związku z tym dostęp uzasadnionego użytkownika jest zachowywany.

      Aby uzyskać więcej informacji na temat uwierzytelniania opartego na certyfikatach dla identyfikatorów firmy Microsoft i usługi Office 365, zobacz ten artykuł na temat tożsamości firmy Microsoft.

  • Azure Multi-Factor Authentication (MFA)

    Usługa Azure MFA to inna metoda dostępu nie oparta na hasłach, której można używać w taki sam sposób, jak uwierzytelnianie oparte na certyfikatach, aby uniknąć całkowitego używania punktów końcowych haseł i nazw użytkowników.

    Usługa Azure MFA może służyć do ochrony kont w następujących scenariuszach.

    Scenariusze Korzyść
    Używanie usługi Azure MFA jako dodatkowego uwierzytelniania za pośrednictwem ekstranetu Dodanie usługi Azure MFA lub dowolnego dodatkowego dostawcy uwierzytelniania do usług AD FS i wymaganie użycia dodatkowej metody dla żądań ekstranetu chroni konta przed dostępem przy użyciu skradzionego lub wymuszonego hasła. Można to zrobić w usługach AD FS 2012 R2 i 2016.
    Używanie usługi Azure MFA jako uwierzytelniania podstawowego Jest to nowa funkcja w usługach AD FS 2016 w celu włączenia dostępu bez hasła przy użyciu usługi Azure MFA zamiast hasła. Chroni to zarówno przed naruszeniami haseł, jak i blokadami.

    Aby uzyskać więcej informacji na temat konfigurowania usługi Azure MFA przy użyciu usług AD FS, zobacz Konfigurowanie usług AD FS 2016 i Azure MFA

  • Windows Hello for Business

    Windows Hello dla firm jest dostępna w systemie Windows 10. Windows Hello dla firm umożliwia dostęp bez hasła z ekstranetu na podstawie silnych kluczy kryptograficznych powiązanych zarówno z użytkownikiem, jak i urządzeniem.

    Windows Hello dla firm jest obsługiwany przez usługi AD FS w systemie Windows Server 2016. Zobacz Uwierzytelnianie tożsamości bez haseł za pośrednictwem Windows Hello dla firm.

Krok 3. Wyłączanie starszego uwierzytelniania i nieużywanych punktów końcowych

Wyłącz starsze punkty końcowe, które są używane przez klientów EAS za pośrednictwem usługi Exchange Online, takie jak:

/adfs/services/trust/13/usernamemixed endpoint

Uwaga 16.

Może to zakłócić niektóre funkcje. Może jednak pomóc zmniejszyć liczbę wektorów powierzchni, które są dostępne dla osób atakujących w celu wykorzystania ich. Ponadto zalecamy wyłączenie nieużywanych punktów końcowych.

Sprawdź, czy problem został rozwiązany.

Upewnij się, że poświadczenia są aktualizowane w usłudze lub aplikacji

Jeśli konto użytkownika jest używane jako konto usługi, najnowsze poświadczenia mogą nie zostać zaktualizowane dla usługi lub aplikacji. W takiej sytuacji usługa może nadal próbować uwierzytelniać się przy użyciu nieprawidłowych poświadczeń. Powoduje to warunek blokady.

Aby rozwiązać ten problem, sprawdź konfigurację konta usługi w usłudze lub aplikacji, aby upewnić się, że poświadczenia są poprawne. Jeśli nie, wykonaj następny krok.

Wyczyść buforowane poświadczenia w aplikacji

Jeśli poświadczenia użytkownika są buforowane w jednej z aplikacji, powtarzające się próby uwierzytelniania mogą spowodować zablokowanie konta. Aby rozwiązać ten problem, wyczyść buforowane poświadczenia w aplikacji. Sprawdź, czy problem został rozwiązany.

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


Analizator zdarzeń inspekcji zabezpieczeń usług AD FS

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++
 }

Skontaktuj się z nami, aby uzyskać pomoc

Jeśli masz pytania lub potrzebujesz pomocy, utwórz wniosek o pomoc techniczną lub zadaj pytanie w społeczności wsparcia dla platformy Azure. Możesz również przesłać opinię o produkcie do społeczności opinii na temat platformy Azure.