windows認證機制

哈希處理

Windows系統默認使用兩種方法對用戶的密碼進行哈希處理,它們分別是 LAN Manager(LM)哈希和 NT LAN Manager(NTLM)哈希。hash就是使用一種加密函數對其進行加密。這個加密函數對一個任意長度的字符串數據進行一次數學加密函數運算,然後返回一個固定長度的字符串。Windows加密過的密碼口令,我們稱之爲hash,Windows的系統密碼hash默認情況下一般由兩部分組成:第一部分是 LM-hash,第二部分是 NTLM-hash。在windows2000以後的系統中,第一部分的LM-hash 都是空值,因爲LM-hash可以很容易的破解,所以windows2000之後這個值默認爲空,所以第二部分的NTLM-hash才真正是用戶密碼的哈希值。現在已經有了更新的NTLM v2以及Kerberos驗證體系。

LM-hash

LAN Manager(LM)哈希是Windows系統所用的第一種密碼哈希算法。它只有唯一一個版本且一直用到NTLAN Manager(NTLM)哈希的出現,NTLM哈希用Windows 2000及其之後系統中。新版操作系統因兼容緣故仍然支持LM哈希算法。但是在Windows Vista和Windows 7 開始,LM-hash是默認關閉的。
LM加密過程
口令大寫
轉換爲HEX(十六進制)
用0補齊14字節(112bit)
兩組分組
每組7字節HEX轉爲二進制,每7bit一組末尾加0,再轉換成十六進制組成得到2組8字節的編碼
兩組8字節編碼,分別作爲DES加密key爲字符串“KGS!@#$% ”進行加密
兩組DES加密後的編碼拼接

NTLM-hash

New Technology LAN Manager(NTLM)哈希算法是微軟認可的另一種算法。Windows2000以後的 windows 系統都是用 NTLM-hash 處理用戶的密碼。在滲透測試中,通常可從windows系統中的SAM文件和域控的NTDS.dit文件中獲得所有用戶的hash,通過mimikatz讀取lsass.exe進程能獲得已登陸用戶的NTLM hash。
NTLM加密過程
密碼換成HEX
HEX字符串進行ASCII轉Unicode
Unicode字符串進行標準MD4單向哈希加密
NTLM認證

客戶端發起認證請求
服務端收到認證請求,向客戶端發送隨機數(chanlleng/挑戰)
客戶端使用NTLM Hash打亂該隨機數,生成Net-NTLM Hash,發送回服務端 (這裏會造成pth攻擊)

kerberos協議

在域環境中,Kerberos協議被用來作身份認證,下圖是詳細的認證過程:
在這裏插入圖片描述

KDC(Key Distribution Center):密鑰分發中心裏面包含兩個服務:AS和TGS
AS(Authentication Server):身份認證服務
TGS(Ticket Granting Server):票據授予服務
TGT(Ticket Granting Ticket):由身份認證服務授予的票據,用於身份認證,存儲在內存,默認有效期爲10小時
Pass The Ticket:如果我們能夠拿到用戶的TGT,並將其導入到內存,就可以冒充該用戶獲得其訪問權限

詳細認證過程,分爲三個步驟:
第一:從AS服務器中獲取TGT票據
用戶在客戶端輸入賬號和密碼之後,會對密碼進行hash處理,作爲user-secret-key

  1. 客戶端將用戶名發送給AS服務器申請服務,在AS服務器中會對用戶名進行驗證,在AS服務器本地數據庫中查詢到該用戶名的密碼,並使用hash生成user-secrect-key.
  2. AS服務器向用戶發送兩樣東西:
    1) Client/TGS會話密鑰,使用user-secrect-key進行加密
    2) TGT,包含TGS會話密鑰,用戶信息,時間戳,TGT有效期。使用TGS密鑰進行加密
  3. 用戶接收到消息之後,會使用本地的user-secret-key對消息1)進行解密,如果解密成功,說明用戶提供的憑證是正確的,此時用戶得到了加密後的TGT。

第二:從TGS服務器中獲取訪問權限

  1. 客戶端向TGS服務器發送信息:
    1) 第一步驟中的TGT
    2) 認證信息(認證符(Authenticator)),包含用戶id以及時間戳,通過TGS會話密鑰進行加密。
  2. TGS服務器收到消息之後,會使用TGS密鑰對消息1)進行解密,獲取到TGS會話密鑰,進而對消息2)進行解密,在對用戶id以及時間戳進行認證,如果認證成功,向客戶端發送消息:
    1) client-server-ticket(包含SS會話密鑰,用戶名信息以及時間戳),使用ss密鑰進行加密
    2) ss會話密鑰使用TGS會話密鑰進行加密
  3. 客戶端收到信息之後會對消息2)進行解密,獲得ss會話密鑰。

第三:訪問服務

  1. 客戶端向ss服務器發送以下消息:
    1)第二步驟中的client-server-ticket
    2)新的Authenticator,包含用戶信息,時間戳。通過SS會話密鑰進行加密
  2. SS服務器收到消息之後,會使用ss密鑰對消息1)進行解密,解密之後使用ss會話密鑰對消息2)解密,解密成功之後會得到authenticator,認證之後,發送:
    1)新時間戳,Client發送的時間戳加1,通過ss會話密鑰進行加密
  3. 客戶端收到時間戳之後,解密確認,成功之後發送服務請求
  4. ss服務器收到之後提供服務。
發佈了111 篇原創文章 · 獲贊 36 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章