什么是SAM
SAM:
安全帳戶管理器(Security Accounts Manager), SAM 是Windows操作系統管理用戶帳戶的安全所使用的一種機制。用來存儲 Windows 操作系統密碼的數據庫文件,為了避免明文密碼泄漏SAM文件中保存的是明文密碼在經過一系列算法處理過的Hash值被保存的Hash分為LMHash、NTLMHash。當用戶進行身份認證時會將輸入的Hash值與SAM文件中保存的Hash值進行對比。
SAM文件保存於 %SystemRoot%\system32\config\sam 中,在注冊表中保存在 HKEY_ LOCAL_MACHINE\SAM\SAM,HKEY_ LOCAL _MACHINE\SECURITY\SAM 。在正常情況下SAM文件處於鎖定狀態不可直接訪問、復制、移動,僅有system用戶權限才可以讀寫該文件。
windows本地認證:
本地用戶認證
Windows在進行本地登錄認證時操作系統會使用用戶輸入的密碼作為憑證去與系統中的密碼進行對比驗證。通過 winlogon.exe 接收用戶輸入傳遞至 lsass.exe 進行認證。
winlogon.exe用於在用戶注銷、重啟、鎖屏后顯示登錄界面。 Isass.exe 用於將明文密碼變成NTLM Hash的形式與SAM數據庫比較認證。
LM Hash
全稱是 LAN Manager Hash,windows 最早用的加密算法,由 IBM 設計。
目前大多數的Windows都采用NTLM協議認證,LM協議已經基本淘汰了。LM協議的脆弱之處在於:
1.des的key是固定的,有了Key就能夠解出原文。
2.可以根據 hash 判斷密碼長度是否大於7位,如果密碼強度是小於7位,那么第二個分組加密后的結果肯定是aad3b435b51404ee
3.密碼不區分大小寫並且長度最大為14位
4.7+7字符分開加密明顯復雜度降低14個字符整體加密 957+957<9514
NTLM Hash與NTLM
在Windows中,密碼Hash目前稱之為NTLM Hash,其中NTLM全稱是:“NT LAN Manager”。
NTLM Hash的產生
1.先將用戶的密碼轉化為十六進制格式。
2.將十六進制格式的密碼進行 Unicode 編碼。
3.使用 MD4 摘要算法對 Unicode 編碼數據進行 Hash 計算。
假設我的密碼是admin,那么操作系統會將admin轉換為十六進制,經過Unicode轉換后,再調用MD4加密算法加密,這個加密結果的十六進制就是NTLM Hash。
1 admin -> hex(16進制編碼) = 61646d696e 2 61646d696e -> Unicode = 610064006d0069006e00 3 610064006d0069006e00 -> MD4 = 209c6174da490caeb422f3fa5a7ae634
本地認證流程
winlogon.exe -> 接收用戶輸入 -> lsass.exe -> (認證)
首先,用戶注銷、重啟、鎖屏后,操作系統會讓winlogon顯示登錄界面,也就是輸入框,winlogon接收輸入后,將密碼交給lsass進程,這個進程中會存一份明文密碼,將明文密碼加密成NTLM Hash,對SAM數據庫比較認證。
網絡認證
在內網滲透中,經常遇到工作組環境,而工作組環境是一個邏輯 上的網絡環境(工作區),隸屬於工作組的機器之間無法互相建 立一個完美的信任機制,只能點對點,是比較落后的認證方式, 沒有信托機構。
假設A主機與B主機屬於同一個工作組環境,A想訪問B主機上的資料,需要將一個存在於B主機上的賬戶憑證發送至B主機,經過認證才能夠訪問B主機上的資源。
這是我們接觸比較多的SMB共享文件的案例,SMB的默認端口是445。
早期SMB協議在網絡上傳輸明文口令。后來出現 LAN Manager Challenge/Response 驗證機制,簡稱LM,它是如此簡單以至很容易就被破解,現在又有了NTLM以及Kerberos。
這個協議只支持Windows。
Challenge/Response
NTLM的認證過程分為三步:type1(協商),type2(質詢),type3(身份驗證)
1、用戶登錄客戶端電腦
2、(type 1)客戶端向服務器發送type 1(協商)消息,它主要包含客戶端支持和服務器請求的功能列表。
3、(type 2)服務器用type 2消息(質詢)進行響應,這包含服務器支持和同意的功能列表。但是,最重要的是,它包含服務器產生的Challenge。
4、(type 3)客戶端用type 3消息(身份驗證)回復質詢。用戶接收到步驟3中的challenge之后,使用用戶的 NTLM hash對challenge進行加密運算得到response,將response,username,challeng發給服務器。消息中的response是最關鍵的部分,因為它們向服務器證明客戶端用戶已經知道帳戶密碼。
5、服務器拿到type 3之后,使用用戶 hash 加密 challenge 得到response2,與 type 3發來的 response 進行比較。如果用戶hash是存儲在域控里面的話,那么沒有用戶hash,也就沒辦法計算response2。也就沒法驗證。這個時候用戶服務器就會 通過netlogon協議聯系域控,建立-個安全通道然后將type 1,type 2,type3 全部 發給域控(這個過程也叫作Pass Through Authentication認證流程)
6、域控使用challenge和用戶hash進行加密得到response2,與type 3的response進行比較。
注意:
NTLM V2協議
NTLM v1與NTLM v2最顯著的區別就是 Challenge 與加密算法不同,共同點就是加密的原料都是NTLM Hash。
下面細說一下有什么不同:
