Updates delegasi TGT di seluruh kepercayaan masuk dalam Windows Server

Berlaku Untuk
Windows Server 2008 Windows Server 2008 R2 Windows Server 2012 Windows Server 2012 R2 Windows Server 2016 Windows Server 2019, all editions

Ringkasan

Kepercayaan hutan menyediakan cara bagi sumber daya dalam hutan Direktori Aktif untuk mempercayai identitas dari hutan lain. Kepercayaan ini bisa dikonfigurasi di kedua arah. Hutan tepercaya adalah sumber identitas pengguna. Hutan kepercayaan berisi sumber daya yang diautentikasi pengguna. Hutan tepercaya dapat mengautentikasi pengguna ke hutan kepercayaan tanpa membiarkan kebalikannya terjadi.

Delegasi Kerberos yang tidak dibatasi adalah mekanisme di mana pengguna mengirim kredensialnya ke layanan untuk memungkinkan layanan mengakses sumber daya atas nama pengguna. Untuk mengaktifkan delegasi Kerberos yang tidak dibatasi, akun layanan di Direktori Aktif harus ditandai sebagai tepercaya untuk delegasi. Hal ini menimbulkan masalah jika pengguna dan layanan berada di hutan yang berbeda. Hutan layanan bertanggung jawab untuk mengizinkan delegasi. Delegasi menyertakan kredensial pengguna dari hutan pengguna.

Mengizinkan satu hutan untuk membuat keputusan keamanan yang mempengaruhi akun hutan lain melanggar batas keamanan antar hutan. Penyerang yang memiliki hutan kepercayaan dapat meminta delegasi TGT untuk identitas dari hutan tepercaya, memberinya akses ke sumber daya di hutan tepercaya. Hal ini tidak berlaku untuk delegasi Kerberos Constrained (KCD).

Windows Server 2012 memperkenalkan Enforcement for Forest Boundary for Kerberos Full Delegation. Fitur ini menambahkan kebijakan ke domain tepercaya untuk menonaktifkan delegasi yang tidak dibatasi secara per kepercayaan. Pengaturan default untuk fitur ini memungkinkan delegasi tidak dibatasi dan tidak aman.

Updates yang menyediakan pengerasan keamanan ada untuk versi Windows Server berikut:

  • Server Windows 2019
  • Server Windows 2016
  • Windows Server 2012 R2
  • Windows Server 2012

Fitur ini bersama dengan perubahan dalam pengerasan keamanan didukung ke versi berikut:

  • Windows Server 2008 R2
  • Windows Server 2008

Pembaruan keamanan ini membuat perubahan berikut:

  • Delegasi Kerberos yang tidak dibatasi dinonaktifkan secara default pada hutan baru dan kepercayaan eksternal baru setelah Anda menginstal pembaruan 14 Mei dan pembaruan yang lebih baru.
  • Delegasi Kerberos yang tidak dibatasi dinonaktifkan di hutan (baik yang baru maupun yang sudah ada) dan kepercayaan eksternal setelah Anda menginstal 9 Juli 2019, pembaruan dan pembaruan yang lebih baru.
  • Administrator dapat mengaktifkan delegasi Kerberos yang tidak dibatasi dengan menggunakan versi Mei atau yang lebih baru dari modul NETDOM dan AD PowerShell.

Pembaruan dapat menyebabkan konflik kompatibilitas untuk aplikasi yang saat ini memerlukan delegasi yang tidak dibatasi di seluruh hutan atau kepercayaan eksternal. Hal ini terutama 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 tidak dibatasi atas tipe kepercayaan yang tercantum akan gagal ketika Anda meminta tiket baru.

Untuk tanggal rilis, lihat Updates garis waktu.

Solusi

Untuk menyediakan data dan keamanan akun pada versi Windows Server yang memiliki fitur Pemberlakuan Batas Hutan untuk Delegasi Penuh Kerberos, Anda dapat memblokir delegasi TGT setelah menginstal pembaruan Bulan Maret 2019 melalui kepercayaan masuk dengan mengatur bendera netdom EnableTGTDelegation ke Tidak, sebagai berikut:


netdom.exe trust fabrikam.com /domain:contoso.com /EnableTGTDelegation:No

Delegasi TGT diblokir di hutan baru dan yang sudah ada serta kepercayaan eksternal setelah Anda menginstal pembaruan Mei dan Juli 2019 secara berurutan.

Untuk mengaktifkan kembali delegasi di seluruh kepercayaan dan kembali ke konfigurasi asli yang tidak aman hingga delegasi yang dibatasi 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 memikirkan sintaks NETDOM secara konseptual 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 dalam domain tepercaya (fabrikam.com dalam kasus ini) untuk setiap domain tepercaya (seperti contoso.com). Setelah bendera diatur, domain tepercaya tidak akan lagi memperbolehkan TGT didelegasikan ke domain tepercaya.
  • Status aman untuk EnableTGTDelegation adalah Tidak.
  • Aplikasi atau layanan apa pun yang bergantung pada delegasi yang tidak dibatasi di seluruh hutan akan gagal ketika EnableTGTDelegation diatur secara manual atau terprogram ke Ya. EnableTGTDelegation defaults to NO 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 yang tidak dibatasi. Lihat garis waktu Updates untuk garis waktu perubahan yang memengaruhi bagaimana solusi ini dapat diterapkan.
  • Untuk informasi selengkapnya tentang NETDOM, lihat dokumentasiNetdom.exe.
  • Jika Anda harus mengaktifkan delegasi TGT pada kepercayaan, disarankan agar Anda mengurangi risiko tersebut dengan mengaktifkan Garda Kredensial Pertahanan Windows di komputer klien. Ini mencegah semua delegasi yang tidak dibatasi dari komputer yang memiliki Garda Kredensial Pertahanan Windows diaktifkan dan dijalankan.
  • Jika Anda memiliki hutan atau kepercayaan eksternal, dan dikonfigurasi sebagai dikarantina, delegasi TGT tidak dapat diaktifkan karena dua bendera tersebut 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 domain yang tepercaya ke kredensial pengguna dari domain tepercaya. Anda tidak bisa 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 keperluan. 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 dalam lingkungan tertentu.

