當前位置:
首頁 > 新聞 > 域信任機制的攻擊技術指南(六)

域信任機制的攻擊技術指南(六)

打造跨域信任票證

事實上,我們有可能通過偽造域間的信任票證來攻擊信任關係。正如 Sean在「關於信任的一切」一文中所描述的那樣,我將向你詳細介紹他的一些文檔來獲取更多的操作細節,並且將涵蓋這項技術的含義以及它如何適用於我們的信任攻擊策略。

回想一下Kerberos跨信任的工作原理的解釋:

由此可以看出,當用戶將這個跨域TGT票證引用提交給外部域,再由域間信任密鑰簽名時,用戶的TGT將被包括在內。而且,由於外部域信任發布這個引用票證的域,外部域將信任用戶的TGT票證,並且認為票證中包含的所有信息都是準確的。

因此,當外部域使用協商的信任密鑰解引用票證時,它看到用戶的TGT並且說:「OK,另一個域已經認證了這個用戶,並且說清楚了他們說了說明或者他們是誰或者是這些是哪個組的用戶,所以我相信這些信息是準確的,因為我信任這個域。」

因此,如果我們可以檢索域間信任密鑰的哈希值,那麼我們就可以偽造一張引用票證(如Sean所描述的),這允許我們在請求訪問第二個域時偽裝成來自第一個域的任何用戶。這個哈希檢索可以通過正常的密碼轉儲或通過DCSync,通過查詢FOREIGN_DOMAIN_SHORTNAME$ 帳戶來完成:

但是,如果我們可以檢索域間的信任關鍵字,那麼在幾乎所有情況下,我們都可以引用關聯域的krbtgt哈希。如果我們有了這個哈希,我們可以為用戶引用域構造一張票證,偽裝成任何我們想要偽裝的外部用戶。這就是為什麼我沒有必要在域內建立跨域的信任推薦票證,但是有一個具體的例子會讓人很感興趣。

早在2015年,在每個人都開始充分認識到黃金票證的含義之後, 微軟發布了允許企業或組織改變krbtgt賬戶密碼的腳本。為了使其對單個域的林有效,密碼必須更改兩次。現在,由於sidHistory-hopping攻擊的出現,林中每個域中的krbtgt帳戶的密碼必須要更改兩次才有效。

說一個企業或組織這樣做,並為林中的每個域中的每個高許可權賬戶輪換更改密碼,那這麼做是否安全呢?根據Active Directory技術規範的第6.1.6.9.6.1節,域間信任密鑰每30天自動輪換一次,而當krbtgt賬戶發生了更改,它們不會輪換。因此,如果攻擊者擁有了域間密鑰,他們仍然可以使用sidHistory方法來獲得信任,就像Sean描述的細節那樣。另外,有上百萬種方法和另一種方式來在活動目錄中植入後門。ˉ _(ツ)_ /ˉ

所以如果你想確保域的安全,那麼只有一個解決方案——保持冷靜然後重新構建整個林( @gentilkiwi :)

跨域信任的Kerberoasting攻擊

我們喜歡使用 Kerberoasting。這種攻擊方式由蒂姆·梅丁(Tim Medin)在2014年提出。如果我們有一個信任我們的域,我們可以在這些信任的界限之間進行攻擊,在某些情況下只需稍作調整。

當使用.NET的System.IdentityModel.Tokens.KerberosRequestorSecurityToken類(以及接下來使用的.GetRequest()方法)時,我們指定一個服務主體名稱(SPN)來請求TGS-REP,然後使用GetRequest()來檢索要發送到目標服務的AP-REQ位元組。此AP-REQ包含了我們隨後需要提取並用於離線Kerberoasting 和密碼破解的服務票證。

結語:SID過濾

