עדכונים הקצאת TGT בין יחסי אמון נכנסים Windows Server

חל על
Windows Server 2008 Windows Server 2008 R2 Windows Server 2012 Windows Server 2012 R2 Windows Server 2016 Windows Server 2019, all editions

סיכום

יחסי אמון ביער מספקים דרך למשאבים יער Active Directory לתת אמון בזהויות מיער אחר. ניתן להגדיר אמון זה בשני הכיוונים. היער המהימן הוא המקור של זהות המשתמש. היער המהימן מכיל את המשאב שאליו משתמשים מאמתים. היער המהימן יכול לאמת משתמשים מול היער המהימן מבלי לאפשר את ההיפוך להתרחש.

הקצאת Kerberos לא מאולצת היא מנגנון שבו משתמש שולח את האישורים שלו לשירות כדי לאפשר לשירות לגשת למשאבים בשם המשתמש. כדי להפוך הקצאת Kerberos לא מאולצת לזמינה, יש להוסיף סימון לחשבון השירות ב- Active Directory כמהימן עבור הקצאה. פעולה זו יוצרת בעיה אם המשתמש והשירות שייכים ליערים שונים. יער השירות אחראי לאפשר הקצאה. ההקצאה כוללת את האישורים של משתמשים מהיער של המשתמש.

מתן אפשרות ליער אחד לקבל החלטות אבטחה שמשפיעות על חשבונות של יער אחר מפר את גבול האבטחה בין יערות. תוקף שהוא הבעלים של היער המהימן יכול לבקש הקצאה של TGT עבור זהות מהיער המהימן, וונותן לו גישה למשאבים ביער המהימן. הדבר אינו חל על הקצאה מוגבלת של Kerberos (KCD).

Windows Server 2012 הציגה אכיפה עבור גבול היער עבור הקצאת Kerberos מלאה. תכונה זו הוספה מדיניות לתחום המהימן כדי להפוך הקצאה לא מאולצת ללא זמינה לפי אמון. הגדרת ברירת המחדל עבור תכונה זו מאפשרת הקצאה לא מאולצת והיא אינה בטוחה.

עדכונים המספקים הקשת אבטחה עבור הגירסאות הבאות של Windows Server:

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

תכונה זו יחד עם שינויים בחומרת אבטחה נתמכו בגירסאות הבאות:

  • Windows Server 2008 R2
  • Windows Server 2008

עדכוני אבטחה אלה בוצעו בשינויים הבאים:

  • הקצאת Kerberos לא מאולצת אינה זמינה כברירת מחדל ביער חדש ו יחסי אמון חיצוניים חדשים לאחר התקנת העדכון של 14 במאי ועדכונים מאוחרים יותר.
  • הקצאת Kerberos לא מאולצת אינה זמינה ביערות (הן אמון חדש והן באמנים קיימים) וגם באמנים חיצוניים לאחר התקנת העדכון של 9 ביולי, 2019 ועדכונים מאוחרים יותר.
  • מנהלי מערכת יכולים להפוך הקצאת Kerberos לא מאולצת לזמינה באמצעות המודול 'מאי' או גירסאות מתקדמות יותר של NETDOM ו- AD PowerShell.

העדכונים עשויים לגרום להתנגשויות תאימות עבור יישומים המחייבים הקצאה לא מאולצת על-פני יער או יחסי אמון חיצוניים. הדבר נכון במיוחד לגבי אמון חיצוני שעבורו דגל ההסגר (המכונה גם סינון SID) מופעל כברירת מחדל. באופן ספציפי, בקשות אימות עבור שירותים המשתמשים בהקצאה לא מאולצת בסוגי יחסי האמון המפורטים ייכשלו כשתתבקש כרטיסים חדשים.

עבור תאריכי ההפצה, ראה עדכונים הזמן.

פתרון

כדי לספק נתונים ואבטחה של חשבון בגירסה של Windows Server הכוללת את האכיפה עבור גבול היער עבור התכונה הקצאת Kerberos מלאה, באפשרותך לחסום הקצאת TGT לאחר התקנת העדכונים של מרץ 2019 באות אמון נכנס על-ידי הגדרת דגל Netdom EnableTGTDelegationללא, באופן הבא:


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

