Ringkasan
Kepercayaan hutan menyediakan cara bagi sumber daya di forest Direktori Aktif untuk memercayai identitas dari forest lain. Kepercayaan ini dapat dikonfigurasi di kedua arah. Hutan tepercaya adalah sumber identitas pengguna. Trusting forest berisi sumber daya yang diautentikasi pengguna. Hutan tepercaya dapat mengautentikasi pengguna ke hutan tepercaya tanpa membiarkan kebalikan terjadi.
Delegasi Kerberos tidak dibatasi adalah mekanisme di mana pengguna mengirimkan kredensialnya ke layanan untuk memungkinkan layanan mengakses sumber daya atas nama pengguna. Untuk mengaktifkan delegasi Kerberos tanpa batasan, akun layanan di Direktori Aktif harus ditandai sebagai tepercaya untuk delegasi. Hal ini menimbulkan masalah jika pengguna dan layanan termasuk dalam forest yang berbeda. Hutan layanan bertanggung jawab untuk mengizinkan delegasi. Delegasi menyertakan kredensial pengguna dari forest pengguna.
Mengizinkan satu hutan untuk membuat keputusan keamanan yang memengaruhi akun hutan lain melanggar batas keamanan antar hutan. Penyerang yang memiliki hutan tepercaya dapat meminta delegasi TGT untuk identitas dari forest tepercaya, memberikan akses ke sumber daya di forest tepercaya. Hal ini tidak berlaku untuk Delegasi Terbatas Kerberos (KCD).
Windows Server 2012 memperkenalkan Penerapan Batas Hutan untuk Delegasi Penuh Kerberos. Fitur ini menambahkan kebijakan ke domain tepercaya untuk menonaktifkan delegasi tanpa batasan berdasarkan per-trust. Pengaturan default untuk fitur ini memungkinkan delegasi tanpa batasan dan tidak aman.
Updates yang menyediakan pengerasan keamanan tersedia untuk versi Windows Server berikut:
- Server Windows 2019
- Server Windows 2016
- Windows Server 2012 R2
- Windows Server 2012
Fitur ini, bersamaan dengan perubahan dalam pengerasan keamanan, di-backport ke versi berikut:
- Windows Server 2008 R2
- Windows Server 2008
Pembaruan keamanan ini membuat perubahan berikut:
- Delegasi Kerberos tidak dibatasi dinonaktifkan secara default pada forest baru dan kepercayaan eksternal baru setelah Anda menginstal pembaruan 14 Mei dan pembaruan yang lebih baru.
- Delegasi Kerberos tidak dibatasi dinonaktifkan pada forests (baik yang baru maupun yang sudah ada) dan kepercayaan eksternal setelah Anda menginstal pembaruan 9 Juli 2019 dan yang lebih baru.
- Administrator dapat mengaktifkan delegasi Kerberos tanpa batasan menggunakan modul NETDOM dan AD PowerShell versi Mei atau yang lebih baru.
Pembaruan dapat menyebabkan konflik kompatibilitas untuk aplikasi yang saat ini memerlukan delegasi tanpa batasan di seluruh forest atau kepercayaan eksternal. Hal ini khususnya berlaku untuk kepercayaan eksternal di mana bendera karantina (juga dikenal sebagai pemfilteran SID) diaktifkan secara default. Secara khusus, permintaan autentikasi untuk layanan yang menggunakan delegasi tanpa batasan pada tipe kepercayaan yang tercantum akan gagal saat Anda meminta tiket baru.
Untuk tanggal rilis, lihat lini masa Updates.
Solusi
Untuk menyediakan keamanan data dan akun pada versi Windows Server yang memiliki fitur Penerapan Batas Hutan untuk Delegasi Penuh Kerberos, Anda dapat memblokir delegasi TGT setelah menginstal pembaruan Maret 2019 di seluruh kepercayaan masuk dengan mengatur bendera netdom EnableTGTDelegation ke Tidak, sebagai berikut:
netdom.exe trust fabrikam.com /domain:contoso.com /EnableTGTDelegation:No
Delegasi TGT diblokir pada kepercayaan forestier dan eksternal yang baru dan yang sudah ada setelah Anda menginstal pembaruan Mei dan Juli 2019 masing-masing.
Untuk mengaktifkan kembali delegasi di seluruh kepercayaan dan kembali ke konfigurasi tidak aman asli hingga delegasi terbatas atau berbasis sumber daya dapat diaktifkan, atur bendera EnableTGTDelegation ke Ya.
Baris perintah NETDOM untuk mengaktifkan delegasi TGT adalah sebagai berikut:
netdom trust <TrustedDomainName > /domain:<TrustingDomainName > /EnableTgtDelegation:Yes
Anda dapat secara konseptual memikirkan 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 pengguna fabrakam.com di server contoso.com adalah sebagai berikut:
netdom.exe trust fabrikam.com /domain:contoso.com /EnableTGTDelegation:Yes
Catatan
- Bendera EnableTGTDelegation harus diatur di domain tepercaya (fabrikam.com dalam hal ini) untuk setiap domain tepercaya (seperti contoso.com). Setelah bendera ditetapkan, domain tepercaya tidak akan lagi mengizinkan TGT didelegasikan ke domain tepercaya.
- Status aman untuk EnableTGTDelegation adalah No.
- Aplikasi atau layanan apa pun yang bergantung pada delegasi tanpa batasan di seluruh hutan akan gagal saat EnableTGTDelegation diatur secara manual atau terprogram ke Ya. EnableTGTDelegation secara default ke TIDAK pada kepercayaan baru dan yang sudah ada setelah Anda menginstal pembaruan Mei 2019 dan Juli 2019. Untuk informasi selengkapnya tentang cara mendeteksi kegagalan ini, lihat Menemukan layanan yang mengandalkan delegasi tanpa batasan. Lihat lini masa Updates untuk garis waktu perubahan yang memengaruhi cara solusi ini dapat diterapkan.
- Untuk informasi selengkapnya tentang NETDOM, lihat dokumentasiNetdom.exe.
- Jika Anda harus mengaktifkan delegasi TGT pada kepercayaan, sebaiknya mitigasi risiko tersebut dengan mengaktifkan Windows Defender Credential Guard di komputer klien. Ini mencegah semua delegasi tanpa batasan dari komputer yang mengaktifkan dan menjalankan Windows Defender Credential Guard.
- Jika Anda memiliki kepercayaan forest atau eksternal, dan keduanya dikonfigurasi sebagai dikarantina, delegasi TGT tidak dapat diaktifkan karena kedua bendera memiliki semantik yang berlawanan. Bit karantina memperkuat batas keamanan antara domain yang berpartisipasi. Mengaktifkan delegasi TGT akan menghapus batas keamanan antar domain dengan memberikan akses kepada domain tepercaya ke kredensial pengguna dari domain tepercaya. Anda tidak dapat memiliki keduanya.
Tambahkan bendera karantina:tidak ada ke sintaks baris perintah NETDOM jika bendera karantina saat ini diaktifkan. - Jika Anda mengubah EnableTGTDelegation menjadi Ya, hapus tiket Kerberos pada penelepon asal dan menengah sesuai kebutuhan. Tiket yang relevan untuk dihapus adalah TGT rujukan klien di seluruh kepercayaan yang relevan. Hal ini dapat melibatkan lebih dari satu perangkat, tergantung pada jumlah lompatan delegasi di lingkungan tertentu.
Untuk informasi selengkapnya tentang prosedur ini, lihat artikel Pusat Profesional TI Windows berikut ini:
Lindungi kredensial domain turunan dengan Windows Defender Credential Guard
Updates timeline
12 Maret 2019
Penerapan batas hutan untuk delegasi penuh Kerberos akan tersedia sebagai pembaruan untuk mengaktifkan fitur ini di semua versi Windows Server yang didukung yang tercantum di bagian Berlaku untuk di bagian atas artikel ini. Kami menyarankan Anda mengatur fitur pada kepercayaan hutan yang masuk.
Pembaruan ini akan menambahkan fitur Penerapan Batas Hutan untuk Delegasi Penuh Kerberos ke sistem berikut:
- Windows Server 2008 R2
- Windows Server 2008
14 Mei 2019
Pembaruan telah dirilis, menambahkan konfigurasi default aman baru ke forest baru dan kepercayaan eksternal. Jika Anda memerlukan delegasi di seluruh kepercayaan, bendera EnableTGTDelegation harus diatur ke Ya sebelum pembaruan 9 Juli 2019 diinstal. Jika Anda tidak memerlukan delegasi di seluruh kepercayaan, Anda tidak boleh mengatur bendera EnableTGTDelegation . Bendera EnableTGTDelegation akan diabaikan hingga pembaruan 9 Juli 2019 diinstal untuk memberi waktu kepada administrator guna mengaktifkan kembali delegasi Kerberos yang tidak dibatasi saat diperlukan.
Sebagai bagian dari pembaruan ini, bendera EnableTGTDelegation akan diatur ke Tidak secara default untuk setiap kepercayaan yang baru dibuat. Ini adalah kebalikan dari perilaku sebelumnya. Sebagai gantinya, kami menyarankan agar administrator mengonfigurasi ulang layanan yang terpengaruh untuk menggunakan delegasi terbatas berbasis sumber daya.
Untuk informasi selengkapnya tentang cara mendeteksi masalah kompatibilitas, lihat Menemukan layanan yang mengandalkan delegasi tanpa batasan.
9 Juli 2019
Pembaruan dirilis yang memberlakukan perilaku default baru di sisi masuk forest dan kepercayaan eksternal. Permintaan autentikasi untuk layanan yang menggunakan delegasi tanpa batasan pada tipe kepercayaan yang tercantum akan diautentikasi, tetapi tanpa delegasi. Layanan akan gagal saat mencoba menjalankan operasi yang didelegasikan.
Untuk mitigasi, lihat bagian "Solusi sementara".
Menemukan layanan yang mengandalkan delegasi tanpa batasan
Untuk memindai forest yang memiliki kepercayaan masuk yang memungkinkan delegasi TGT, dan untuk menemukan prinsipal keamanan yang mengizinkan delegasi tanpa batasan, jalankan skrip PowerShell berikut dalam file skrip (misalnya, Get-RiskyServiceAccountsByTrust.ps1 -Collect):
Catatan
Anda juga dapat meneruskan bendera -ScanAll untuk mencari di seluruh kepercayaan yang tidak mengizinkan delegasi TGT.
Skrip PowerShell
[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 mencantumkan perwakilan keamanan Direktori Aktif dalam domain yang dikonfigurasi untuk kepercayaan masuk dari domain yang menjalankan yang telah mengonfigurasi delegasi tanpa batas. Outputnya akan menyerupai contoh berikut.
| domain | sAMAccountName | objectClass |
|---|---|---|
| partner.fabrikam.com | berbahaya | pengguna |
| partner.fabrikam.com | labsrv$ | komputer |
Mendeteksi delegasi tanpa batasan melalui peristiwa Windows
Saat tiket Kerberos dikeluarkan, pengontrol domain Direktori Aktif mencatat peristiwa keamanan berikut. Kejadian berisi informasi tentang domain target. Anda dapat menggunakan peristiwa untuk menentukan apakah delegasi tanpa batasan digunakan di seluruh kepercayaan masuk.
Catatan
Periksa peristiwa yang berisi nilai TargetDomainName yang cocok dengan nama domain tepercaya.
| Log peristiwa | Sumber acara | ID Peristiwa | Detail |
|---|---|---|---|
| Keamanan | Microsoft-Windows-Security-Auditing | 4768 | TGT Kerberos dikeluarkan. |
| Keamanan | Microsoft-Windows-Security-Auditing | 4769 | Tiket Layanan Kerberos dikeluarkan. |
| Keamanan | Microsoft-Windows-Security-Auditing | 4770 | Tiket Layanan Kerberos diperpanjang. |
Memecahkan masalah kegagalan autentikasi
Saat delegasi tanpa batasan dinonaktifkan, aplikasi mungkin memiliki masalah kompatibilitas dengan perubahan ini jika aplikasi mengandalkan delegasi tanpa batasan. Aplikasi ini harus dikonfigurasi untuk menggunakan delegasi terbatas atau delegasi terbatas yang berbasis sumber daya. Untuk informasi selengkapnya, lihat Gambaran Umum Delegasi Terbatas Kerberos.
Aplikasi yang mengandalkan autentikasi bolak-balik di seluruh kepercayaan tidak didukung dengan menggunakan delegasi terbatas. Misalnya, delegasi gagal jika pengguna di Forest A mengautentikasi ke aplikasi di Forest B dan aplikasi di Forest B mencoba mendelegasikan tiket kembali ke Forest A.