# 1、概述
本文側重於從不同角度瞭解Windows Active Directory
環境。如從管理員身份配置安全策略的角度、攻擊者繞過安全策略的角度、檢測攻擊者的角度。導致Active Directory
受攻擊破壞的因素有很多,比如錯誤的配置、糟糕的維護程序以及管理員犯的其他很多錯誤。文章涉及基本和高級的概念、環境配置及攻擊,內容可能有點長,但是這有助於模擬不同的攻擊,模擬和了解紅隊的攻擊行爲。
# 2、什麼是Active Directory
Active Directory
簡單來說,就是Microsfot
提供的一項功能服務,它充當集中存儲庫並存儲與Active Directory
用戶、計算機、服務器和組織內的其他資源等對象相關的所有數據,它使系統管理員的管理變得容易。但它的主要功能是提供一種在域環境中對用戶和機器進行身份驗證的方法。使用 Active Directory
,可以遠程管理用戶、工作站及其權限等資源。因此,它是一個可從網絡上的任何地方訪問的單一管理界面。它主要是 Microsoft Windows
的一項功能,但其他操作系統也可以加入其中,例如你可以在 Active Directory
環境中加入Linux
主機。
# 3、什麼是域
簡而言之,域可以稱爲共享公共 Active Directory
數據庫的所有 Active Directory
對象(如用戶、計算機、組等)的集合或結構,並由稱爲域控制器的域的主服務器管理。域始終以其唯一的名稱來引用,並且具有正確的域名結構。
域名示例:rootdse.lab
此域名中的
ROOTDSE
代表其NetBIOS
名稱
我們可以將Active Directory
基礎結構拆分成多個單獨的域,以創建更小的邊界,以便可以在大型網絡中分離不同域的管理任務。在Active Directory
環境中,域還可以爲管理某些設置(如密碼策略和帳戶鎖定策略)創建邊界,以便它們只能應用於域級別的域用戶帳戶。我們將在本系列的後面部分詳細討論組策略和錯誤配置的策略。
域中包含的幾個重要組件:
- 組、用戶、計算機等對象。
- 身份認證服務
- 組策略
- DNS
- DHCP
# Active Directory PowerShell模塊
通過在Powershell
中導入Active Directory
模塊,我們可以檢索有關域環境的基本信息。
默認情況下,
Active Directory
模塊只存在於域控制器中,不存在工作站上。
這些文件的路徑:C:\Windows\Microsoft.NET\assembly\GAC_64\Microsoft.ActiveDirectory.Management\
默認情況下,此模塊需要在要啓用需要管理權限的 Active Directory powershell
模塊的客戶端計算機上安裝遠程服務器管理工具包 (RSAT
)。每個域控制器都安裝了 RSAT
。因此域控制器和成員服務器都安裝了內置的 Active Directory powershell
模塊。但是也有一種方法可以在工作站上使用它(無需安裝 RSAT
),只需從域控制器複製 DLL
文件並將其導入到 powershell
會話中即可。
要在加入域的工作站上導入它,請從此處下載它(https://github.com/ScarredMonk/RootDSE-ActiveDirectory),然後使用Import-Module
簡單地導入它,然後就可以使用此模塊中的任何命令。
Import-Module '.\Microsoft.ActiveDirectory.Management.dll'
要檢索有關域的信息,我們可以使用以下命令:
PS C:\Users\scarred.monk> Get-ADDomain AllowedDNSSuffixes : {} ChildDomains : {matrix.rootdse.lab} ComputersContainer : CN=Computers,DC=rootdse,DC=lab DeletedObjectsContainer : CN=Deleted Objects,DC=rootdse,DC=lab DistinguishedName : DC=rootdse,DC=lab DNSRoot : rootdse.lab DomainControllersContainer : OU=Domain Controllers,DC=rootdse,DC=lab DomainMode : Windows2016Domain DomainSID : S-1-5-21-580985966-2115238843-2989639066 ForeignSecurityPrincipalsContainer : CN=ForeignSecurityPrincipals,DC=rootdse,DC=lab Forest : rootdse.lab InfrastructureMaster : RDSEDC01.rootdse.lab LastLogonReplicationInterval : LinkedGroupPolicyObjects : {CN={31B2F340-016D-11D2-945F-00C04FB984F9},CN=Policies,CN=System,DC=rootdse,DC=lab} LostAndFoundContainer : CN=LostAndFound,DC=rootdse,DC=lab ManagedBy : Name : rootdse NetBIOSName : rootdse ObjectClass : domainDNS ObjectGUID : 70b22e8c-d4e3-4690-b4e0-0998b0125fb2 ParentDomain : PDCEmulator : RDSEDC01.rootdse.lab PublicKeyRequiredPasswordRolling : True QuotasContainer : CN=NTDS Quotas,DC=rootdse,DC=lab ReadOnlyReplicaDirectoryServers : {} ReplicaDirectoryServers : {RDSEDC01.rootdse.lab} RIDMaster : RDSEDC01.rootdse.lab SubordinateReferences : {DC=matrix,DC=rootdse,DC=lab, DC=ForestDnsZones,DC=rootdse,DC=lab, DC=DomainDnsZones,DC=rootdse,DC=lab, CN=Configuration,DC=rootdse,DC=lab} SystemsContainer : CN=System,DC=rootdse,DC=lab UsersContainer : CN=Users,DC=rootdse,DC=lab
【----幫助網安學習,以下所有學習資料免費領!加vx:yj009991,備註 “博客園” 獲取!】
① 網安學習成長路徑思維導圖
② 60+網安經典常用工具包
③ 100+SRC漏洞分析報告
④ 150+網安攻防實戰技術電子書
⑤ 最權威CISSP 認證考試指南+題庫
⑥ 超1800頁CTF實戰技巧手冊
⑦ 最新網安大廠面試題合集(含答案)
⑧ APP客戶端安全檢測指南(安卓+IOS)
要檢索域名,我們可以使用以下命令:
PS C:\Users\scarred.monk> (Get-ADDomain).DNSRoot rootdse.lab
# SID
每個域都有一個唯一的 SID
(安全標識符)來標識它。通常,SID
用於唯一標識安全主體,例如用戶帳戶、計算機帳戶或在安全上下文中運行的進程或用戶或計算機帳戶。 SID
在其範圍內(域或本地)是唯一的,並且永遠不會被重用。對於域帳戶,安全主體的 SID
是通過將域的 SID
與帳戶的相對標識符 (RID
) 連接起來創建的。
# RID
RID
(相對標識符)是Active Directory
對象的安全標識符(SID
)的一部分,用於唯一標識域中的帳戶或組。它在創建時分配給Active Directory
對象。RID
是SID
的最後一部分。
# FQDN( 完全合格域名/全稱域名)
完全合格域名是域中特定主機的完整域名。
FQDN
包含兩部分:主機名+域名
例如,如果域是 matrix.rootdse.lab
,並且矩陣域中的計算機具有主機名 MTRXDC01
,則該計算機的 FQDN
將是 mtrxdc01.matrix.rootdse.lab
# 4、域控制器(Domain Controller)
簡而言之,Active Directory
域控制器承載對域中的身份驗證請求進行響應的服務。它對網絡上的用戶訪問進行身份驗證和驗證。當用戶和計算機帳戶登錄到網絡時,他們向域控制器進行身份驗證,域控制器驗證他們的信息(如用戶名、密碼),然後決定是允許還是拒絕這些用戶的訪問。域控制器是攻擊者的重要服務器和主要目標,因爲它持有Active Directory
環境的密鑰。每個域至少有一個域控制器(也可以有其他域控制器)。
要檢查域控制器,我們可以使用以下命令:
PS C:\Users\scarred.monk> (Get-ADDomainController).HostName RDSEDC01.rootdse.lab
域控制器提供名稱解析服務,並負責將域數據庫中有關域對象的信息保持爲最新。Active Directory
數據庫存儲在文件C:\WINDOWS\NTDS\ntds.dit
中,該文件在域控制器中維護。如果此文件被盜,則有關Active Directory
對象(如用戶、計算機、組、GPO等)的所有信息(包括用戶憑據)也會受到威脅。
# 只讀域控制器
出於備份目的,域控制器有三種類型,即主域控制器、只讀域控制器和附加域控制器。只讀域控制器(RODC)不允許對數據庫進行任何更改。如果是隻讀域控制器,則必須在可寫域控制器上進行更改,然後將其複製到特定域中的只讀域控制器。只讀域控制器是爲了解決在遠程位置的分支機構中常見的問題,這些分支機構可能沒有域控制器,或者物理安全性差、網絡帶寬差,或者沒有當地的專業知識來支持它。只讀域控制器的主要用途是促進來自遠程辦公分支機構的身份驗證,並允許用戶訪問域資源。
# 5、域樹(Domain Tree)
域樹表示爲一系列以分層順序連接在一起的域,這些域使用相同的DNS命名空間。當我們將子域添加到父域時,會創建域樹。例如,有一個根域rootdse.lab,並向其添加了一個新的域矩陣(FQDN爲matrix.rootdse.lab),一旦在兩者之間自動創建樹系信任,它就會成爲同一域樹的一部分。信任將在下一節中解釋。
# 6、森林(Forest)
Active Directory
林是共享公共架構的多個域樹的集合,所有域通過信任連接在一起。林中的每個域都可以有一個或多個域控制器,這些域控制器可以與其他域交互,也可以訪問來自其他域的資源。林的名稱與根域相同。如果林包含單個域,則該域本身就是根域。
我們可以按如下方式檢查Active Directory
中的林名稱:
PS C:\Users\scarred.monk> Get-ADForest ApplicationPartitions : {DC=DomainDnsZones,DC=matrix,DC=rootdse,DC=lab, DC=ForestDnsZones,DC=rootdse,DC=lab, DC=DomainDnsZones,DC=rootdse,DC=lab} CrossForestReferences : {} DomainNamingMaster : RDSEDC01.rootdse.lab Domains : {matrix.rootdse.lab, rootdse.lab} ForestMode : Windows2016Forest GlobalCatalogs : {RDSEDC01.rootdse.lab, MTRXDC01.matrix.rootdse.lab} Name : rootdse.lab PartitionsContainer : CN=Partitions,CN=Configuration,DC=rootdse,DC=lab RootDomain : rootdse.lab SchemaMaster : RDSEDC01.rootdse.lab Sites : {Default-First-Site-Name} SPNSuffixes : {} UPNSuffixes : {}
通過從上面的輸出請求RootDomain
屬性,可以過濾上面的命令以提取林名稱:
PS C:\Users\scarred.monk> (Get-ADForest).RootDomain rootdse.lab
同樣,我們可以使用此方法查看任何特定的屬性,方法是將整個命令放在括號中,然後鍵入要查看的屬性名稱。
# 7、信任(Trusts)
在林中,域通過稱爲信任的連接相互連接。這就是爲什麼一個域的用戶能夠訪問其他域的資源。在 Active Directory
環境中,一旦在兩個域之間建立信任關係,它就會向跨實體的用戶、組和計算機授予對資源的訪問權限。這是通過連接域之間的身份驗證系統並允許身份驗證流量在它們之間流動來完成的。稍後將詳細討論這一點,以瞭解當一個域中的用戶請求訪問另一個域的資源時會發生什麼,當前域控制器向用戶返回一個特殊的票證(用域間信任密鑰簽名),該票證指的是另一個域的域控制器。這部分會在後續的 Kerberos
部分詳細解釋。
# 信任方向(單向或雙向)
信託可以是單向的,也可以是雙向的。在單向信任域中,域一信任域二,這意味着域一是信任域,域二將是受信任域。某個域中的用戶訪問另一個域中的資源,該用戶需要在信任域中。下圖顯示了兩個域之間信任流的圖形表示。
在雙向信任的情況下,所有域都可以與所有用戶共享資源,而不管它們屬於哪個域。顧名思義,信任是雙向的。當我們在兩個域(域一和域二)之間創建信任時,域一中的用戶帳戶將可以訪問域二中的資源,反之亦然。
有各種類型的信任。信任可以是傳遞性的,也可以是非傳遞性的。下表解釋了不同類型的信任。
信任類型 | 屬性 | 信任方向 | 驗證 | 詳情 |
---|---|---|---|---|
Tree-Root | Transitive | 雙向 | Kerberos V5 or NTLM | 將新樹添加到林時自動創建 |
Parent-Child | Transitive | 雙向 | Kerberos V5 or NTLM | 添加子域時自動創建 |
Shortcut | Transitive | 單向或者雙向 | Kerberos V5 or NTLM | 手動創建。在林中使用以縮短信任路徑以提高身份驗證時間 |
Forest | Transitive | 單向或者雙向 | Kerberos V5 or NTLM | 手動創建。用於在AD DS林之間共享資源。 |
# 森林中的傳遞信任:
可傳遞信任擴展到林中的任何其他受信任域。
例如:
如果域1信任域2,域2信任域3,則域1信任域3。
在這裏,信任關係通過每個受信任域。因爲它是可傳遞的信任,所以它允許域1中的用戶帳戶訪問域3中的資源,反之亦然(而不必在域1和域3之間創建額外的信任)
# 森林中的非傳遞性信任
在不可傳遞信任的情況下,與信任之外的域的關係受到限制。這意味着不允許其他域訪問信任之外的資源。他們將無法通過其身份驗證信息。
在上面的示例中,域1和域2之間建立了不可傳遞的信任關係,兩個域中的用戶帳戶都可以訪問另一個域中的資源。因此,當我們添加新的域3並在域2和域3之間創建信任時,域1中的用戶不會自動被允許訪問域3中的資源。
# 森林中的自動信任
默認情況下,當添加子域或添加域樹時,會自動創建雙向可傳遞信任。兩種默認信任類型是父子信任和樹根信任。
# 8、全局編錄 Global Catalog(GC)
全局編錄用於執行全林搜索,因爲全局編錄服務器包含所有對象的完整副本。默認情況下,域中的根域控制器被視爲全局編錄服務器。爲了加快對林中其他域中對象的查詢速度,全局編錄服務器具有其自己域的副本和其他域對象的只讀分區。假設我們必須從當前域以外的域中查詢特定用戶的描述屬性,在這種情況下,全局編錄將檢索它而無需查詢其他域的域控制器。
讓我們舉一個具有四個域的 Active Directory
林的示例,其中域1是根域:
由於域1是根域控制器,因此它保存當前域的完全可寫目錄分區:
全局編錄服務器在目錄數據庫文件(Ntds.dit
)中保存其自己域的副本(完整且可寫)和林中所有其他域的部分只讀副本:
# 9、小結
1、Active Directory
是一種目錄服務,充當集中式存儲庫並保存與Active Directory
對象相關的所有數據
2、Active Directory
域是共享Active Directory
數據庫的所有對象(如用戶、計算機、組等)的結構
3、域代表Active Directory
林中的邏輯分區
4、SID
(安全標識符)用於唯一標識用戶、計算機帳戶等安全主體
5、RID (Relative identifier)
是 SID
的最後一部分,用於唯一標識域內的帳戶或組
6、FQDN
是域中特定主機的完整域名
7、域樹基本上是一系列按層次順序連接在一起的域
8、域控制器對網絡上的用戶訪問進行身份驗證和驗證
9、信任允許用戶、組和計算機訪問其他實體的資源
10、全局編錄包含所有對象的完整副本,在執行林範圍搜索時使用
在第2部分中,我們將介紹不同類型的Active Directory對象以及如何查詢它們。
更多靶場實驗練習、網安學習資料,請點擊這裏>>
搜索
複製