Ringkasan
Kepercayaan hutan memberikan cara untuk sumber daya di hutan direktori aktif untuk mempercayai identitas dari lokasi lain. Kepercayaan ini dapat dikonfigurasi di kedua arah. Hutan terpercaya adalah sumber identitas pengguna. Hutan mempercayai berisi sumber yang pengguna mengotentikasi. Hutan terpercaya dapat mengotentikasi pengguna hutan mempercayai tanpa membiarkan sebaliknya terjadi.
Tidak dibatasi delegasi Kerberos adalah mekanisme di mana pengguna mengirim kredensialnya ke layanan untuk mengaktifkan layanan untuk mengakses sumber daya atas nama pengguna. Untuk mengaktifkan delegasi Kerberos tidak dibatasi, akun layanan di direktori aktif harus ditandai sebagai dipercaya untuk delegasi. Ini membuat masalah jika pengguna dan layanan termasuk hutan berbeda. Layanan hutan bertanggung jawab untuk memungkinkan delegasi. Delegasi mencakup kredensial pengguna dari pengguna forest.
Membolehkan satu hutan untuk membuat keputusan keamanan yang mempengaruhi akun lain hutan melanggar batas keamanan antara hutan. Seorang penyerang yang memiliki hutan mempercayai dapat meminta delegasi TGT identitas dari hutan terpercaya, memberikan akses ke sumber daya di hutan terpercaya. Hal ini tidak berlaku untuk delegasi Kerberos dibatasi (KCD).
Windows Server 2012 memperkenalkan penegakan hutan batas untuk delegasi Kerberos penuh. Fitur ini menambahkan kebijakan domain terpercaya untuk menonaktifkan tidak dibatasi delegasi secara per kepercayaan. Pengaturan default untuk fitur ini memungkinkan delegasi tidak dibatasi dan tidak aman.
Pemutakhiran yang menyediakan keamanan pengerasan ada untuk Windows Server versi berikut ini:
-
Windows Server 2019
-
Windows Server 2016
-
Windows Server 2012 R2
-
Windows Server 2012
Fitur ini bersama-sama dengan perubahan Pengerasan Keamanan telah backported ke versi berikut ini:
-
Windows Server 2008 R2
-
Windows Server 2008
Pembaruan keamanan ini membuat perubahan berikut:
-
Delegasi Kerberos tidak dibatasi dinonaktifkan secara default di hutan baru dan kepercayaan eksternal barusetelah Anda menginstal14 April pemutakhiran dan pemutakhiran yang lebih baru.
-
Delegasi Kerberos tidak dibatasi dinonaktifkan di hutan (baru dan yang ada) dan kepercayaan eksternal setelah Anda menginstal Juli 9, 2019, pemutakhiran dan pemutakhiran yang lebih baru.
-
Administrator dapat mengaktifkan delegasi Kerberos tidak dibatasi dengan menggunakan Mei atau versi yang lebih baru dari modul NETDOM dan AD PowerShell.
Pembaruan mungkin menyebabkan konflik kompatibilitas aplikasi yang saat ini memerlukan delegasi tidak dibatasi di hutan atau kepercayaan eksternal. Hal ini terutama benar kepercayaan eksternal yang bendera karantina (juga dikenal sebagai SID penyaringan) diaktifkan secara default. Khususnya, permintaan otentikasi untuk layanan yang Anda gunakan tidak dibatasi delegasi atas jenis kepercayaan dicantumkan akan gagal jika Anda meminta tiket baru.
Tanggal rilis, untuk melihat pembaruan garis waktu.
Penyelesaian Masalah
Untuk memberikan keamanan data dan akun di Windows Server versi yang memiliki fitur penegakan hutan batas untuk delegasi Kerberos penuh , Anda dapat memblokir TGT delegasi setelah Anda menginstal pembaruan Maret 2019 seluruh kepercayaan masuk dengan pengaturan Bendera netdom EnableTGTDelegationNo, sebagai berikut:
netdom.exe trust fabrikam.com /domain:contoso.com /EnableTGTDelegation:No
Delegasi TGT diblokir di hutan baru dan yang sudah ada dan kepercayaan eksternal setelah Anda menginstal Mei dan Juli 2019 pembaruan masing-masing.
Untuk mengaktifkan kembali delegasi seluruh Trust dan kembali ke konfigurasi tidak aman yang asli sampai dibatasi atau sumber daya berbasis delegasi dapat diaktifkan, mengatur bendera EnableTGTDelegation ke ya.
Baris perintah NETDOM untuk mengaktifkan delegasi TGT adalah sebagai berikut:
netdom trust <TrustedDomainName > /domain:<TrustingDomainName > /EnableTgtDelegation:Yes
Anda dapat secara konsep pikirkan sintaks NETDOM untuk mengaktifkan delegasi TGT sebagai berikut:
netdom trust <domain that you are administering> /domain:<domain whose trust NETDOM is modifying> /EnableTgtDelegation:Yes
Sintaks NETDOM untuk mengaktifkan delegasi TGT fabrakam.com pengguna di server contoso.com adalah sebagai berikut:
netdom.exe trust fabrikam.com /domain:contoso.com /EnableTGTDelegation:Yes
Catatan
-
Bendera EnableTGTDelegation harus ditetapkan di domain yang terpercaya (fabrikam.com dalam kasus ini) untuk setiap mempercayai domain (misalnya contoso.com). Setelah menetapkan bendera, domain terpercaya tidak akan lagi mengizinkan TGTs delegasi ke domain mempercayai.
-
Status aman untuk EnableTGTDelegation adalah tidak ada.
-
Aplikasi atau layanan yang tergantung pada delegasi tidak dibatasi di hutan akan gagal bila EnableTGTDelegation secara manual atau secara programatik diatur ke ya. EnableTGTDelegation default tidak Trust baru dan ada setelah Anda menginstal pembaruan mungkin 2019 dan Juli 2019. Untuk informasi selengkapnya tentang cara mendeteksi kegagalan ini, lihat menemukan layanan yang mengandalkan delegasi tidak dibatasi. Lihat pemutakhiran garis waktu untuk waktu perubahan yang mempengaruhi bagaimana pemecahan masalah ini dapat diterapkan.
-
Untuk informasi selengkapnya tentang NETDOM, lihat dokumentasi Netdom.exe.
-
Jika Anda harus mengaktifkan TGT delegasi pada kepercayaan, disarankan untuk mengurangi risiko dengan mengaktifkan Windows Defender kredensial jaga pada komputer klien. Hal ini mencegah semua tidak dibatasi delegasi dari komputer yang memiliki Windows Defender kredensial jaga diaktifkan dan dijalankan.
-
Jika Anda memiliki hutan atau kepercayaan eksternal, dan salah satu dikonfigurasi sesuai dikarantina, delegasi TGT tidak dapat diaktifkan karena bendera dua berlawanan semantik. Bit karantina memperkuat keamanan batas antara berpartisipasi domain. Mengaktifkan delegasi TGT menghapus batas keamanan antara domain dengan memberikan akses domain mempercayai kredensial pengguna dari domain yang terpercaya. Anda tidak memiliki cara kedua.
Menambah bendera karantina: no NETDOM baris perintah sintaks jika bendera karantina diaktifkan saat ini.
-
Jika Anda mengubah EnableTGTDelegation untuk ya, Hapus tiket Kerberos berasal dan menengah penelepon sesuai yang diperlukan. Tiket relevan untuk menghapus adalah klien rujukan TGT seluruh kepercayaan relevan. Hal ini dapat melibatkan lebih dari satu perangkat, tergantung pada jumlah hop delegasi di lingkungan tertentu.
Untuk informasi selengkapnya tentang prosedur ini, lihat artikel Windows IT Pro Center berikut ini:
Lindungi domain berasal kredensial dengan Windows Defender kredensial jaga
Pemutakhiran garis waktu
12 Maret 2019
Penegakan untuk hutan batas untuk Kerberos delegasi penuh akan tersedia sebagai pemutakhiran untuk mengaktifkan fitur ini di semua versi yang didukung Windows Server yang tercantum di bagian berlaku untuk di bagian atas artikel ini. Kami sarankan Anda mengatur fitur masuk Trust forest.
Pembaruan akan menambahkan fitur penegakan hutan batas untuk delegasi Kerberos penuh ke sistem berikut ini:
-
Windows Server 2008 R2
-
Windows Server 2008
14 April 2019
Pemutakhiran dirilis menambahkan baru aman default konfigurasi ke lokasi baru dan kepercayaan eksternal. Jika Anda memerlukan delegasi seluruh Trust, bendera EnableTGTDelegation harus ditetapkan ke ya sebelum 9 Juli 2019 pembaruan telah diinstal. Jika Anda tidak memerlukan delegasi seluruh Trust, Anda tidak harus menetapkan bendera EnableTGTDelegation . Bendera EnableTGTDelegation akan diabaikan sampai 9 Juli 2019 pembaruan telah diinstal untuk memberikan administrator waktu untuk mengaktifkan kembali tidak dibatasi delegasi Kerberos bila diperlukan.
Sebagai bagian dari pembaruan ini, bendera EnableTGTDelegation akan ditetapkan ke tidak secara default untuk semua kepercayaan baru dibuat. Ini adalah kebalikan dari perilaku sebelumnya. Kami menyarankan bahwa administrator bukannya mengkonfigurasi layanan yang terpengaruh untuk menggunakan sumber daya berbasis delegasi dibatasi.
Untuk informasi selengkapnya tentang cara mendeteksi masalah kompatibilitas, lihat menemukan layanan yang mengandalkan delegasi tidak dibatasi.
9 Juli 2019
Pemutakhiran dirilis yang memberlakukan perilaku default baru di sebelah masuk hutan dan kepercayaan eksternal. Otentikasi permintaan untuk layanan yang Anda gunakan tidak dibatasi delegasi atas jenis kepercayaan dicantumkan akan diotentikasi tetapi tanpa delegasi. Layanan akan gagal saat mencoba untuk menjalankan operasi delegasi.
Untuk mitigasi, lihat bagian "pemecahan masalah".
Menemukan layanan yang mengandalkan delegasi tidak dibatasi
Untuk memindai hutan yang memiliki kepercayaan masuk yang memungkinkan TGT delegasi, dan untuk menemukan keamanan setiap kepala yang memungkinkan delegasi tidak dibatasi, jalankan PowerShell berikut skrip di skrip berkas (misalnya, Get-RiskyServiceAccountsByTrust.ps1- Kumpulkan):
Catatan
Anda juga dapat melewati bendera - ScanAll untuk menelusuri Trust yang tidak mengizinkan TGT delegasi.
[CmdletBinding()]
Param
(
[switch]$Collect,
[switch]$ScanAll
)
if ($Debug) {
$DebugPreference = 'Continue'
}
else {
$DebugPreference = 'SilentlyContinue'
}
function Get-AdTrustsAtRisk
{
[CmdletBinding()]
Param
(
[string]$Direction = "Inbound",
[switch]$ScanAll
)
if ($ScanAll) {
return get-adtrust -filter {Direction -eq $Direction}
}
else {
return get-adtrust -filter {Direction -eq $Direction -and TGTDelegation -eq $false}
}
}
function Get-ServiceAccountsAtRisk
{
[CmdletBinding()]
Param
(
[string]$DN = (Get-ADDomain).DistinguishedName,
[string]$Server = (Get-ADDomain).Name
)
Write-Debug "Searching $DN via $Server"
$SERVER_TRUST_ACCOUNT = 0x2000
$TRUSTED_FOR_DELEGATION = 0x80000
$TRUSTED_TO_AUTH_FOR_DELEGATION= 0x1000000
$PARTIAL_SECRETS_ACCOUNT = 0x4000000
$bitmask = $TRUSTED_FOR_DELEGATION -bor $TRUSTED_TO_AUTH_FOR_DELEGATION -bor $PARTIAL_SECRETS_ACCOUNT
$filter = @"
(&
(servicePrincipalname=*)
(|
(msDS-AllowedToActOnBehalfOfOtherIdentity=*)
(msDS-AllowedToDelegateTo=*)
(UserAccountControl:1.2.840.113556.1.4.804:=$bitmask)
)
(|
(objectcategory=computer)
(objectcategory=person)
(objectcategory=msDS-GroupManagedServiceAccount)
(objectcategory=msDS-ManagedServiceAccount)
)
)
"@ -replace "[\s\n]", ''
$propertylist = @(
"servicePrincipalname",
"useraccountcontrol",
"samaccountname",
"msDS-AllowedToDelegateTo",
"msDS-AllowedToActOnBehalfOfOtherIdentity"
)
$riskyAccounts = @()
try {
$accounts = Get-ADObject -LDAPFilter $filter -SearchBase $DN -SearchScope Subtree -Properties $propertylist -Server $Server
}
catch {
Write-Warning "Failed to query $Server. Consider investigating seperately. $($_.Exception.Message)"
}
foreach ($account in $accounts) {
$isDC = ($account.useraccountcontrol -band $SERVER_TRUST_ACCOUNT) -ne 0
$fullDelegation = ($account.useraccountcontrol -band $TRUSTED_FOR_DELEGATION) -ne 0
$constrainedDelegation = ($account.'msDS-AllowedToDelegateTo').count -gt 0
$isRODC = ($account.useraccountcontrol -band $PARTIAL_SECRETS_ACCOUNT) -ne 0
$resourceDelegation = $account.'msDS-AllowedToActOnBehalfOfOtherIdentity' -ne $null
$acct = [PSCustomobject] @{
domain = $Server
sAMAccountName = $account.samaccountname
objectClass = $account.objectclass
isDC = $isDC
isRODC = $isRODC
fullDelegation = $fullDelegation
constrainedDelegation = $constrainedDelegation
resourceDelegation = $resourceDelegation
}
if ($fullDelegation) {
$riskyAccounts += $acct
}
}
return $riskyAccounts
}
function Get-RiskyServiceAccountsByTrust
{
[CmdletBinding()]
Param
(
[switch]$ScanAll
)
$riskyAccounts = @()
$trustTypes = $("Inbound", "Bidirectional")
foreach ($type in $trustTypes) {
$riskyTrusts = Get-AdTrustsAtRisk -Direction $type -ScanAll:$ScanAll
foreach ($trust in $riskyTrusts) {
$domain = $null
try {
$domain = Get-AdDomain $trust.Name -ErrorVariable eatError -ErrorAction Ignore
} catch {
write-debug $_.Exception.Message
}
if($eatError -ne $null) {
Write-Warning "Couldn't find domain: $($trust.Name)"
}
if ($domain -ne $null) {
$accts = Get-ServiceAccountsAtRisk -DN $domain.DistinguishedName -Server $domain.DNSRoot
foreach ($acct in $accts) {
Write-Debug "Risky: $($acct.sAMAccountName) in $($acct.domain)"
}
$risky = [PSCustomobject] @{
Domain = $trust.Name
Accounts = $accts
}
$riskyAccounts += $risky
}
}
}
return $riskyAccounts
}
if ($Collect) {
Get-RiskyServiceAccountsByTrust -ScanAll:$ScanAll | Select-Object -expandProperty Accounts | format-table
}
Output skrip PowerShell daftar direktori aktif prinsip keamanan di domain yang dikonfigurasi untuk kepercayaan masuk dari domain pelaksana yang telah tidak dibatasi delegasi dikonfigurasi. Output akan seperti contoh berikut.
domain |
sAMAccountName |
objectClass |
partner.fabrikam.com |
berbahaya |
pengguna |
partner.fabrikam.com |
labsrv$ |
komputer |
Mendeteksi tidak dibatasi delegasi melalui Windows peristiwa
Saat tiket Kerberos dikeluarkan, kontroler domain direktori aktif log peristiwa keamanan berikut ini. Peristiwa yang berisi informasi tentang target domain. Anda dapat menggunakan kejadian untuk menentukan apakah tidak dibatasi delegasi sedang digunakan di seluruh Trust masuk.
Catatan
Periksa untuk peristiwa yang berisi nilai TargetDomainName yang cocok dengan nama domain yang terpercaya.
Log peristiwa |
Sumber peristiwa |
ID Kejadian |
Rincian |
Keamanan |
Microsoft-Windows-keamanan-audit |
4768 |
Kerberos TGT dikeluarkan. |
Keamanan |
Microsoft-Windows-keamanan-audit |
4769 |
Layanan Tiket Kerberos dikeluarkan. |
Keamanan |
Microsoft-Windows-keamanan-audit |
4770 |
Tiket Kerberos layanan diperbarui. |
Pemecahan masalah kegagalan otentikasi
Jika tidak dibatasi delegasi dinonaktifkan, aplikasi mungkin memiliki masalah kompatibilitas dengan perubahan tersebut jika aplikasi yang bergantung pada delegasi tidak dibatasi. Aplikasi ini harus dikonfigurasi untuk menggunakan dibatasi delegasi atau dibatasi delegasi yang berbasis sumber daya. Fatau informasi lebih lanjut, sefisiensi energi Ikhtisar delegasi Kerberos dibatasi.
Aplikasi yang bergantung pada perkiraan otentikasi seluruh Trust tidak didukung menggunakan delegasi dibatasi. Sebagai contoh, delegasi gagal jika pengguna a hutan mengotentikasi ke aplikasi di hutan B dan aplikasi di hutan B mencoba delegasi tiket kembali ke hutan A.