Aracılığıyla paylaş


Windows Server'da AD FS'de hesap kilitleme sorunlarını giderme

Bu makalede, Windows Server'da Microsoft Active Directory Federasyon Hizmetleri (AD FS)'da (AD FS) hesap kilitleme sorununu giderme adımları sağlanır.

Özgün ürün sürümü: Windows Server 2019, Windows Server 2016, Windows Server 2012 R2, Windows Server 2012
Özgün KB numarası: 4471013

Windows Server'da AD FS'de bir hesap kilitleme sorunuyla karşılaşabilirsiniz. Bu sorunu gidermek için önce aşağıdaki noktaları denetleyin:

Kullanıcı oturum açma etkinlikleri için veri oluşturmak için Connect Health'i kullanma

Kullanıcı oturum açma etkinliği hakkında veri oluşturmak için Connect Health'i kullanabilirsiniz. Connect Health, AD FS grubunda yapılan en kötü parola girişimleri hakkında raporlar oluşturur.

Hatalı parola girişiminin kullanıcı hesapları ve IP'lerinin listesini analiz etmek için bu makaledeki bilgilere bakın. Ardından, Hatalı parola girişimlerinden etkilenen hesapların IP'sini ve kullanıcı adını analiz etme bölümüne gidin.

AD FS ve Web Uygulama Ara Sunucusu sunucularından AD FS olay günlüklerini toplama

1. Adım: AD FS ve Web Uygulama Ara Sunucusu sunucularından AD FS olay günlüklerini toplama

Olay günlüklerini toplamak için önce AD FS sunucularını denetim için yapılandırmanız gerekir. AD FS grubunuz için bir yük dengeleyiciniz varsa, grubundaki her AD FS sunucusunda denetimi etkinleştirmeniz gerekir. Denetimin Web Uygulama Ara Sunucusu sunucularında yapılandırılması gerekmez.

AD FS sunucularını denetim için yapılandırmak için aşağıdaki yöntemi kullanabilirsiniz:

2. Adım: AD FS günlüklerinde arama

Windows Server 2012 R2 veya Windows Server 2016 AD FS için tüm AD FS Sunucularının güvenlik olay günlüklerinde "Olay Kimliği 411 Kaynak AD FS Denetimi" olaylarını arayın. "411 olayları" hakkında aşağıdaki bilgilere dikkat edin:

  • AD FS sunucularınızda "411" olayları aramak için ADFS Hesap Kilitleme ve Hatalı Cred Search (AD FSBadCredsSearch.ps1)PowerShell betiğini indirebilirsiniz. Betik UserPrincipalName, gönderenin IP adresi ve AD FS grubunuza yapılan tüm hatalı kimlik bilgisi gönderimlerinin zamanını içeren bir CSV dosyası sağlar. CSV dosyasını Excel'de açın ve kullanıcı adına, IP adresine veya saate göre hızla filtreleyin.
  • Bu olaylar hedeflenen kullanıcının kullanıcı asıl adını (UPN) içerir.
  • Bu olaylar, olayın hatalı parola girişimini mi yoksa hesap kilitlemeyi mi gösterdiğini belirten bir "belirteç doğrulaması başarısız oldu" iletisi içerir.
  • Sunucuda "411" olayları görüntüleniyorsa ancak olayda IP adresi alanı yoksa, sunucularınıza en son AD FS düzeltmesinin uygulandığından emin olun. Daha fazla bilgi için bkz. MS16-020: Hizmet reddini ele almak için Active Directory Federasyon Hizmetleri (AD FS) için güvenlik güncelleştirmesi: 9 Şubat 2016.

Windows Server 2008 R2 veya Windows Server 2012 AD FS için gerekli Olay 411 ayrıntılarına sahip olmazsınız. Bunun yerine, etkilenen kullanıcılarla ilgili ayrıntıları bulmak üzere güvenlik olayları 4625 (hatalı parola denemeleri) ve 501 (AD FS denetim ayrıntıları) arasında bağıntı sağlamak için aşağıdaki PowerShell betiğini indirin ve çalıştırın.

  • AD FS sunucularınızda olayları aramak için ADFS Güvenlik Denetim Olayları Ayrıştırıcısı (ADFSSecAuditParse.ps1) PowerShell betiğini indirebilirsiniz. Betik UserPrincipalName, gönderenin IP adresi ve AD FS grubunuza yapılan tüm hatalı kimlik bilgisi gönderimlerinin zamanını içeren bir CSV dosyası sağlar.
  • "411" olaylarında kullanıcılar için hangi bağlantıların başarılı olduğunu araştırmak için de bu yöntemi kullanabilirsiniz. Daha fazla ayrıntı için AD FS "501" olaylarında arama yapabilirsiniz.
  • Olayları aramak için PowerShell betiğini çalıştırdığınızda, "411" olaylarında tanımlanan kullanıcının UPN'sini geçirin veya hesap kilitleme raporlarına göre arama yapın.
  • Kötü amaçlı gönderenlerin IP adresi "501" olaylarındaki iki alandan birinde görüntülenir.
  • Web tabanlı senaryolar ve çoğu uygulama kimlik doğrulaması senaryosu için kötü amaçlı IP, x-ms-client-ip alanında olur.

