冷知識 - NTLMv1 為什麼不安全?
1 |
最近接到資安通報要求嚴格落實只傳送 NTLMv2 回應政策。NTLMv2 自 NT 時代就有了,實務上從 Windows 7/Windows 2008 起(事實上是 Vista,但... 別說了,還是講 Windows 7 吧),Windows 預設就只傳送 NTLMv2 回應不支援 NTLMv1 以及 LM 協定,理由當然是 NTLMv1 及 LM 有安全疑慮。這點在舊文 Vista/Windows 7 無法登入網站及網路芳鄰已有說明。全面停用 LM 及 NTLMv1,使用本機或網域安全性原則強制套用是最方便的做法, 除非作業環境還存在史前時代只支援 LM/NTLMv1 的古老伺服器或客戶端,否則一律建議改成「只傳送NTMLv2回應。拒絕LM和NTLM」(Send NTLMv2 response only. Refuse LM & NTLM) 以加強安全。
回到「LM/NTLMv1 不安全」這個議題上,這幾天查了一些文章,吸收到一些原本不知的冷知識,整理筆記分享兼科普。
LM Authentication Protocol
LM 協定始於 1980 年代,是一種用於伺服器驗證身分的做法,其步驟為:
- 將密碼塞入長度以 7 個字元為倍數的區塊(不足部分補 0x0)
- 將小寫字元轉為大寫
- 對每個區塊進行 56bit DES 加密
- 將各區塊加密結果串接成字串
- 將加密結果送給伺服器驗證
加密後的密碼直接在網路上傳輸,字元一律轉大寫攻擊複雜度驟降,56bit DES 加密等級不高,1998 年代的古董個人電腦平均花六天可破解,現在隨便找支手機更是幾個小時內就能搞定,LM 的安全性脆弱如豆腐,故已早早被淘汰。
延伸閱讀:
NTLMv1
隨著 Windows NT 微軟推出了 NTLM 協定取代 LM,NTLM 曾改版過,故再區分為 NTLMv1 與 NTLMv2。
NTLM 有個革命性進化 - 改用挑戰與回應概念進行身分驗證:
- 客戶端送出一明碼使用者名稱給伺服器
- 伺服器回應一段隨機產生的數字(稱為 Challenge 或 Nonce),要求客戶端用 DES 加密它,這個動作稱之為挑戰(Challenge)
- 客戶端對密碼字串計算 MD4 雜湊值,另外產生 Client Nonce,以雜湊值為金鑰加密 Client Nonce + Server Nonce
- 客戶端將加密結果送交伺服器,這個過程稱為回應(Response)
- 伺服器將「使用者名稱+Challenge+Response」送交 Domain Controller(DC) 驗證真偽 (註: 這種轉向第三者求證的做法有個專有名詞叫 Pass-Through Authentication)
- DC 從 Security Account Manager 資料庫取得該帳號之密碼雜湊值,使用 DES 加密 Challenge,比對 Reponse 是否一致,判斷客戶端是否擁有正確密碼
不再直接在網路傳送加密密碼,NTLMv1 比 LM 協定安全許多,但存在兩個風險:
- NTMLv1 的 Challenge 固定為 16 bytes 亂數,透過側錄蒐集大量 Challenge 與 Response 建立考古題資料庫,一旦碰到曾出現過的結果,就可以背答案取分,騙過伺服器
- 上述做法要成功需累積龐大資料量並非易事,但 2012 年 Defcon 會議安全研究人員展示用專屬硬體快速破解 NTLMv1 DES 加密,才真正引發對 NTLMv1 安全性的疑慮,這意味駭客只需偷聽 Challenge Response,靠暴力破解終能取得密碼 MD4 雜湊值。
NTLMv1 在宣告可被暴力破解後,防線潰堤,隨著被公認為不夠安全,便是所有資安規範都建議強烈要求停用的原因。
延伸閱讀:
- A Closer Look at Pass the Hash, Part III: How NTLM Will Get You Hacked (and What You Should Do About It)
- Stop using LAN Manager and NTLMv1!
- Wiki - NT LAN Manager
NTLMv2
早在 NT4 SP4 時代推出的 NTLMv2,Challenge-Response 原理跟 NTLMv1 相同,但做了以下強化:
- Challenge 的隨機數字改為可變長度
- Response 加密對象為 Client Nonce + Server Nonce + Timestamp + Username + Target
- Response 加密演算法改用 HMAC-MD5,雖然有點古老,但已足以防禦當今的硬體(至少在量子電腦問市之前)
Challenge 長度可變與 Response 加入 Timestamp 可大幅降低蒐集考古題破解的風險;而 Response 變長及改用 HMAC-MD5 加密則讓暴力破解難度驟升,以當前的眼光來看,NTLMv2 的安全性可被接受。
Kerberose
講到 NTLM 不得不提一下 Kerberose。從 Windows 2000 起,微軟推出了 Kerberose,比起 NTLMv2,Kerberose 有以下優點:
- 客戶端向 Key Distribution Center, KDC 取得 Ticket,送交資源伺服器,資源伺服器單憑 Ticket 即可驗證 Client 身分,不像 NTLM 需連絡 DC 求證,驗證速度快
- 除了客戶端用 Ticket 向伺服器表明身分,伺服器也需出示 Ticket 向客戶端證明自己的合法性,認證是雙向的。在 NTLM 裡,身分認證僅限客戶端對伺服器單方向
- Kerberose 為開放標準(RFC 4120),NTLM 則被定位成微軟自家的專屬協定
- 資源伺服器可持客戶端 Ticket 向其他資料伺服器代表客戶端存取資源,稱為驗證委派 (例如:網站轉以該使用者身分登入 SQL)
- Kerberose 支援 IC 卡登入驗證
在 AD 網域環境,Windows 之間的驗證多已改用 Kerberos,與第三方平台系統接軌或客戶端無法連接 KDC (例如:透過防火牆以 AD 帳號登入 IIS)時才會改用 NTLMv2, 關於 Kerberose 的更多細節,有兩篇舊文可參考:關於IIS整合式Windows驗證的冷知識、Windows驗證歷程觀察與Kerberos/NTLM判別
延伸閱讀:
A survey of LM, NTLMv1, NTLMv2 and explaining why NTLMv1 is not secure.
Comments
# by travis
收穫良多,謝謝整理