最近接到資安通報要求嚴格落實只傳送 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 年代,是一種用於伺服器驗證身分的做法,其步驟為:

  1. 將密碼塞入長度以 7 個字元為倍數的區塊(不足部分補 0x0)
  2. 將小寫字元轉為大寫
  3. 對每個區塊進行 56bit DES 加密
  4. 將各區塊加密結果串接成字串
  5. 將加密結果送給伺服器驗證

加密後的密碼直接在網路上傳輸,字元一律轉大寫攻擊複雜度驟降,56bit DES 加密等級不高,1998 年代的古董個人電腦平均花六天可破解,現在隨便找支手機更是幾個小時內就能搞定,LM 的安全性脆弱如豆腐,故已早早被淘汰。

延伸閱讀:

NTLMv1

隨著 Windows NT 微軟推出了 NTLM 協定取代 LM,NTLM 曾改版過,故再區分為 NTLMv1 與 NTLMv2。

NTLM 有個革命性進化 - 改用挑戰與回應概念進行身分驗證:

  1. 客戶端送出一明碼使用者名稱給伺服器
  2. 伺服器回應一段隨機產生的數字(稱為 Challenge 或 Nonce),要求客戶端用 DES 加密它,這個動作稱之為挑戰(Challenge)
  3. 客戶端對密碼字串計算 MD4 雜湊值,另外產生 Client Nonce,以雜湊值為金鑰加密 Client Nonce + Server Nonce
  4. 客戶端將加密結果送交伺服器,這個過程稱為回應(Response)
  5. 伺服器將「使用者名稱+Challenge+Response」送交 Domain Controller(DC) 驗證真偽 (註: 這種轉向第三者求證的做法有個專有名詞叫 Pass-Through Authentication)
  6. DC 從 Security Account Manager 資料庫取得該帳號之密碼雜湊值,使用 DES 加密 Challenge,比對 Reponse 是否一致,判斷客戶端是否擁有正確密碼

不再直接在網路傳送加密密碼,NTLMv1 比 LM 協定安全許多,但存在兩個風險:

  1. NTMLv1 的 Challenge 固定為 16 bytes 亂數,透過側錄蒐集大量 Challenge 與 Response 建立考古題資料庫,一旦碰到曾出現過的結果,就可以背答案取分,騙過伺服器
  2. 上述做法要成功需累積龐大資料量並非易事,但 2012 年 Defcon 會議安全研究人員展示用專屬硬體快速破解 NTLMv1 DES 加密,才真正引發對 NTLMv1 安全性的疑慮,這意味駭客只需偷聽 Challenge Response,靠暴力破解終能取得密碼 MD4 雜湊值。

NTLMv1 在宣告可被暴力破解後,防線潰堤,隨著被公認為不夠安全,便是所有資安規範都建議強烈要求停用的原因。

延伸閱讀:

NTLMv2

早在 NT4 SP4 時代推出的 NTLMv2,Challenge-Response 原理跟 NTLMv1 相同,但做了以下強化:

  1. Challenge 的隨機數字改為可變長度
  2. Response 加密對象為 Client Nonce + Server Nonce + Timestamp + Username + Target
  3. Response 加密演算法改用 HMAC-MD5,雖然有點古老,但已足以防禦當今的硬體(至少在量子電腦問市之前)

Challenge 長度可變與 Response 加入 Timestamp 可大幅降低蒐集考古題破解的風險;而 Response 變長及改用 HMAC-MD5 加密則讓暴力破解難度驟升,以當前的眼光來看,NTLMv2 的安全性可被接受。

Kerberose

講到 NTLM 不得不提一下 Kerberose。從 Windows 2000 起,微軟推出了 Kerberose,比起 NTLMv2,Kerberose 有以下優點:

  1. 客戶端向 Key Distribution Center, KDC 取得 Ticket,送交資源伺服器,資源伺服器單憑 Ticket 即可驗證 Client 身分,不像 NTLM 需連絡 DC 求證,驗證速度快
  2. 除了客戶端用 Ticket 向伺服器表明身分,伺服器也需出示 Ticket 向客戶端證明自己的合法性,認證是雙向的。在 NTLM 裡,身分認證僅限客戶端對伺服器單方向
  3. Kerberose 為開放標準(RFC 4120),NTLM 則被定位成微軟自家的專屬協定
  4. 資源伺服器可持客戶端 Ticket 向其他資料伺服器代表客戶端存取資源,稱為驗證委派 (例如:網站轉以該使用者身分登入 SQL)
  5. 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

收穫良多,謝謝整理

Post a comment