Hatalı parola girişimlerinden etkilenen hesapların IP'sini ve kullanıcı adını analiz etme

IP adreslerini ve kullanıcı adlarını numaralandırdıktan sonra, beklenmeyen erişim konumlarına yönelik IP'leri belirleyin.

Dış bilinmeyen IP'lerden yapılan girişimler var mı?

AD FS sunucularını en son düzeltmelerle güncelleştirme

AD FS sunucularının en son işlevlere sahip olduğundan emin olmak için, AD FS ve Web Uygulama Ara Sunucusu sunucuları için en son düzeltmeleri uygulayın. Ayrıca, daha sonra kullanılacak Olay 411'de IP adreslerini günlüğe kaydetmek için Windows Server 2012 R2'de düzeltme 3134222 gerekir.

Extranet kilitlemesinin etkinleştirilip etkinleştirilmediğini denetleyin

Extranet kilitlemesinin etkinleştirilip etkinleştirilmediğini denetlemek için Get-ADFSProperties kullanın.

  • Extranet kilitleme etkinleştirildiyse Extranet kilitleme ve iç kilitleme eşiklerini denetleme bölümüne gidin.
  • Extranet kilitleme etkin değilse, AD FS'nin uygun sürümü için aşağıdaki adımları başlatın.

Kilitleme durumunu denetleme adımları

Windows Server 2012 R2 veya daha yeni sürüm için

Akıllı kilitleme, bir güncelleştirmeyle yakında AD FS 2016 ve 2012 R2'de kullanıma sunulacak yeni bir özelliktir. Bu bölüm, özellik kullanılabilir olduğunda akıllı kilitlemeyi etkinleştirmek için uygun adımlarla güncelleştirilecektir. Ardından Extranet kilitleme ve iç kilitleme eşiklerini denetleme bölümüne gidin.

Windows Server 2008 R2 Windows veya daha eski sürüm için

AD FS sunucularını Windows Server 2012 R2 veya Windows Server 2016'ya yükseltmenizi öneririz. Daha fazla bilgi için bkz . Windows Server 2016'da AD FS'ye yükseltme. Ardından Windows Server 2012 R2 veya daha yeni sürüm adımlarını izleyin.

1. Adım: Extranet kilitleme ve iç kilitleme eşiklerini denetleme

Extranet kilitleme ve iç kilitleme eşiklerinin doğru yapılandırıldığından emin olun. Daha fazla bilgi için bkz . Önerilen güvenlik yapılandırmaları. Genellikle, ExtranetLockoutThreshold ad için kilitleme eşiğinden daha az olmalıdır, böylece kullanıcı yalnızca iç erişim için Active Directory'de kilitlenmeden extranet erişimine karşı kilitlenir.

2. Adım: Modern kimlik doğrulamasını ve Sertifika tabanlı kimlik doğrulamasını etkinleştirme

Deneme yanılma saldırısı riskini azaltmak için modern kimlik doğrulamasını, sertifika tabanlı kimlik doğrulamayı ve bu adımda listelenen diğer özellikleri etkinleştirmenizi öneririz.

Modern kimlik doğrulamayı dağıtma

Exchange Online aracılığıyla kullanılmakta olan saldırı vektörlerinden birini kaldırmaya ek olarak, Office istemci uygulamalarınız için modern kimlik doğrulaması dağıtmak kuruluşunuzun çok faktörlü kimlik doğrulamasından yararlanmasını sağlar. Modern kimlik doğrulaması Windows, iOS ve Android platformlarında en son Office uygulaması tarafından desteklenir.

Daha fazla bilgi için bkz . Office 365 için modern kimlik doğrulamasını dağıtma.

Proaktif ve reaktif savunmalarımıza rağmen kullanıcı adı ve parola tabanlı erişim istekleri savunmasız olmaya devam edeceğinden, kuruluşların parola tabanlı olmayan erişim yöntemlerini en kısa sürede benimsemeyi planlamaları gerekir.

