深入理解Win認證分享
本地認證基礎知識
在本地登錄Windows的情況下,操作系統會使用用戶輸入的密碼作為憑證去與系統中的密碼進行驗證,但是操作系統中的密碼存儲在
%SystemRoot%\system32\config\sam
當我們登錄系統的時候,系統會自動地讀取SAM文件中的“密碼”與我們輸入的“密碼”進行比對,如果相同,證明認證成功!
Windows本身不保存明文密碼,只保留密碼的Hash
NTLM Hash與NTLM
Windows中,密碼Hash目前稱之為NTLM Hash,其中NTLM全稱是:“NT LAN Manager”。
這個NTLM是一種網絡認證協議,與NTLM Hash的關系就是:NTLM網絡認證協議是以NTLM Hash作為根本憑證進行認證的協議。
也就是說,NTLM與NTLM Hash相互對應。
在本地認證的過程中,其實就是將用戶輸入的密碼轉換為NTLM Hash與SAM中的NTLM Hash進行比較。
NTLM Hash的產生
假設我的密碼是admin,那么操作系統會將admin轉換為十六進制,經過Unicode轉換后,再調用MD4加密算法加密,這個加密結果的十六進制就是NTLM Hash。
admin -> hex(16進制編碼) = 61646d696e
61646d696e -> Unicode = 610064006d0069006e00
610064006d0069006e00 -> MD4 = 209c6174da490caeb422f3fa5a7ae634
>>> from passlib.hash import nthash
>>> h = nthash.hash('admin')
>>> h
'209c6174da490caeb422f3fa5a7ae634'
本地認證流程
winlogon.exe -> 接收用戶輸入 -> lsass.exe -> (認證)
首先,用戶注銷、重啟、鎖屏后,操作系統會讓winlogon顯示登錄界面,也就是輸入框,接收輸入后,將密碼交給lsass進程,這個進程中會存一份明文密碼,將明文密碼加密成NTLM Hash,對SAM數據庫比較認證。
?Windows Logon Process(即 winlogon.exe),是Windows NT 用戶登 陸程序,用于管理用戶登錄和退出。
?LSASS用于微軟Windows系統的安全機 制。它用于本地安全和登陸策略
LM Hash
在NTLM協議問世之前,它對前身就是LM(LAN Manager)協議。
LM與NTLM協議的認證機制相同,但是加密算法不同。
目前大多數的Windows都采用NTLM協議認證,LM協議已經基本淘汰了。
LM協議認證過程中需要LM Hash作為根本憑證進行參與認證
1.下面就簡述一些LM Hash的產生:
(1)將所有小寫字母轉換為大寫字母
? >123ABC // 未達到7個字符
? 將密碼轉化為16進制,分兩組,填充為14個字符,空余位使用0x00字符填補
? >31323341424300000000000000
? 將密碼分割為兩組7個字節的塊
? >31323341424300 00000000000000 // 16進制
? 將每組轉化為比特流,不足56Bit則在左邊加0
? >31323341424300 ->(轉換為二進制) 110001001100100011001101000001010000100100001100000000-> (補 足56Bit) 00110001001100100011001101000001010000100100001100000000
? 將比特流按照7比特一組,分出8組,末尾加0
(2)由于后者都為0,結果可想而知,那就都是0
? 將每組比特流轉換為16進制作為被加密的值,使用DES加密,字符串 “KGS!@#$%”為Key(0x4B47532140232425),得到8個結果 ,每個 結果轉換為16進制。
? -> 00110000100110001000110001101000000101000001001000001100 00000000
? ->30988C6814120C00 -> DES(30988C6814120C00) -> 48-D7-EB-91- 2F-5E-69-7C
? 由于我們的密碼不超過7字節,所以后面的一半是固定的:
? AA-D3-B4-35-B5-14-04-EE
? 連接兩個DES加密字符串。這是LM哈希。
? 48-D7-EB-91-2F-5E-69-7C-AA-D3-B4-35-B5-14-04-EE
在上面的產生過程中,脆弱點就在于DES的Key(KGS!@#$%)是固定的,也就是說,有了Key就能夠解出原文。
2.LM Hash問題:
?口令不區分大小寫
?口令長度最大為14字節,另外如果口令長度不超過7字節,則LM Hash的后8字節是固定值
?DES算法強度不夠
?根據LM Hash特征,也能夠判斷用戶的密碼是否是大于等于7位。
網絡認證
假設A主機與B主機屬于同一個工作組環境,A想訪問B主機上的資料,需要將一個存在于B主機上的賬戶憑證發送至B主機,經過認證才能夠訪問B主機上的資源。
我們接觸比較多的SMB共享文件,SMB的默認端口是445。
早期SMB協議在網絡上傳輸明文口令。后來出現 LAN Manager Challenge/Response 驗證機制,簡稱LM,它是如此簡單以至很容易就被破解,現在又有了NTLM以及Kerberos
LAN Manager Challenge/Response
LAN Manager Challenge/Response 驗證機制,簡稱LM。該方案比NTLM響應時間更早,安全性更低。
SMB通信,Client A訪問Server B通過LM身份驗證的過程
首先我們假設Server B的密碼為 "WELCOME" , Server B已經緩存了密碼的LM-HASH (原始密碼在任何情況下都不能被緩存) 我們通過上面的腳本計算"WELCOME"的LM-HASH為 "c23413a8a1e7665faad3b435b51404ee"
Server B -- 8bytes Challenge --> Client A
Server B向Client A發送了一個8字節挑戰"0001020304050607"
Client A會根據自己的訪問Server B的密碼明文計算并緩存密碼的LM-HASH(Client A緩存輸入密碼的哈希值,原始密碼會被丟棄,“原始密碼在任何情況下都不能被緩存”,這是一條基本的安全準則) -然后在LM-HASH后加5個0x00變成 "c23413a8a1e7665faad3b435b51404ee0000000000" ,變為21字節,然后劃分成三組,每組7字節
| C23413A8A1E766 | 5FAAD3B435B514 | 04EE0000000000 |
每組7字節做為參數傳遞給str_to_key()函數,最終得到三組DESKEY,每組8字節
| C21A04748A0E9CCC | 5ED4B47642ACD428 | 0476800000000000 |
分別用三組DESKEY對8字節挑戰 "0001020304050607" 進行標準DES加密后得到
C21A04748A0E9CCC ---- 對0001020304050607進行標準DES加密 --> CA1200723C41D577
5ED4B47642ACD428 ---- 對0001020304050607進行標準DES加密 --> AB18C764C6DEF34F
0476800000000000 ---- 對0001020304050607進行標準DES加密 --> A61BFA0671EA5FC8
Client A最終獲得一個24字節響應應"CA1200723C41D577AB18C764C6DEF34FA61BFA0671EA5FC8"(這個結果被稱為response)
Client A 將"CA1200723C41D577AB18C764C6DEF34FA61BFA0671EA5FC8" 送往Server B,Server B會根據自己緩存的LM-HASH進行同樣的計算,并將計算結果與來自A的響應進行比較,如果匹配則身份驗證通過
C = 8-byte server challenge
K1 | K2 | K3 = LM-Hash | 5-bytes-0
response = DES(K1, C) | DES(K2, C) |? DES(K3, C
NTLM 協議
NTLM是一種網絡認證協議,它是基于挑戰(Chalenge)/響應(Response)認證機制的一種認證模式。
這個協議只支持Windows Chalenge/Response
NTLM協議的認證過程分為三步:
1.協商:主要用于確認雙方協議版本(NTLM v1/NTLM V2)
2.質詢:就是挑戰(Chalenge)/響應(Response)認證機制起作用的范疇。
質詢的完整過程:
(1)客戶端向服務器端發送用戶信息(用戶名)請求
(2)服務器接受到請求,生成一個16位的隨機數,被稱之為“Challenge”, 使用登錄用戶名對應的NTLM Hash加密Challenge(16位隨機字符), 生成Challenge1。同時,生成Challenge1后,將Challenge(16位隨機 字符)發送給客戶端。
(3)客戶端接受到Challenge后,使用將要登錄到賬戶對應的NTLM Hash加密Challenge生成Response,然后將Response發送至服務器端。
其中,經過NTLM Hash加密Challenge的結果在網絡協議中稱之為Net NTLM Hash。
3.驗證:驗證主要是在質詢完成后,驗證結果,是認證的最后一步。
驗證的完整過程:: 服務器端收到客戶端的Response后,比對Chanllenge1與Response是否相等,若相等,則認證通過
NTLM v1與NTLM v2最顯著的區別就是Challenge與加密算法不同,共同點就是加密的原料都是NTLM Hash。
(1)Challage:NTLM v1的Challenge有8位,NTLM v2的Challenge為16位。
(2)Net-NTLM Hash:NTLM v1的主要加密算法是DES,NTLM v2的主要加密算法是HMAC-MD5。
挑戰響應級別配置
gpedit.msc,設置之后通過gpupdate命令使其立即生效
Windows 2000 以及 Windows XP: 發送 LM & NTLM 響應
Windows Server 2003: 僅發送 NTLM 響應
Windows Vista、Windows Server 2008、Windows 7 以及 Windows Server 2008 R2: 僅發送 NTLMv2 響應
Windows10、Windows Server2016、Windows Server2019:僅發送NTLMv2響應。拒絕LM\僅發送NTLMv2響應。拒絕_LM和NTLM(&)
Shell Windows 通用安全
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。