所以我們先前討論了怎麼樣以及為什麼林是Active Directory中的信任邊界,而不是域。其中很大一部分原因是我曾經提到過的幾次被稱為SID過濾的安全保護。SID過濾的最佳參考是[MS-PAC]「特權屬性證書數據結構」文檔,具體請 參見該文檔的第4.1.2.2節「SID過濾和斷言轉換」。我將盡我所能解釋一些要點。

當用戶的TGT通過引用呈現給新的域時,該TGT包含特權屬性證書(PAC),其包含了用戶的安全標識符(SID),他們所在的組的安全標識符以及任何存在於先前所討論的SID歷史欄位(即,在Trustpocalypse 章節所描述的PAC的ExtraSids部分)。PAC中的安全識別信息由信任域進行解析和分析,並根據信任的類型執行各種過濾器。

與特定模式相匹配的SID在各種情況下被信任域拒絕,作為一種安全保護機制。SID過濾旨在阻止具有提升的憑證的惡意用戶在受信任的域或林中控制信任域/林。這在微軟官方的「 信任安全注意事項 」文檔中也有所描述。

有一組SID被設置為「AlwaysFilter」,這意味著它們總是被信任域過濾掉,不管信任類型是什麼樣的。我們感興趣的SID主要是「Enterprise Admins」( S-1-5-21--519),它允許我們執行sidHistory跳躍攻擊,並被設置為「ForestSpecific」進行過濾。正如微軟官方文檔所描述的那樣,「 ForestSpecific規則適用於PAC中從來不允許在源於林之外的那些SID,也可能來自已經標記為QuarantinedWithinForest的域,除非它屬於該域。」這再一次解釋了為什麼林是信任邊界,而不是域,因為除了目標域在同一個林之外,這個提升的SID(以及許多其他)是不能跨越信任邊界的。

QuarantinedWithinForest?恰巧林內的域可以被設置為「隔離」,即使它在林內,也可以為域實施版本SID過濾。但是,正如文檔所述,「 允許從這樣的域傳遞的唯一SID是「企業域控制器(Enterprise Domain Controllers)」(S-1-5-9)SID和可信域對象(TDO)描述的SID。」因此,由於「企業域控制器」SID不會被過濾掉林內的隔離域,因此仍然有一種方法可以「跳躍」林信任鏈並危及林根:

這是 我幾年前試圖解釋的問題,但沒有正確理解這個問題,但是在閱讀了微軟的一堆文檔之後,現在它變得更有意義了:)

最後的總結

信任不是一個簡單的話題。大多數滲透測試人員(以及許多系統管理員)不能正確地理解信任和各種信任錯誤所暴露的風險。不幸的是,對於我們來說,一些壞人會這樣做,信任幾乎從Active Directory出現就開始被濫用,以便利用一個域中的訪問權來轉移到另一個域中。

如果你的域信任體系結構安裝不正確,那麼結果會是什麼呢?不幸的是,正如許多此類性質的主要構建缺陷一樣,並不是一個簡單的解決辦法。重新構建主要的Active Directory部署可能是一個漫長而昂貴且痛苦的過程,但仍有一個不錯的解決方案: 增強安全管理環境(ESAE),通常稱為「紅色森林」,它是一個安全的Active Directory架構,可以減少大量的Active Directory漏洞/錯誤配置。雖然微軟公布了這個架構的各個方面,但是我現在知道如何擁有ESAE / Red Forest的唯一方法就是向微軟付錢去購買它。ˉ _(ツ)_ /ˉ

我很樂意最終發布關於企業或組織如何實施「紅色森林」環境的指導,雖然不是「官方正式」的參考架構,但仍然會比許多企業或組織當前的實施方案更好一些。如果有人有相關的文件或知道如何能做到這一點,請與我聯繫(@ harmj0y),我會感到非常高興的。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 嘶吼RoarTalk 的精彩文章:

如何從 iOS 設備中導出媒體文件
滲透測試實戰:利用列目錄漏洞重置密碼

TAG:嘶吼RoarTalk |