本來昨晚就該總結整理,又拖到今天早上。。6點起來趕可還行
0x01 Kerberos前言
Kerberos 是一種由 MIT(麻省理工大學)提出的一種網絡身份驗證協議。它旨在通過使用密鑰加密技術為客戶端/服務器應用程序提供強身份驗證。
Kerberos 主要是用在域環境下的身份認證協議。
Active Directory
Active Directory(活動目錄)是微軟Windows Server中,負責架構中大型網路環境的集中式目錄管理服務(Directory Services),Windows 2000 Server開始內建於Windows Server產品中。
Active Directory存儲了有關網絡對象的信息,並且讓管理員和用 戶能夠輕松地查找和使用這些信息。Active Directory使用了一種 結構化的數據存儲方式,並以此作為基礎對目錄信息進行合乎邏 輯的分層組織。
網絡對象分為:用戶、用戶組、計算機、域、組織單位以及安全策略等。
Active Directory的主要功能作用
1.用戶服務
管理用戶域賬戶、用戶信息、企業通訊錄(與電子郵件系統集成)、用戶組管理、用戶身份認證、用戶授權管理等, 按省實施組管理策略。
2.計算機管理
管理服務器及客戶端計算機賬戶、所有服務器及客戶端計算機加入域管理並按需實施組策略。
3.資源管理
管理打印機、文件共享服務、網絡資源等實施組策略。
4.應用系統的支持
對於電子郵件(Exchange)、在線及時通訊(Lync)、企業信息管理(SharePoint)、微軟CRM,ERP等業務系統提供數據認證(身份認證、數據集成、組織規則等)。這里不單是微軟產品的集成,其它的業務系統根據公用接口的方式一樣可以嵌入進來。
5.客戶端桌面管理
系統管理員可以集中的配置各種桌面配置策略,如:用戶適用域中資源權限限制、界面功能的限制、應用程序執行特征的限制、網絡連接限制、安全配置限制等。
關於上面提到的網絡對象:
這里轉自 https://www.cnblogs.com/IFire47/p/6672176.html
1.域(Domain).簡單理解為:A公司總部
域(Domain)是AD的根,是AD的管理單位。域中包含着大量的域對象,如:組織單位(Organizational Unit),組(Group),用戶(User),計算機(Computer),聯系人(Contact),打印機,安全策略等。
2.組織單位(Organization Unit).簡單理解為:A公司的分公司
組織單位簡稱為OU是一個容器對象,可以把域中的對象組織成邏輯組,幫助網絡管理員簡化管理組。組織單位可以包含下列類型的對象:用戶,計算機,工作組,打印機,安全策略,其他組織單位等。可以在組織單位基礎上部署組策略,統一管理組織單位中的域對象。
3.群組(Group).簡單理解為:某分公司里的某事業部
群組是一批具有相同管理任務的用戶賬戶,計算機賬戶或者其他域對象的一個集合。例如公司的開發組,產品組,運維組等等。
群組類型分為兩類:
安全組:用來設置有安全權限相關任務的用戶或者計算機賬戶的集合。比如:Tiger組都可以登錄並訪問某ftp地址,並拿到某個文件。
通訊組:用於用戶之間通信的組,適用通信組可以向一組用戶發送電子郵件。比如:我要向團隊內10為成員都發送同一封郵件這里就要抄送9次,而使用組的話我直接可以發送給@Tiger,所有Tiger組內的成員都會收到郵件。
4.用戶(User).簡單理解為:某個工作人員
AD中域用戶是最小的管理單位,域用戶最容易管理又最難管理,如果賦予域用戶的權限過大,將帶來安全隱患,如果權限過小域用戶無法正常工作。
域用戶的類型,域中常見用戶類型分為:
普通域用戶:創建的域用戶默認就添加到"Domain Users"中。
域管理員:普通域用戶添加進"Domain Admins"中,其權限升為域管理員。
企業管理員:普通域管理員添加進"Enterprise Admins"后,其權限提升為企業管理員,企業管理員具有最高權限。
AD的數據結構為樹形結構,層次結構。樹狀目錄形管理,面向對象式的存儲。域(Domin)--->組織單位(Organization Unit)--->群組(Group)--->用戶(User)從左至右依次嵌套,形成樹狀型結構。有點像文件夾的存儲方式。
0x02 Kerberos詳解
Kerberos 是一種網絡認證協議,其設計目標是通過密鑰系統為客 戶機 / 服務器應用程序提供強大的認證服務。該認證過程的實現不 依賴於主機操作系統的認證,無需基於主機地址的信任,不要求 網絡上所有主機的物理安全,並假定網絡上傳送的數據包可以被 任意地讀取、修改和插入數據。在以上情況下, Kerberos 作為一 種可信任的第三方認證服務,是通過傳統的密碼技術(如:共享 密鑰)執行認證服務的。
Kerberos的三大要素:
-
Client
-
Server
-
KDC(Key Distribution Center) = DC(Domain Controller)
流程參考鏈接:https://tools.ietf.org/html/rfc4120.html
Kerberos認證協議的基礎概念:
票據(Ticket):是網絡對象互相訪問的憑證。
TGT(Ticket Granting Ticket):入場券,通過入場券能夠獲得票據,是一種臨時憑證的存在。
KDC負責管理票據、認證票據、分發票據,但是KDC不是一個獨立的服務,它由以下服務組成:
-
Authentication Service: 為client生成TGT的服務(簡稱AS)
-
Ticket Granting Service: 為client生成某個服務的ticket(簡稱TGS)
另外還需要介紹一個類似於本機SAM的一個數據庫:AD,全稱叫account database,存儲所有client的白名單,只有存在於白名單的client才能順利申請到TGT。
從物理層面看,AD與KDC均為域控制器(Domain Controller)。
域認證粗略流程
-
client向kerberos服務請求,希望獲取訪問server的權限。 kerberos得到了這個消息,首先得判斷client是否是可信賴的, 也就是白名單黑名單的說法。這就是AS服務完成的工作,通過 在AD中存儲黑名單和白名單來區分client。成功后,返回AS返 回TGT給client。
-
client得到了TGT后,繼續向kerberos請求,希望獲取訪問 server的權限。kerberos又得到了這個消息,這時候通過client 消息中的TGT,判斷出了client擁有了這個權限,給了client訪 問server的權限ticket。
-
client得到ticket后,終於可以成功訪問server。這個ticket只是 針對這個server,其他server需要向TGS申請。
The Authentication Service Exchange:Client 與 AS 的交互;(請求TGT)
The Ticket-Granting Service (TGS) Exchange:Client 與 TGS 的交互;(請求ST)
The Client/Server Authentication Exchange:Client 與 Server 的交互。(訪問)
下面摘自傾旋大佬圖片
首先,客戶端需要發送自己的身份信息到KDC,身份信息中起碼包含用戶名,KDC根據用戶名在AD中尋找是否在白名單中,然后根據用戶名提取到對應的NTLM Hash。
KDC此時生成一個隨機字符串,叫Session Key,使用用戶名對應的NTLM Hash加密Session Key,作為AS數據,使用KDC中某個用戶的NTLM Hash加密Session Key和客戶端的信息,生成TGT。(這里的用戶就是krbtgt)
-
Session Key用於客戶端向TGS服務通信。
-
域內所有網絡對象的憑證都在AD中保存
-
KDC中某個用戶指的是krbtgt
數據結構:
其中,TGT的到期時間為8小時,如果超過了8小時,還需要重新申請TGT,不能之間進入下一步獲取Ticket。
Kerberos是一個假設網絡環境不安全的情況下能夠正常進行認證工作的協議。
第一步中,KDC返回的TGT客戶端是無法解密的,因為它沒有KDC Hash。
第二步客戶端需要提供TGT與第一步中使用自己NTLM Hash解密出來的Session Key加密的客戶端信息跟時間戳。
如果假設這個數據被中間人竊取到,也無法在段時間內破解,因為KDC會校驗時間戳。
KDC接到TGT與其他內容后,會首先解密TGT,只有KDC可以解密TGT,從TGT中提取到Session Key,再使用Session Key解密其他內容,解密出來的內容同TGT中的信息進行校驗來確認客戶端是否受信。
驗證通過后,就會生成一個新的Session Key,我們稱之為Server Session Key,這個Server Session Key主要用於和服務器進行通信。同時還會生成一個Ticket,也就是最后的票據了。
Ticket組成如下:
Server Hash:這個Hash是在AD中服務器計算機的NTLM Hash
在第三步里,客戶端向服務器請求,需要提供Ticket,Server Session Key加密的客戶端信息與時間戳。
-
Ticket客戶端無法解密
-
服務器端通過解密Ticket解密Server Session Key(Client info + Timestamp)
-
比較時間長度
校驗通過后,認證成功,該票據會一直存在客戶端內存中。
0x03 PAC && SPN
PAC
在 Kerberos 最初設計的幾個流程里說明了如何證明 Client 是 Client 而不是由其他人來冒充的,但並沒有聲明 Client 有沒有訪問 Server 服務的權限,因為在域中不同權限的用戶能夠訪問的資源是有區別的。
所以微軟為了解決這個問題在實現 Kerberos 時加入了 PAC 的概念,PAC 的全稱是 Privilege Attribute Certificate(特權屬性證書)。可以理解為火車有一等座,也有二等座,而 PAC 就是為了區別不同權限的一種方式。
(1)PAC 的實現
當用戶與 KDC 之間完成了認證過程之后,Client 需要訪問 Server 所提供的某項服務時,Server 為了判斷用戶是否具有合法的權限需要將 Client 的 User SID 等信息傳遞給 KDC,KDC 通過 SID 判斷用戶的用戶組信息,用戶權限等,進而將結果返回給 Server,Server 再將此信息與用戶所索取的資源的 ACL 進行比較,最后決定是否給用戶提供相應的服務。
PAC 會在 KRB_AS_REP 中 AS 放在 TGT 里加密發送給 Client,然后由 Client 轉發給 TGS 來驗證 Client 所請求的服務。
在 PAC 中包含有兩個數字簽名 PAC_SERVER_CHECKSUM 和 PAC_PRIVSVR_CHECKSUM,這兩個數字簽名分別由 Server 端密碼 HASH 和 KDC 的密碼 HASH 加密。
同時 TGS 解密之后驗證簽名是否正確,然后再重新構造新的 PAC 放在 ST 里返回給客戶端,客戶端將 ST 發送給服務端進行驗證。
(2)Server 與 KDC
PAC 可以理解為一串校驗信息,為了防止被偽造和串改,原則上是存放在 TGT 里,並且 TGT 由 KDC hash 加密。同時尾部會有兩個數字簽名,分別由 KDC 密碼和 server 密碼加密,防止數字簽名內容被篡改。
摘自freebuf
同時 PAC 指定了固定的 User SID 和 Groups ID,還有其他一些時間等信息,Server 的程序收到 ST 之后解密得到 PAC 會將 PAC 的數字簽名發送給 KDC,KDC 再進行校驗然后將結果已 RPC 返回碼的形式返回給 Server。
SPN
SPN定義
服務主體名稱(SPN)是Kerberos客戶端用於唯一標識給特定Kerberos目標計算機的服務實例名稱。Kerberos身份驗證使用SPN將服務實例與服務登錄帳戶相關聯。如果在整個林中的計算機上安裝多個服務實例,則每個實例都必須具有自己的SPN。如果客戶端可能使用多個名稱進行身份驗證,則給定的服務實例可以具有多個SPN。例如,SPN總是包含運行服務實例的主機名稱,所以服務實例可以為其主機的每個名稱或別名注冊一個SPN。
SPN掃描
spn掃描也可以叫掃描Kerberos服務實例名稱,在Active Directory環境中發現服務的最佳方法是通過“SPN掃描”。通過請求特定SPN類型的服務主體名稱來查找服務,SPN掃描攻擊者通過網絡端口掃描的主要好處是SPN掃描不需要連接到網絡上的每個IP來檢查服務端口。SPN掃描通過LDAP查詢向域控制器執行服務發現。由於SPN查詢是普通Kerberos票據的一部分,因此如果不能被查詢,但可以用網絡端口掃描來確認。
SPN格式
SPN = serviceclass “/” hostname [“:”port] [“/” servicename] serviceclass = mssql servicename =sql.bk.com
其中:
serviceclass:標識服務類的字符串,例如Web服務的www
hostname:一個字符串,是系統的名稱。這應該是全限定域名(FQDN)。
port:一個數字,是該服務的端口號。
servicename:一個字符串,它是服務的專有名稱(DN),objectGuid,Internet主機名或全限定域名(FQDN)。
注意: 服務類和主機是必需參數,但 端口和服務名是可選的,主機和端口之間的冒號只有當端口存在時才需要
常見服務和spn服務實例名稱
MSSQLSvc/adsmsSQLAP01.adsecurity.org:1433 Exchange exchangeMDB/adsmsEXCAS01.adsecurity.org RDP TERMSERV/adsmsEXCAS01.adsecurity.org WSMan / WinRM / PS Remoting WSMAN/adsmsEXCAS01.adsecurity.org Hyper-V Host Microsoft Virtual Console Service/adsmsHV01.adsecurity.org VMWare VCenter STS/adsmsVC01.adsecurity.org