สรุป
ความเชื่อถือฟอเรสต์มีวิธีสำหรับทรัพยากรที่อยู่ในฟอเรสต์มี Active Directory จะเชื่อถือข้อมูลเฉพาะตัวจากฟอเรสต์อื่น ความน่าเชื่อถือนี้สามารถกำหนดค่าในทั้งสองทิศทาง ฟอเรสต์เชื่อถือได้เป็นแหล่งมาของข้อมูลเฉพาะตัวของผู้ใช้ ฟอเรสต์ trusting ประกอบด้วยทรัพยากรที่ผู้ใช้ที่รับรองความถูกต้อง เชื่อถือฟอเรสต์สามารถรับรองความถูกต้องผู้ใช้ฟอเรสต์ trusting โดยไม่อนุญาตให้มีการกลับรายการจะเกิดขึ้น
การมอบหมาย Kerberos unconstrained คือ กลไกที่ผู้ใช้ส่งข้อมูลประจำตัวของการบริการเมื่อต้องการเปิดใช้งานการบริการการเข้าถึงทรัพยากรในนามของผู้ใช้ เมื่อต้องการเปิดใช้งานการรับมอบสิทธิ์ Kerberos unconstrained บัญชีการบริการในไดเรกทอรีที่ใช้งานอยู่ต้องทำเครื่องหมายว่าน่าเชื่อถือสำหรับการมอบหมายงาน วิธีนี้สร้างปัญหาถ้าผู้ใช้และบริการอยู่ในฟอเรสต์อื่น ฟอเรสต์บริการรับผิดชอบในการอนุญาตให้มีการมอบหมายงาน การมอบหมายที่มีข้อมูลประจำตัวของผู้ใช้จากฟอเรสต์ของผู้ใช้
อนุญาตให้ฟอเรสต์หนึ่งเพื่อช่วยตัดสินใจการรักษาความปลอดภัยที่มีผลกระทบต่อบัญชีฟอเรสต์อื่นละเมิดความปลอดภัยขอบเขตระหว่างฟอเรสต์ ผู้ที่เป็นเจ้าของฟอเรสต์ trusting จู่โจมสามารถร้องขอการมอบหมายของ TGT รหัสประจำตัวจากฟอเรสต์เชื่อถือได้ ให้กับทรัพยากรที่อยู่ในฟอเรสต์เชื่อถือได้เข้า นี้ไม่นำไปใช้กับ Kerberos ที่จำกัดการมอบหมาย (KCD)
Windows Server 2012 นำมาใช้บังคับสำหรับขอบเขตของฟอเรสต์สำหรับการมอบหมายเต็มของ Kerberos คุณลักษณะนี้เพิ่มนโยบายโดเมนเชื่อถือได้จะปิดใช้งานการมอบหมาย unconstrained บนพื้นฐานสำหรับแต่ละความเชื่อถือ การตั้งค่าเริ่มต้นสำหรับคุณลักษณะนี้อนุญาตให้มีการมอบหมาย unconstrained และไม่ปลอดภัย
มีโปรแกรมปรับปรุงความปลอดภัยทำให้ปลอดภัยสำหรับ Windows Server เวอร์ชันต่อไปนี้:
-
เซิร์ฟเวอร์ Windows 2019
-
Windows Server 2016
-
Windows Server 2012 R2
-
Windows Server 2012
คุณลักษณะนี้พร้อมกับการเปลี่ยนแปลงในการรักษาความปลอดภัยที่เข้มงวดได้ backported ให้เป็นรุ่นต่อไปนี้:
-
Windows Server 2008 R2
-
Windows Server 2008
ปรับปรุงการรักษาความปลอดภัยเหล่านี้ทำการเปลี่ยนแปลงต่อไปนี้:
-
การมอบหมาย unconstrained Kerberos ถูกปิดการใช้งาน โดยค่าเริ่มต้นในฟอเรสต์ใหม่และความเชื่อถือภายนอกใหม่หลังจากที่คุณติดตั้งปรับปรุง 14 พฤษภาคมและโปรแกรมปรับปรุงรุ่นที่ใหม่กว่า
-
การมอบหมาย Kerberos unconstrained ถูกปิดใช้งานในฟอเรสต์ (ทั้งเก่า และใหม่) และความเชื่อถือภายนอกหลังจากที่คุณติดตั้งการ 9 กรกฎาคม 2019 ปรับปรุงและการปรับปรุงรุ่นที่ใหม่กว่า
-
ผู้ดูแลระบบสามารถเปิดใช้งานการรับมอบสิทธิ์ Kerberos unconstrained โดยในเดือนพฤษภาคมหรือรุ่นที่ใหม่กว่าของโมดู NETDOM และ PowerShell โฆษณา
โปรแกรมปรับปรุงอาจทำให้เกิดความขัดแย้งของความเข้ากันได้สำหรับโปรแกรมประยุกต์ที่จำเป็นต้องการมอบหมาย unconstrained ข้ามฟอเรสต์หรือความเชื่อถือภายนอกอยู่ในขณะนี้ นี้เป็นจริงโดยเฉพาะอย่างยิ่งภายนอกแทนที่ค่าสถานะการตรวจสอบสินค้า (หรือที่เรียกอีกอย่างหนึ่งว่า SID ที่กรองข้อมูล) ถูกเปิดใช้งาน โดยค่าเริ่มต้นของบริษัท โดยเฉพาะอย่างยิ่ง คำขอการรับรองความถูกต้องสำหรับบริการที่ใช้การมอบหมาย unconstrained ผ่านชนิดเชื่อถือได้อยู่ในรายการจะล้มเหลวเมื่อคุณร้องขอบัตรผ่านใหม่
วันนำออกใช้ สำหรับดูเส้นเวลาปรับปรุง
วิธีแก้ไขปัญหาชั่วคราว
เมื่อต้องการรักษาความปลอดภัยของข้อมูลและบัญชีบนเซิร์ฟเวอร์ Windows รุ่นที่มีคุณลักษณะบังคับสำหรับขอบเขตของฟอเรสต์สำหรับการมอบหมายเต็ม Kerberosคุณสามารถบล็อคการมอบหมาย TGT หลังจากคุณติดตั้งโปรแกรมปรับปรุง 2019 มีนาคมข้ามมีความน่าเชื่อถือขาเข้า โดยการตั้งค่านี้ ค่าสถานะ netdom EnableTGTDelegationเป็นNo, เป็นดังนี้:
netdom.exe trust fabrikam.com /domain:contoso.com /EnableTGTDelegation:No
การมอบหมาย TGT ถูกบล็อคในฟอเรสต์ใหม่ และที่มีอยู่และความเชื่อถือภายนอกหลังจากที่คุณติดตั้งในเดือนพฤษภาคม และ 2019 กรกฎาคมอัพเดตามลำดับ
เมื่อต้องการเปิดใช้งานการมอบหมายใหม่ผ่านความเชื่อถือ และกลับไปยังการตั้งค่าคอนฟิกไม่ปลอดภัยเดิมจนกว่าจะสามารถเปิดใช้งานการมอบหมายที่มีข้อจำกัด หรือ ใช้ทรัพยากร ตั้งค่าสถานะEnableTGTDelegationให้เป็นYes
บรรทัดคำสั่งNETDOMเพื่อเปิดใช้งานการมอบหมาย TGT เป็นดังนี้:
netdom trust <TrustedDomainName > /domain:<TrustingDomainName > /EnableTgtDelegation:Yes
คุณสามารถกันทางแนวคิดคิดว่า ไวยากรณ์ NETDOM สำหรับการเปิดใช้งานการมอบหมาย TGT เป็นดังนี้:
netdom trust <domain that you are administering> /domain:<domain whose trust NETDOM is modifying> /EnableTgtDelegation:Yes
ไวยากรณ์ NETDOM เพื่อเปิดใช้งาน TGT การมอบหมายของผู้ใช้ fabrakam.com บนเซิร์ฟเวอร์ contoso.com เป็นดังนี้:
netdom.exe trust fabrikam.com /domain:contoso.com /EnableTGTDelegation:Yes
หมายเหตุ
-
ควรตั้งค่าสถานะEnableTGTDelegationในโดเมนเชื่อถือได้ (fabrikam.com ในกรณีนี้) สำหรับแต่ละโดเมน trusting (เช่น contoso.com) หลังจากที่มีตั้งค่าสถานะ โดเมนเชื่อถือได้จะช่วยให้ TGTs จะถูกมอบหมายให้กับโดเมน trusting ไม่มีอีกต่อไป
-
สถานะความปลอดภัยสำหรับ EnableTGTDelegation ไม่
-
โปรแกรมประยุกต์หรือบริการที่อาศัยการมอบหมาย unconstrained ข้ามป่าไม้ใด ๆ จะล้มเหลวเมื่อ EnableTGTDelegation ด้วยตนเอง หรือโดยทางโปรแกรมตั้งค่าใช่ ค่าเริ่มต้น EnableTGTDelegation เป็นNOในความเชื่อถือที่มีอยู่ และใหม่หลังจากที่คุณติดตั้งโปรแกรมปรับปรุง 2019 พฤษภาคมและ 2019 กรกฎาคม สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการตรวจสอบความล้มเหลวนี้ ดูบริการที่อาศัยการมอบหมาย unconstrained การค้นหา ดูการปรับปรุงเส้นเวลาสำหรับเส้นเวลาของการเปลี่ยนแปลงที่มีผลต่อวิธีการแก้ปัญหานี้สามารถถูกนำไปใช้
-
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ NETDOM ดูเอกสารประกอบของ Netdom.exe
-
ถ้าคุณต้องเปิดใช้งานการมอบหมาย TGT ในความน่าเชื่อถือ ขอแนะนำว่า คุณควรบรรเทาความเสี่ยงดังกล่าว โดยการเปิดใช้งาน Windows Guard ข้อมูลประจำตัวของ Defender ในคอมพิวเตอร์ไคลเอนต์ ซึ่งป้องกันการมอบหมาย unconstrained ทั้งหมดจากคอมพิวเตอร์ที่มี Windows Defender ข้อมูลประจำตัว Guard การเปิดใช้งาน และทำงาน
-
ถ้าคุณมีความน่าเชื่อถือภายนอกหรือฟอเรสต์ และอย่างใดอย่างหนึ่งจะถูกกำหนดค่าเป็นตรวจสอบ การมอบหมาย TGT ไม่สามารถเปิดใช้ได้เนื่องจากค่าสถานะสองมีความหมายของตรงกันข้าม บิตการตรวจสอบสินค้า strengthens ขอบเขตความปลอดภัยระหว่างการเข้าร่วมโดเมน การเปิดใช้งานการมอบหมาย TGT ลบขอบเขตความปลอดภัยระหว่างโดเมนโดยการเข้าถึงโดเมน trusting การกำหนดข้อมูลประจำตัวของผู้ใช้จากโดเมนเชื่อถือได้ คุณไม่สามารถมีได้ทั้งสองลักษณะ
เพิ่มค่าสถานะการตรวจสอบสินค้า: ไม่มีไวยากรณ์บรรทัดคำสั่ง NETDOM ถ้าค่าสถานะการตรวจสอบสินค้าจะเปิดใช้งานอยู่ในขณะนี้
-
ถ้าคุณเปลี่ยนEnableTGTDelegationเป็นYesลบตั๋ว Kerberos บนผู้เรียกเริ่มต้น และระดับกลางตามความจำเป็น ตั๋วโดยสารที่เกี่ยวข้องกับลบเป็นแหล่งอ้างอิงของไคลเอนต์ TGT ข้ามความน่าเชื่อถือเกี่ยวข้อง ซึ่งอาจเกี่ยวข้องกับอุปกรณ์มากกว่าหนึ่ง ขึ้นอยู่กับจำนวนการข้ามการมอบหมายในสภาพแวดล้อมที่กำหนด
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับขั้นตอนนี้ ดู Windows IT Pro Center บทความต่อไปนี้:
ปกป้องข้อมูลประจำตัวของโดเมนที่ได้รับกับ Guard ข้อมูลประจำตัวของ Defender Windows
เส้นเวลาการปรับปรุง
12 มีนาคม 2019
บังคับสำหรับขอบเขตของฟอเรสต์สำหรับ Kerberos การมอบหมายเต็มจะเป็นโปรแกรมปรับปรุงเพื่อเปิดใช้งานคุณลักษณะนี้ในรุ่นทั้งหมดได้รับการสนับสนุนของ Windows Server ที่มีอยู่ในส่วนใช้งานที่ด้านบนของบทความนี้ เราขอแนะนำว่า คุณตั้งค่าลักษณะการทำงานบนความเชื่อถือฟอเรสต์ขาเข้า
การปรับปรุงจะเพิ่มคุณลักษณะบังคับสำหรับขอบเขตของฟอเรสต์สำหรับการมอบหมายเต็ม Kerberosในระบบต่อไปนี้:
-
Windows Server 2008 R2
-
Windows Server 2008
14 พฤษภาคม 2019
การปรับปรุงถูกนำออกใช้เพิ่มคำใหม่เริ่มต้นเซฟตั้งค่าคอนฟิกฟอเรสต์ใหม่และความเชื่อถือภายนอก. ถ้าคุณจำเป็นต้องมีการมอบหมายข้ามความเชื่อถือ ควรเป็นYesตั้งค่าสถานะEnableTGTDelegationก่อนติดตั้งการปรับปรุงเดือน 9 กรกฎาคม 2019 ถ้าคุณต้องการมอบหมายข้ามความเชื่อถือ คุณควรตั้งค่าสถานะEnableTGTDelegation จะถูกละเว้นค่าสถานะEnableTGTDelegationจนกว่าจะมีการติดตั้งการปรับปรุงเดือน 9 กรกฎาคม 2019 เพื่อให้เวลาในการเปิดใช้งานการรับมอบสิทธิ์ Kerberos unconstrained ใหม่เมื่อจำเป็นต้องมีผู้ดูแล
เป็นส่วนหนึ่งของการปรับปรุงนี้EnableTGTDelegationค่าสถานะจะถูกตั้งค่าเป็นNoโดยค่าเริ่มต้นสำหรับความเชื่อถือที่สร้างขึ้นใหม่ใด ๆ นี่คือลักษณะการทำงานก่อนหน้านี้ตรงกันข้าม ขอแนะนำว่า ผู้ดูแลระบบแทนบริการที่ได้รับผลกระทบจะใช้ทรัพยากรตามการมอบหมายที่มีข้อจำกัดที่กำหนดค่าเท่านั้น
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการตรวจหาปัญหาความเข้ากันได้ ดูบริการที่อาศัยการมอบหมาย unconstrained การค้นหา
9 กรกฎาคม 2019
การปรับปรุงถูกนำออกใช้ที่บังคับใช้ลักษณะการเริ่มต้นใหม่ทางด้านขาเข้าของฟอเรสต์และความเชื่อถือภายนอก รับรองความถูกต้องร้องขอ สำหรับบริการที่ใช้การมอบหมาย unconstrained ผ่านชนิดเชื่อถือได้อยู่ในรายการจะมีการพิสูจน์ตัวจริง แต่ไม่ มีการมอบหมาย บริการนี้จะล้มเหลวเมื่อพยายามเรียกใช้การดำเนินงานที่มอบหมาย
ลด ดูส่วน "วิธีแก้ปัญหา"
บริการการค้นหาที่อาศัยการมอบหมาย unconstrained
การค้นหาป่าไม้ที่มีความเชื่อถือขาเข้าที่อนุญาตให้มีการมอบหมาย TGT และเพื่อค้นหาความปลอดภัยใด ๆ รักษาที่อนุญาตให้มีการมอบหมาย unconstrained เรียกใช้ PowerShell ต่อไปนี้สคริปต์ในสคริปต์แฟ้ม (ตัวอย่างเช่น รับ-RiskyServiceAccountsByTrust.ps1 - สาม):
หมายเหตุ
นอกจากนี้คุณสามารถส่งค่าสถานะการค้นหาในความเชื่อถือที่ไม่อนุญาตให้มีการมอบหมาย TGT - ScanAll
[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
}
เอาพุตของสคริปต์ของ PowerShell รายการรักษาความปลอดภัยของไดเรกทอรีที่ใช้งานอยู่ในโดเมนที่ถูกกำหนดค่าสำหรับความน่าเชื่อถือเข้ามาจากโดเมนดำเนินที่มี unconstrained การมอบหมายการตั้งค่าคอนฟิก ผลลัพธ์จะคล้ายกับตัวอย่างต่อไปนี้
โดเมน |
sAMAccountName |
objectClass |
partner.fabrikam.com |
เป็นอันตราย |
ผู้ใช้ |
partner.fabrikam.com |
labsrv$ |
คอมพิวเตอร์ |
ตรวจพบการมอบหมาย unconstrained ผ่านเหตุการณ์ของ Windows
เมื่อ Kerberos ticket ที่ออก ตัวควบคุมโดเมน Active Directory ล็อกเหตุการณ์การรักษาความปลอดภัยต่อไปนี้ เหตุการณ์ประกอบด้วยข้อมูลเกี่ยวกับโดเมนเป้าหมาย คุณสามารถใช้เหตุการณ์นี้เพื่อตรวจสอบว่า ได้มีการใช้การมอบหมาย unconstrained ข้ามความเชื่อถือขาเข้า
หมายเหตุ
การตรวจสอบสำหรับเหตุการณ์ที่ประกอบด้วยค่าTargetDomainNameที่ตรงกับชื่อโดเมนที่เชื่อถือได้ หรือไม่
แฟ้มบันทึกเหตุการณ์ |
แหล่งของเหตุการณ์ |
รหัสเหตุการณ์ |
รายละเอียด |
รักษาความปลอดภัย |
Microsoft-Windows--ตรวจสอบความปลอดภัย |
4768 |
มีออกแบบ TGT Kerberos |
รักษาความปลอดภัย |
Microsoft-Windows--ตรวจสอบความปลอดภัย |
4769 |
มีออกบัตรบริการ Kerberos |
รักษาความปลอดภัย |
Microsoft-Windows--ตรวจสอบความปลอดภัย |
4770 |
Ticket บริการ Kerberos ถูกต่ออายุใหม่ |
การแก้ไขปัญหาความล้มเหลวในการรับรองความถูกต้อง
เมื่อการมอบหมาย unconstrained ถูกปิดการใช้งาน โปรแกรมประยุกต์อาจมีปัญหาเกี่ยวกับความเข้ากันได้กับการเปลี่ยนแปลงเหล่านี้ถ้าโปรแกรมประยุกต์ที่อาศัยการมอบหมาย unconstrained โปรแกรมประยุกต์เหล่านี้ควรถูกกำหนดค่าให้รับมอบสิทธิ์การใช้งานที่จำกัด หรือการมอบหมายที่มีใช้ทรัพยากรที่จำกัด ดูข้อมูล หรือเพิ่มเติม sF ภาพรวมการมอบหมายการที่จำกัด Kerberos.
โปรแกรมประยุกต์ที่ใช้การรับรองความถูกต้องประมาณข้ามความเชื่อถือไม่ได้รับการสนับสนุน โดยใช้การมอบหมายที่มีข้อจำกัด ตัวอย่างเช่น การมอบหมายเป็นล้มเหลวถ้าการรับรองความถูกต้องผู้ใช้ในฟอเรสต์ A ไปยังโปรแกรมประยุกต์ในฟอเรสต์ B และแอพลิเคชันในฟอเรสต์ B พยายามมอบหมาย ticket กลับไป A. ฟอเรสต์