Active Directory 身分驗證概述
Active Directory 身分驗證概述
NTLM Authentication
主要發生在兩個環境
- 使用者用 IP 向伺服器進行驗證(非透過主機名稱)
- 嘗試向未在 AD 整合的 DNS 伺服器上註冊主機名稱
NTLM 身分驗證協定由七個步驟組成如下圖
- 1. Client 端演算出 NTLM 雜湊 HASH
- 2. Client 端送出 Username
- 3. 伺服器端回應 Nonce (Nonce 稱為隨機值或質詢的隨機值)
- 4. 使用者端用 NTLM Hash 加密 Nonce 稱為 Response
- 5. 伺服器端將使用者名稱與 Nonce 以及 Response 送到身分驗證伺服器
- 6. 身分驗證伺服器依據該使用者的名稱對應的密碼雜湊加密 nonce 並比對 Response
- 7. 確認 Response 比對無誤回應伺服器 Approve Authentication
NTLM Hash 在密碼長度不強的狀況下已經可以快速破解
練習 1 : 計算機根據使用者密碼計算出的加密雜湊函數的名稱是什麼?
Ans : NTLM
練習 2 : NTLM 是什麼樣的雜湊演算法?
Ans : fast-hashing
Kerberos Authentication
NTLM 驗證透過質詢和回應範例進行工作,而基於 Windows 的 Kerberos 驗證則使用票證系統
這兩個協定(基於底層系統)之間的一個關鍵差異是,使用 NTLM 驗證時,用戶端會使用應用程式伺服器本身啟動驗證過程,如 NTLM 介紹一樣,驗證是伺服器負責與身分驗證伺服器確認
Kerberos 用戶端身份驗證涉及使用充當金鑰分發中心(KDC) 角色的網域控制站
客戶端使用 KDC 而不是應用程式伺服器啟動身份驗證過程。KDC 服務在每個網域控制站上執行,負責為使用者和電腦提供會話票證和臨時會話金鑰,如下圖所示
- 1. Client 告知 DC 要伺服器的驗證存取 (AS-REQ,使用雜湊加密時間戳記)
驗證伺服器請求 (AS-REQ) 會傳送到網域控制器。充當 KDC 的網域控制站也維護身份驗證伺服器服務。AS-REQ 包含一個時間戳,該時間戳記使用從使用者的密碼及其使用者名稱派生的雜湊進行加密。
當網域控制器收到請求時,它會在 ntds.dit 檔案中尋找與特定使用者關聯的密碼雜湊,並嘗試解密時間戳記。如果解密過程成功且時間戳記不重複,則認為身份驗證成功。
如果時間戳重複,則可能表示存在潛在重播攻擊的證據。
- 2. DC 回應 Authentication Reply (AS-REP,DC 用使用者密碼雜湊解密時間戳記)
AS-REP 包含會話金鑰和票證授予票證(TGT)。會話金鑰使用使用者的密碼雜湊進行加密,並且可以由客戶端解密然後重新使用。TGT 包含有關使用者、網域、時間戳記、客戶端 IP 位址和會話金鑰的資訊
為了避免篡改,TGT 使用只有 KDC 知道的金鑰(krbtgt 帳戶的 NTLM 雜湊)進行加密,且用戶端無法解密。一旦客戶端收到會話金鑰和 TGT,KDC 就認為客戶端身份驗證完成。預設情況下,TGT 的有效期為 10 小時,之後會進行續訂。此續訂不需要用戶重新輸入密碼
當使用者希望存取網域資源(例如網路共用或郵箱)時,必須再次聯絡 KDC
- 3. Client 送出 Ticket Request (TGS-REQ,其中包含目前使用者和使用會話金鑰加密的時間戳記、資源名稱以及加密的 TGT)
- 4. DC 回應 Ticket Reply
KDC 上的票證授予服務接收 TGS-REQ,如果該資源存在於網域中,則使用只有 KDC 知道的金鑰對 TGT 進行解密。然後從 TGT 中提取會話金鑰並用於解密請求的使用者名稱和時間戳記。此時 KDC 會執行多項檢查:
- TGT 必須具有有效的時間戳記。
- TGS-REQ 中的使用者名稱必須與 TGT 中的使用者名稱相符。
- 客戶端IP位址需要與TGT IP位址一致。
如果此驗證過程成功,票證授予服務將使用票證授予伺服器回應 (TGS-REP) 來回應用戶端。該資料包包含三個部分:
- 已授予存取權限的服務的名稱。
- 在客戶端和服務之間使用的會話金鑰。
- 包含使用者名稱和群組成員身分以及新建立的會話金鑰的服務票證。
服務票證的服務名稱和會話金鑰使用與 TGT 建立相關的原始會話金鑰進行加密。服務票證使用在相關服務中註冊的服務帳戶的密碼雜湊進行加密。
一旦 KDC 的身份驗證過程完成且用戶端擁有會話金鑰和服務票證,服務身份驗證才會開始
- 5. Client 送出伺服器存取需求
用戶端向應用程式伺服器發送應用程式請求(AP-REQ),其中包括使用與服務票證關聯的會話金鑰加密的使用者名稱和時間戳記以及服務票證本身
- 6. 伺服器回應服務驗證
應用程式伺服器使用服務帳戶密碼雜湊來解密服務票證,並提取使用者名稱和會話金鑰。然後它使用後者從AP-REQ中解密使用者名稱。如果AP-REQ使用者名稱與從服務票據解密的使用者名稱匹配,則請求被接受。在授予存取權限之前,服務會檢查服務票據中提供的群組成員身份,並向使用者指派適當的權限,之後使用者可以存取所要求的服務
練習 1 : 使用者登入加入 AD 的電腦時發送的請求的名稱是什麼?
Ans : AS-REQ
練習 2 : Active Directory 使用的主要驗證協定是什麼?
Ans : Kerberos
練習 3 : 客戶端發送的加密 TGT 以及當前使用者、目標資源和時間戳記的請求的短名稱是什麼?
Ans : TGS-REQ
Cached AD Credentials
在現代版本的 Windows 中,Kerberos 雜湊值儲存在本機安全機構子系統服務(LSASS) 記憶體空間中,操作是存取他們並破解獲取明碼,破解不了才是思考 PtH 操作手法
LSASS 存取需要 SYSTEM 或本機管理員權限才能存取雜湊值,都是使用 Mimikatz 來完成
由於 Mimikatz 的主流流行度和眾所周知的檢測簽名,請考慮避免將其用作獨立應用程序,而應使用防毒規避模組中討論的方法。例如,使用 PowerShell 等注入器直接從記憶體執行
或使用任務管理器等內建工具轉儲整個 LSASS 進程內存,將轉儲的資料移至輔助機器(例如 Kali),然後將資料載入 Mimikatz 中
已知帳號密碼 jeff / HenchmanPutridBonbon11 與靶機 Client75,網域 corp.com
RDP 登入 Client75└─$ xfreerdp /u:jeff /p:HenchmanPutridBonbon11 /d:corp.com /v:192.168.240.75
啟動 Mimikatz.exe 然後輸入 privilege::debug (目的是使用 SeDebugPriviege 權限)
補充說明 SeDebugPriviege 可以參考如下連結,目的是調用其他帳戶的進程記憶體
https://learn.microsoft.com/zh-tw/windows/win32/secauthz/privilege-constants?redirectedfrom=MSDN
接著用模組 Sekulsa,目的是轉儲登入的使用者憑證,指令 sekurlsa::logonpasswords
jeff 的快取雜湊值如下
* NTLM : 2688c6d2af5e9c7ddb268899123744ea
* SHA1 : f57d987a25f39a2887d158e8d5ac41bc8971352f
dave 的快取雜湊值如下
* NTLM : 08d7a47a6f9f66b97b1bae4178747494
* SHA1 : a0c2285bfad20cc614e2d361d6246579843557cd
會需要 NTLM & SHA1 兩種雜湊值的原因將根據 AD 實現的功能等級而有所不同。對於 Windows 2003 功能層級的 AD 實例,NTLM 是唯一可用的雜湊演算法。對於執行 Windows Server 2008 或更高版本的實例,NTLM 和 SHA-1(AES 加密的常見伴侶)可能都可用。在 Windows 7 等較舊的作業系統或手動設定的作業系統上,將啟用 WDigest 。啟用 WDigest 後,執行 Mimikatz 將顯示明文密碼以及密碼雜湊值。
hashcat 查一下格式與開始破解吧
└─$ hashcat --help | grep -i "ntlm"
跑不出來,但另一個 dave 的 hash 就解出來了,密碼是 Flowers1
接下來開啟另外一個 Powershell 然後存取 dir \\web04.corp.com\backup
因為是透過名稱去存取,所以將創建並快取服務票證
接著回到 mimikatz 輸入 sekurlsa::tickets 將記憶體中的服務票證 dump 出來
我們要的是這個,jeff 的帳號去存取 web04 的 TGS & TGT
輸出顯示 TGT 和 TGS。竊取 TGS 將使我們只能存取與這些票證相關的特定資源。或者,借助 TGT,我們可以為我們想要在網域內定位的特定資源請求 TGS
在介紹針對 AD 身分驗證機制的攻擊之前,我們先簡單探討AD 中公鑰基礎設施(PKI) 的使用。Microsoft 提供 AD 角色Active Directory 憑證服務(AD CS) 來實作 PKI,在經過驗證的使用者和可信任資源之間交換數位憑證。
如果伺服器是作為憑證授權單位(CA) 進行安裝,它可以頒發和撤銷數位憑證(以及更多憑證)。雖然對這些概念的深入討論需要自己的模組,但讓我們專注於與 AD CS 相關的快取和儲存物件的一個方面。
例如,我們可以為 Web 伺服器頒發憑證以使用 HTTPS 或透過智慧卡根據 CA 的憑證對使用者進行身份驗證。
出於安全原因,這些憑證可以被標記為具有不可匯出的私鑰 。如果是這樣,即使具有管理權限也無法匯出與憑證關聯的私鑰。但是,有多種方法可以匯出帶有私鑰的憑證。
我們可以再次依靠 Mimikatz 來實現這一目標。crypto 模組包含使用crypto::capi 修補 CryptoAPI 函數 或使用 crypto::cng 21修補 KeyIso 服務的功能,使不可匯出的金鑰可導出。
練習 : 檢索快取的 NTLM 雜湊。此外,執行dir命令並列出快取的票證。用於轉儲登入目前系統的所有使用者的雜湊值的 Mimikatz 命令是什麼?
Ans : sekurlsa::logonpasswords
留言
張貼留言