一封郵件就能捕獲你的口令雜湊值
計算機通過軟體連線Web伺服器時通常預設選擇匿名方式。匿名連線失敗1次或多次後,往往就切換成用當前活躍登入憑證來嘗試連線。支援Windows整合驗證的計算機可能會以使用者的Windows身份驗證憑證自動登入。使用者根本察覺不到這一切。只有自動驗證失敗,使用者才會看到彈出的手動登入框。
自動化整合Windows身份驗證是很有必要的單點登入(SSO)功能,尤其是對本地資源和受信伺服器而言。該功能可使使用者在登入公司環境中不同伺服器時省去重複的登入憑證提交操作。當前主流瀏覽器絕大多數都不同程度地支援這一功能。
1990年代末,惡意黑客濫用該功能捕獲使用者的Windows身份驗證憑證。他們向用戶傳送電子郵件,誘使使用者點選其中連結(或促使其電子郵件客戶端祕密響應內嵌不可見單畫素Web信標),然後使用者的計算機就會悄悄連線上流氓伺服器了。只要Windows整合身份驗證功能開啟(通常都開啟的),使用者的計算機便會向流氓遠端Web伺服器傳送使用者的企業登入憑證。
事實上,傳送出去的是使用者的區域網管理器(LM)或 Windows NT LM 網路身份驗證挑戰響應,從中可以計算出使用者的LM或NT雜湊值。
微軟後來禁用了使用者用Windows身份驗證憑證向區域網外伺服器的預設傳送,在 IE 4 或 IE 5 時啟用了該新的預設傳送功能。如今,你可以開啟IE高階設定(網際網路選項->高階->啟用整合Windows身份驗證),勾選或取消該功能。很多人都認為這樣就阻止了上述攻擊。
但事實往往打臉,如今仍有很多方法可以誘使Windows(及其他支援Windows整合身份驗證的軟體程式,比如谷歌Chrome)向遠端伺服器傳送NTLM網路身份驗證挑戰。最起碼,以 file:////<serverhostaddress>/<anyfilename> 的格式嵌入一條連結即可,例如:file:////contoso.com/index.html。
將上述例子中的 contoso.com 替換成有效遠端伺服器域名,瀏覽器就會嘗試通過 TCP 445 埠上的NTLMv2連線(預設)向遠端伺服器發起SMB/NetBIOS驗證。如果開啟NetBIOS監聽,該監聽程序會以有效SMB/NetBIOS挑戰響應NTLMv2連線,伺服器便會獲得客戶端的NTLMv2挑戰響應,進而從中計算出使用者的NT雜湊值。剩下的就是破解該雜湊或者執行重放攻擊的事兒了。
除非禁止 TCP 445 端口出站流量,否則無論IE中Windows整合身份驗證設定是否勾選,結果都是一樣的——使用者NT雜湊值被獲取。
只要點選內嵌的 file://// 連結,使用者的NTLM響應挑戰確實會被髮送至遠端伺服器。這一攻擊適用於:
- 區域網和網際網路
- 補丁齊全但保持預設設定的系統
- Windows防火牆保持預設狀態的系統
- 本地SAM賬戶和活動目錄(AD)賬戶
遠端攻擊者將會獲得你的主機名、域名和NTLMv2挑戰響應,且大多數企業環境中都有效。這可真是個不幸的訊息。