Untuk informasi selengkapnya tentang prosedur ini, lihat artikel Pusat Pro TI Windows berikut ini:

Lindungi kredensial domain turunan dengan Garda Kredensial Pertahanan Windows

Updates garis waktu

12 Maret 2019

Pemberlakuan batas hutan untuk delegasi penuh Kerberos akan tersedia sebagai pembaruan untuk mengaktifkan fitur ini pada semua versi Windows Server yang didukung yang tercantum di bagian Berlaku untuk di bagian atas artikel ini. Kami menyarankan agar Anda mengatur fitur tentang kepercayaan hutan masuk.

Pembaruan akan menambahkan fitur Pemberlakuan Untuk Batas Hutan untuk Delegasi Penuh Kerberos ke sistem berikut:

  • Windows Server 2008 R2
  • Windows Server 2008

14 Mei 2019

Pembaruan dirilis dengan menambahkan konfigurasi default aman baru ke hutan baru dan kepercayaan eksternal. Jika Anda memerlukan delegasi lintas kepercayaan, bendera EnableTGTDelegation harus diatur ke Ya sebelum pembaruan 9 Juli 2019 diinstal. Jika Anda tidak memerlukan delegasi lintas kepercayaan, Anda tidak boleh mengatur bendera EnableTGTDelegation . Bendera EnableTGTDelegation akan diabaikan hingga pembaruan 9 Juli 2019 diinstal untuk memberikan waktu kepada administrator untuk mengaktifkan kembali delegasi Kerberos yang tidak dibatasi ketika 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. Kami menyarankan agar administrator mengonfigurasi ulang layanan yang terpengaruh untuk menggunakan delegasi terbatasi berbasis sumber daya.

Untuk informasi selengkapnya tentang cara mendeteksi masalah kompatibilitas, lihat Menemukan layanan yang mengandalkan delegasi yang tidak dibatasi.

9 Juli 2019

Pembaruan dirilis yang memberlakukan perilaku default baru di sisi masuk hutan dan kepercayaan eksternal. Permintaan autentikasi untuk layanan yang menggunakan delegasi tidak dibatasi atas tipe kepercayaan yang tercantum akan diautentikasi tetapi tanpa delegasi. Layanan akan gagal ketika mencoba menjalankan operasi yang didelegasikan.

Untuk mitigasi, lihat bagian "Solusi".

Menemukan layanan yang mengandalkan delegasi yang tidak dibatasi

Untuk memindai hutan yang memiliki kepercayaan masuk yang memungkinkan delegasi TGT, dan menemukan prinsipal keamanan apa pun yang memungkinkan delegasi tidak dibatasi, jalankan skrip PowerShell berikut ini dalam file skrip (misalnya, Get-RiskyServiceAccountsByTrust.ps1 -Kumpulkan):

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 prinsipal keamanan Direktori Aktif dalam domain yang dikonfigurasi untuk kepercayaan masuk dari domain eksekusi yang memiliki delegasi yang tidak dibatasi dikonfigurasi. Output akan terlihat seperti contoh berikut ini.

domain sAMAccountName objectClass
partner.fabrikam.com Berbahaya pengguna
partner.fabrikam.com labsrv$ Komputer

Mendeteksi delegasi yang tidak dibatasi melalui acara Windows

Ketika tiket Kerberos diterbitkan, pengontrol domain Direktori Aktif mencatat kejadian keamanan berikut. Kejadian berisi informasi tentang domain target. Anda bisa menggunakan acara untuk menentukan apakah delegasi yang tidak dibatasi sedang digunakan di seluruh kepercayaan masuk.

Catatan

Periksa kejadian yang berisi nilai TargetDomainName yang cocok dengan nama domain tepercaya.

Log kejadian Sumber kejadian ID Kejadian Detail
Keamanan Microsoft-Windows-Security-Auditing 4768 TGT Kerberos dikeluarkan.
Keamanan Microsoft-Windows-Security-Auditing 4769 Tiket Layanan Kerberos diterbitkan.
Keamanan Microsoft-Windows-Security-Auditing 4770 Tiket Layanan Kerberos telah diperpanjang.

Memecahkan masalah kegagalan autentikasi

Ketika delegasi tidak dibatasi dinonaktifkan, aplikasi mungkin memiliki masalah kompatibilitas dengan perubahan ini jika aplikasi mengandalkan delegasi yang tidak dibatasi. Aplikasi ini harus dikonfigurasi untuk menggunakan delegasi yang dibatasi atau delegasi yang dibatasi yang berbasis sumber daya. Untuk informasi selengkapnya, lihat Gambaran Umum Delegasi Terbatasi Kerberos.

Aplikasi yang mengandalkan autentikasi pulang pergi di seluruh kepercayaan tidak didukung dengan menggunakan delegasi yang dibatasi. Misalnya, delegasi gagal jika pengguna di Hutan A mengautentikasi ke aplikasi di Hutan B dan aplikasi di Hutan B mencoba mendelegasikan tiket kembali ke Hutan A.