Try   HackMD

Red Team - 跨域與跨林攻擊(Cross-Domain / Cross-Forest)

基礎原理與概念

AD信任(Trust)機制

  • AD網域與森林間可建立不同類型的信任關係(如跨域信任、跨森林信任),通常是雙向且具備遞移(transitive)特性。
  • 在相互信任的領域中,Kerberos驗證票證可通過信任邊界,讓來自A網域的使用者在B網域中存取資源。

攻擊目標

  • 透過信任鏈從已控制的網域或帳號逐步橫向擴張至其他網域或甚至整個森林。
  • 取得更高層級網域(如Forest Root Domain)的控制權,最終掌控整個AD環境。

常見攻擊手法

1. 使用Golden Ticket (黃金票證)跨域攻擊

原理
一旦取得網域的KRBTGT帳號Hash,攻擊者可偽造該網域的Kerberos TGT(黃金票證)來冒充任意使用者。在存在信任的情況下,此偽造票證可用來向受信網域請求服務票證(TGS),達到跨域滲透。

步驟與指令

  • 從已控制的網域以Mimikatz Dump出KRBTGT Hash:
    ​​mimikatz "lsadump::dcsync /domain:child.local /user:krbtgt"
    
  • 生成黃金票證:
    ​​mimikatz "kerberos::golden /user:Administrator /domain:child.local /sid:S-1-5-21-<CHILD_SID> /krbtgt:<KRBTGT_HASH> /ptt"
    
  • 有了此TGT後,透過該票證請求對另一受信任網域的資源服務票證(TGS)。若信任是雙向且無SID過濾,可擴張至父網域或Forest Root Domain。

使用場景
當已是Child Domain Admin,想繼續往Parent Domain或Forest Root提升權限時。

2. SID History注入(SID History Injection)

原理
SID History是一個帳號屬性,可用來存放該帳號在舊網域的SID,以利於遷移使用者時保留舊權限。若信任關係未啟用SID過濾(SID Filtering),攻擊者可將高權限SID(如另一網域的Domain Admin SID)寫入該使用者的SID History中,使該使用者在受信網域擁有該SID對應的權限。

步驟

  • 取得可修改AD帳號屬性的權限(如Domain Admin)。
  • 使用Mimikatz或ADSI編輯工具,將高權SID注入目標帳號之SID History屬性。
  • 一旦完成,該帳號在跨網域資源存取時,會攜帶新加入的高權SID,從而在另一網域擁有Admin等級的權限。

指令示例(概念性,實務中常透過LDAP或Mimikatz執行):

mimikatz "lsadump::dcsync /domain:parent.local /user:Administrator"  
# 取得 parent.local Domain Admin SID
# 接著透過LDAP修改child domain中某使用者的SIDHistory屬性為該SID

使用場景
在子網域取得Domain Admin後,透過SID History注入,使該使用者在父網域出現為高權限成員,實現權限跨域遞增。

3. S4U(Service for User)攻擊(S4U2Self/S4U2Proxy)

原理
S4U機制允許服務在不知使用者密碼的情況下向KDC要求代表該使用者的票證。若存在跨域信任,且您已持有特定服務帳號的憑證或控制了該服務帳號,便可使用S4U2Self取得模擬該網域內使用者的TGS,再透過S4U2Proxy取得跨域服務TGS。

指令(Rubeus舉例)

Rubeus.exe s4u /user:someServiceAcct /rc4:<hash> /impersonateuser:targetUser /domain:parent.local /ptt

此指令可在已取得某網域服務帳號hash的情況下,模擬成該網域的任意使用者(targetUser),接著透過信任關係取得跨域資源票證。

使用場景
已在一個網域控制了Service Account,透過S4U2Proxy向另一個受信網域要求服務票證,擴張攻擊範圍。

4. 資源型受限委派 (Resource-Based Constrained Delegation, RBCD) 跨域濫用

原理
RBCD允許資源(如Server服務)指定哪些帳號可以代表使用者向KDC請求票證(S4U2Proxy)。若在跨域信任下,且RBCD設定不嚴謹,攻擊者可在已控制的網域帳號上修改目標資源的msDS-AllowedToActOnBehalfOfOtherIdentity屬性,使該帳號可以在受信網域中代表高權限使用者請票,進而取得該網域的高權限存取權。

步驟

  • 找到目標網域內有RBCD設定的資源或服務。
  • 使用擁有修改權限的帳號在AD中修改該屬性,使受控帳號有權代其他高權使用者請票。
  • 使用Rubeus:
    ​​Rubeus.exe s4u /impersonateuser:Administrator /msdsspn:cifs/targetMachine.parent.local /ptt /domain:parent.local
    

使用場景
網域間存在誤設的RBCD,透過修改msDS-AllowedToActOnBehalfOfOtherIdentity實現在受信網域中假借高權者身份取得服務票證。

5. 跨林信任攻擊(Cross-Forest Trust Abuse)

原理
若有Forest Trust存在,攻擊者可從一個森林取得憑證後,要求另一森林的TGS。方法類似跨域攻擊,但需取得Forest Trust中使用的信任金鑰(TDO Keys)或取得該森林之KRBTGT Hash,以偽造ticket。

手法

  • 使用mimikatz "lsadump::dcsync /domain:forestroot.local /user:krbtgt"在已掌控的Forest中Dump出相應hash。
  • 透過Golden Ticket方式在目標Forest請求服務票證。
  • 或利用Rubeus透過S4U2Proxy向另一Forest請求服務TGS(若有雙向Forest Trust)。

使用場景
擴張至整個企業園區的多個森林間,達成最終完整控制的目標。

工具與列舉方法

  • PowerView
    列舉信任關係:

    ​​Get-NetDomainTrust
    ​​Get-NetForestTrust
    

    藉此找出合適的橫向攻擊目標網域。

  • BloodHound/SharpHound
    收集Trust資訊、委派設定、ACLs等,圖形化視覺化顯示哪條路徑可從已控網域跳轉至目標網域。

綜合使用場景範例

  1. 從子網域提升至父網域

    • 在子網域中提升至Domain Admin並Dump出KRBTGT。
    • 使用Golden Ticket冒充網域內高權帳號,以該TGT向父網域請求服務票證,最終取得父網域的Domain Admin權限。
  2. 使用SID History Injection避開SID Filtering

    • 若信任未啟用SID Filtering,將父網域的DA SID加入子網域使用者的SID History中。
    • 該子網域使用者在父網域存取時,帶有DA SID,擁有高權限。
  3. S4U2Proxy搭配RBCD滲透

    • 修改目標網域資源的RBCD屬性,使攻擊者控制的帳號可代表父網域Administrator請求Kerberos票證。
    • 成功取得父網域內的高權限服務存取權。

防禦與偵測建議

  • 啟用SID Filtering防止SID History惡用。
  • 使用Selective Authentication限制跨域存取。
  • 嚴格控管RBCD設定與審查Trust關係。
  • 持續監控Kerberos事件(如Ticket請求、S4U行為),並留意不尋常的跨域票證要求。