AD FS ve Web Uygulama Ara Sunucusu için aşağıdaki parola tabanlı olmayan kimlik doğrulama türleri kullanılabilir.

  • Sertifika tabanlı kimlik doğrulaması

    Kullanıcı adı ve parola tabanlı erişime alternatif olarak sertifika tabanlı kimlik doğrulaması kullanıldığında, kullanıcı hesapları ve erişim aşağıdaki şekilde korunur:

    • Kullanıcılar parolalarını İnternet üzerinden kullanmadığından, bu parolalar açığa çıkmasına daha az duyarlıdır. Kullanıcı adı ve parola uç noktaları güvenlik duvarında tamamen engellenebilir. Bu, kilitleme veya deneme yanılma saldırıları için saldırı vektörlerini kaldırır.

    • Güvenlik duvarında kullanıcı adı ve parola uç noktaları kullanılabilir durumda tutulsa bile, kilitlenmeye neden olan kötü amaçlı kullanıcı adı ve parola tabanlı istekler, sertifika kullanan erişim isteklerini etkilemez. Bu nedenle, meşru kullanıcının erişimi korunur.

      Microsoft Entra Id ve Office 365 için sertifika tabanlı kimlik doğrulaması hakkında daha fazla bilgi için bu Microsoft Entra identity Blog makalesine bakın.

  • Azure Multi-Factor Authentication (MFA)

    Azure MFA, parola ve kullanıcı adı uç noktalarını tamamen kullanmaktan kaçınmak için sertifika tabanlı kimlik doğrulamasıyla aynı şekilde kullanabileceğiniz parola tabanlı olmayan bir erişim yöntemidir.

    Azure MFA, aşağıdaki senaryolarda hesaplarınızı korumak için kullanılabilir.

    Senaryolar Avantaj
    Extranet üzerinden ek kimlik doğrulaması olarak Azure MFA kullanma AD FS'ye Azure MFA veya herhangi bir ek kimlik doğrulama sağlayıcısı eklemek ve extranet istekleri için ek yöntemin kullanılmasını zorunlu kılması, hesaplarınızı çalınmış veya deneme yanılma amaçlı bir parola kullanarak erişime karşı korur. Bu, AD FS 2012 R2 ve 2016'da yapılabilir.
    Birincil kimlik doğrulaması olarak Azure MFA kullanma Bu, AD FS 2016'da parola yerine Azure MFA kullanarak parolasız erişimi etkinleştirmeye yönelik yeni bir özelliktir. Bu, hem parola ihlallerine hem de kilitlemelere karşı koruma sağlar.

    AZURE MFA'yı AD FS kullanarak yapılandırma hakkında daha fazla bilgi için bkz . AD FS 2016 ve Azure MFA'yı yapılandırma

  • İş İçin Windows Hello

    İş İçin Windows Hello Windows 10'da kullanılabilir. İş İçin Windows Hello, hem kullanıcıya hem de cihaza bağlı güçlü şifreleme anahtarları temelinde extranetten parolasız erişim sağlar.

    İş İçin Windows Hello, Windows Server 2016'da AD FS tarafından desteklenir. Bkz. İş İçin Windows Hello aracılığıyla parola olmadan kimlik doğrulama.

3. Adım: Eski kimlik doğrulamasını ve kullanılmayan uç noktaları devre dışı bırakma

Exchange Online aracılığıyla EAS istemcileri tarafından kullanılan eski uç noktaları devre dışı bırakın, örneğin:

/adfs/services/trust/13/usernamemixed endpoint

Not

Bunu yapmak bazı işlevleri kesintiye uğratabilir. Ancak, saldırganların yararlanabileceği yüzey vektörlerini azaltmaya yardımcı olabilir. Ayrıca kullanılmayan uç noktaları devre dışı bırakmanızı öneririz.

Sorunun çözülmüş olup olmadığını denetleyin.

Hizmette veya uygulamada kimlik bilgilerinin güncelleştirildiğinden emin olun

Kullanıcı hesabı bir hizmet hesabı olarak kullanılıyorsa, hizmet veya uygulama için en son kimlik bilgileri güncelleştirilmeyebilir. Bu durumda hizmet, yanlış kimlik bilgilerini kullanarak kimlik doğrulaması yapmaya çalışabilir. Bu bir kilitleme koşuluna neden olur.

Bu sorunu çözmek için hizmet veya uygulamadaki hizmet hesabı yapılandırmasını denetleerek kimlik bilgilerinin doğru olduğundan emin olun. Aksi takdirde, sonraki adımı izleyin.

Uygulamada önbelleğe alınmış kimlik bilgilerini temizleme

Kullanıcı kimlik bilgileri uygulamalardan birinde önbelleğe alınırsa, yinelenen kimlik doğrulama girişimleri hesabın kilitlenmesine neden olabilir. Bu sorunu çözmek için uygulamadaki önbelleğe alınmış kimlik bilgilerini temizleyin. Sorunun çözülmüş olup olmadığını denetleyin.

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 Güvenlik Denetim Olayları Ayrıştırıcısı

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

Yardım için bize ulaşın

Sorularınız veya yardıma ihtiyacınız varsa bir destek isteği oluşturun veya Azure topluluk desteği isteyin. Ürün geri bildirimini Azure geri bildirim topluluğuna da gönderebilirsiniz.