הקצאת TGT חסומה ביערות חדשים וקיימים וביחסי אמון חיצוניים לאחר התקנת העדכונים של מאי ויולי 2019 בהתאמה.

כדי להפוך הקצאה מחדש לזמינה בין יחסי אמון ולחזור לתצורה המקורית הלא בטוחה עד שניתן יהיה להפוך הקצאה מאולצת או מבוססת משאבים לזמינה, הגדר את הדגל EnableTGTDelegationלכן.

שורת הפקודה 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 במקרה זה) עבור כל תחום נותן אמון (כגון contoso.com). לאחר הגדרת הדגל, התחום המהימן לא יאפשר עוד להקצות TGTs לתחום המהימן.
  • המצב המאובטח עבור EnableTGTDelegation הוא לא.
  • כל יישום או שירות ש מסתמך על הקצאה לא מאולצת בין יערות ייכשל כאשר EnableTGTDelegation מוגדר באופן ידני או באופן תיכנותי ל'כן '. EnableTGTDelegation defaults to NO on new and existing trusts after you install the May 2019 and July 2019 updates. לקבלת מידע נוסף אודות האופן שבו ניתן לזהות כשל זה, ראה חיפוש שירותים ש מסתמנים על הקצאה לא מאולצת. ראה עדכונים ציר זמן לקבלת ציר זמן של שינויים המשפיעים על האופן שבו ניתן להחיל פתרון זה.
  • לקבלת מידע נוסף אודות NETDOM, עיין Netdom.exe זה.
  • אם עליך להפוך הקצאת TGT לזמינה באבטחת אמון, מומלץ לצמצם סיכון זה על-ידי הפיכת Windows Defender Credential Guard לזמין במחשבי לקוח. פעולה זו מונעת הקצאה לא מאולצת ממחשב שבו Windows Defender Credential Guard זמין פועלים.
  • אם יש לך יער או אמון חיצוני, ומוגדר כהסגר, לא ניתן להפוך הקצאת TGT לזמינה מאחר של שני הדגלים יש סמנטיות מנוגדות. סיבית ההסגר מחזקת את גבול האבטחה בין תחומים משתתפים. הפעלת הקצאת TGT מוחקת את גבולות האבטחה בין תחומים על-ידי מתן גישת תחום מהימנה אל אישורי המשתמשים מהתחום המהימן. אתה לא יכול לקבל את זה בשתי הדרכים.
    הוסף את הדגל להסגר:ללא דגל לתחביר שורת הפקודה של NETDOM אם דגל ההסגר זמין כעת.
  • אם שינית את EnableTGTDelegationל'כן', מחק את כרטיסי Kerberos במתקשרים שמקורם ובתווך לפי הצורך. הכרטיס הרלוונטי למחיקה הוא TGT ההפניה של הלקוח בכל יחסי האמון הרלוונטיים. הדבר עשוי לכלול יותר ממכשיר אחד, בהתאם למספר דילוגי ההקצאה בסביבה נתונה.

לקבלת מידע נוסף אודות הליך זה, עיין במאמר הבא של Windows IT Pro Center:

הגנה על אישורי תחום נגזרים באמצעות Windows Defender Credential Guard

עדכונים זמן

12 במרץ 2019

האכיפה עבור גבול היער עבור הקצאת Kerberos מלאה תהיה זמינה כעדכון כדי להפוך תכונה זו לזמינה בכל הגירסאות הנתמכות של Windows Server המפורטות בסעיף חל על בחלק העליון של מאמר זה. מומלץ להגדיר את התכונה ב יחסי אמון של יער נכנס.

העדכון יוסיף את האכיפה עבור גבול היער עבור התכונה הקצאה מלאה של Kerberos למערכות הבאות:

  • Windows Server 2008 R2
  • Windows Server 2008

14 במאי 2019

פורסם עדכון שהוספת תצורת ברירת מחדל בטוחה חדשה ליער חדש ולאמנים חיצוניים. אם אתה זקוק להקצאה בין יחסי אמון, יש להגדיר את הדגל EnableTGTDelegation לכן לפני התקנת העדכון של 9 ביולי 2019. אם אינך דורש הקצאה בין יחסי אמון, אין להגדיר את הדגל EnableTGTDelegation . המערכת תתעלם מה דגל EnableTGTDelegation עד להתקנת העדכון של 9 ביולי, 2019 כדי לתת למנהלי מערכת זמן להפעיל מחדש הקצאת Kerberos לא מאולצת כאשר הדבר נדרש.

