前幾天Cylance發布了一個影響Windows系統的漏洞,攻擊者可以通過重定向到SMB協議的方式,利用“中間人攻擊”來盜取用戶認證信息。這個攻擊究竟是怎么回事?“重定向SMB”又是什么呢?電腦管家漏洞防御團隊對這些問題做了詳細的技術分析,現將分析結果分享給大家。
先簡單介紹一下這次事件的主角SMB。
SMB是對CIFS(Common Internet File System)協議的擴展,主要用于訪問網絡上的共享文件以及打印服務。SMB和其它協議的關系如下:
SMB可以直接使用TCP端口進行傳輸(端口445),也可以使用NetBIOS進行傳輸(TCP端口139)。以直接TCP端口傳輸為例,每一條SMB消息必須有一個4字節的包頭。包頭第一個字節為0(network byte order,下同),緊跟著的3字節表示SMB消息的長度;包體是變長的。
在windows vista以后,引入了SMB2協議,在原有的SMB協議基礎上擴展了部分字段。
SMB/SMB2認證有多種協議,使用最多的就是NTLM認證協議。
NTLM支持?Challenge/Response方式進行加密通信,安全認證的消息序列如下:
以Win7x86+IE11為例,看看IE如何處理HTTP返回的重定向請求。
IE獲得HTTP請求返回的狀態碼后,如果是代表重定向的301、302、303、307,跳轉到處理重定向的邏輯,調用CINetHttp::RedirectRequest處理重定向請求。
構造一個重定向到file協議的網頁
當IE訪問這個網頁時,可以抓到訪問SMB服務器的數據包
可見本機當前用戶的登錄憑證通過SMB2協議發送服務器進行認證了。如果這個服務器(上圖中的10.4.75.32)是被惡意劫持過的“中間人”,那么用戶的登錄憑證就泄漏了。
可能的攻擊方式不局限于網頁訪問,只要能夠劫持正常的HTTP網絡請求,就可以重定向到SMB協議將個人信息發送到惡意服務器上。
可以看到,重定向到SMB協議是一個很大的隱患,非用戶主動發起的SMB請求都應該禁止;通過SMB協議訪問外網共享服務器時也需要特別謹慎。
作為防范建議,可以關閉對TCP 139和445端口的訪問。如果確實需要訪問網絡上的共享文件或者是打印服務,在確認服務器可信的前提下,臨時打開TCP 139和445的端口訪問。