כחלק מעדכון זה, הדגל EnableTGTDelegation יוגדר ללא כברירת מחדל עבור כל יחסי האמון החדשים שנוצרו. זוהי ההיפך מההתפקוד הקודם. מומלץ שמנהלי מערכת יגדירו מחדש את השירותים המושפעים לשימוש בהקצאה מוגבלת המבוססת על משאבים.

לקבלת מידע נוסף אודות זיהוי בעיות תאימות, ראה חיפוש שירותים ש מסתמנים על הקצאה לא מאולצת.

9 ביולי 2019

פורסם עדכון שאוכף את אופן הפעולה החדש המהווה ברירת מחדל בצד הנכנס של היער ו יחסי אמון חיצוניים. בקשות אימות עבור שירותים המשתמשים בהקצאה לא מאולצת בסוגי יחסי האמון המפורטים יאומת, אך ללא הקצאה. השירות ייכשל כאשר הוא ינסה להפעיל פעולות שהוקצו.

לצורך צמצום סיכונים, עיין בסעיף 'פתרון עוקף'.

חיפוש שירותים ש מסתמנים על הקצאה לא מאולצת

כדי לבצע סריקה לאיתור יערות בעלי יחסי אמון נכנסים המאפשרים הקצאת TGT, ולחפש את כל ראשי האבטחה שמאפשרים הקצאה לא מאולצת, הפעל את קבצי ה- Script הבאים של PowerShell בקובץ Script (לדוגמה, Get-RiskyServiceAccountsByTrust.ps1 -Collect):

הערה

באפשרותך גם להעביר את הדגל -ScanAll כדי לחפש בין יחסי אמון שאינם מאפשרים הקצאת TGT.

קבצי Script של 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 
}

הפלט של קבצי Script של PowerShell מציין את ראשי האבטחה של Active Directory בתחום המוגדרים עבור אמון נכנס מהתחום הפועל שתצורתו נקבעה עבור הקצאה לא מאולצת. הפלט יהיה דומה לדוגמה הבאה.

תחום sAMAccountName אובייקטClass
partner.fabrikam.com מסוכן user
partner.fabrikam.com labsrv$ מחשב

זיהוי הקצאה לא מאולצת דרך אירועי Windows

כאשר כרטיס Kerberos מונפק, בקר תחום של Active Directory רושם את אירועי האבטחה הבאים. האירועים מכילים מידע אודות תחום היעד. באפשרותך להשתמש באירועים כדי לקבוע אם הקצאה לא מאולצת נמצאת בשימוש בין יחסי אמון נכנסים.

הערה

בדוק אם קיימים אירועים המכילים ערך TargetDomainName התואם לשם התחום המהימן.

יומן אירועים מקור האירוע מזהה האירוע פרטים
אבטחה ביקורת-אבטחה-Microsoft-Windows 4768 הונפק TGT של Kerberos.
אבטחה ביקורת-אבטחה-Microsoft-Windows 4769 הונפק כרטיס שירות של Kerberos.
אבטחה ביקורת-אבטחה-Microsoft-Windows 4770 חודש כרטיס שירות של Kerberos.

פתרון בעיות של כשלי אימות

כאשר הקצאה לא מאולצת אינה זמינה, ייתכן שליישומים יש בעיות תאימות עם שינויים אלה אם היישומים מסתמנים על הקצאה לא מאולצת. יש להגדיר יישומים אלה לשימוש בהקצאה מוגבלת או בהקצאה מוגבלת המבוססת על משאבים. לקבלת מידע נוסף, ראה מבט כולל על הקצאה מוגבלת של Kerberos.

יישומים ש מסתמכים על אימות הלוך ושוב בין יחסי אמון אינם נתמכים באמצעות הקצאה מוגבלת. לדוגמה, הקצאה נכשלת אם משתמש ביער א' מאומת מול יישום ביער B, והיישום ביער ב' מנסה להקצות כרטיס בחזרה ליער א'.