新思科技發現D-Link無線路由器存在漏洞,可繞過加密
作者: 新思科技首席安全專家 Tuomo Untinen
D-Link DIR-850L最初於2013年釋出,專為消費市場設計。它有兩個硬體版本,其中版本A在早前被發現存在安全漏洞。
作為Defensics SafeGuard開發的一部分,我們發現了D-Link DIR-850L無線AC路由器(硬體修訂版本A)中的漏洞。該漏洞使攻擊者無需提供憑據即可完全訪問無線網路。我們的方法在接入點連線期間跳過關鍵步驟,完全繞過加密。
在確定此漏洞後,新思科技繼續與芬蘭國家網路安全中心(NCSC-FI)協調披露事宜,編號為CVE-2018-18907。我們與D-Link合作重現了這個漏洞問題。在2018年11月6日,D-Link已經為受影響的裝置提供了修復方案。
WPA2是用於客戶端和接入點(AP)之間的WLAN網路通訊的加密技術。為了相互連線,AP和客戶端都需要知道預共享金鑰(PSK),它們在WPA握手過程中交換,隨後在它們之間開啟加密通道。
通常,破壞WPA2加密需要在AP和客戶端(也稱為請求者)上執行無線捕獲,其中握手過程完全可見,或者僅從AP獲取對偶主金鑰識別符號(PMKID)。完成此操作後,您將獲得強制WPA2 PSK所需的所有信息。獲取PSK所需的時間取決於硬體和PSK長度。但有時候通過WPA2加密需要一點運氣,這往往不到一秒鐘。
辦公室日常工作
2018年8月初,我正在為新思科技的Defensics解決方案完成新版本的測試套件,該解決方案為各種協議提供模糊測試。模糊測試是一種測試方法,測試工具傳送格式錯誤的輸入以發現軟體中潛在的安全漏洞。這種包含意外或無效資料的格式錯誤的輸入稱為異常測試用例。
我最後新增到測試套件中的資訊包括一些新的異常測試用例和SafeGuard結果。 SafeGuard是一項專利功能,允許Defensics識別違反規範或最佳實踐的情況 —— 例如,當被測系統(SUT)選擇弱加密方案時,或者以明文形式傳送身份驗證憑據時。
SafeGuard與模糊測試有何不同?
新版本的Defensics 802.11測試套件包含兩項重要改進。
第一,WPA2握手後資料幀的WPA2加密。之前的版本僅計算會話的臨時金鑰,而且可以將此資訊寫入檔案。這允許測試人員驗證Defensics和SUT都具有相同的臨時金鑰。但是傳送加密資料幀會自動測試正確的金鑰,因為兩端的加密和解密需要知道金鑰。
第二個改進是在IPv4上簡單的動態主機設定協議(DHCP)發現報文序列。此DHCP序列驗證SUT是否接收資料幀並檢查響應。由於DHCP本身非常複雜,我首先在沒有加密的情況下實現它,並且在DHCP序列工作之後,在測試中添加了WPA2 AES CCMP加密。
測試發現
我當時正在為WPA1新增一個弱加密SafeGuard,因為已知WPA1有弱點而且不應該使用。 WEP加密也是如此:它不應該再被使用了。 Defensics 802.11測試套件那時具有弱加密檢測功能,我運行了幾個案例來測試它,正巧我桌面上有AP,即D-Link DIR-850L。我以為會檢測到弱加密,因為我已經將SUT AP配置為擁有WPA1而沒有其它任何設定。
正如我所預測的一樣,Defensics正確地檢測到弱加密。但是AP接受了沒有WPA加密的DHCP發現序列。此特定測試用例本應經過協商以使用WPA1加密,但它不包含實際加密:DHCP發現序列以明文形式傳送給AP。我對此測試結果感到驚訝,因為路由器應該需要WPA1加密。然後我使用Wireshark,一種捕獲無線資料幀的工具,重新執行測試用例並檢查結果。
在結果中,我看到了AP給Defensics提供的IP地址、路由器IP地址、租用時間等。發現序列再次以明文傳送。然後我將加密從WPA1更改為WPA2,看看是否會對SUT行為產生影響。同樣,發現序列仍以明文形式傳送,因此這出現了問題。 AP還支援WPA Enterprise,並且在該模式下的測試沒有改變行為 – 序列仍以明文形式傳送。
分析
當然,下一個問題是發生了什麼,為什麼呢?連線到AP分兩個階段完成。首先,客戶端和AP就連線引數和要使用的加密達成一致;其次,執行所謂的WPA握手或四次握手,交換加密引數並確保它們都具有PSK。在此之後,他們開啟加密資料連線。但是,我執行的測試用例跳過了WPA握手,因此必須在握手之前發生什麼,AP和客戶端就連線引數和使用的加密達成一致。
第一階段包括探測請求和響應、身份驗證請求和響應,最後是關聯請求和響應。探測請求的主要目的只是發現AP。然後,探測響應包含有關AP的所有資訊,包括支援哪種加密。
下一個請求 – 響應對是身份驗證,其目的是確保向後相容性。接下來是關聯請求和響應。在關聯請求中,客戶端告訴AP哪個是它想要的加密以及使用哪些引數。關聯請求還會開啟AP和客戶端之間的資料連線。
我執行的測試用例有一個正常的探測請求和身份驗證請求。然後,關聯請求需要客戶端支援WPA1加密。此時,WPA握手應該發生,但由於我的測試用例跳過了握手,AP和客戶端開始傳送沒有任何加密的資料幀。
漏洞利用
從沒有憑據的受保護網路獲取IP地址已經是件壞事,但是還會更糟糕嗎?我決定為此漏洞建立漏洞利用程式。我的想法是建立一個自定義版本的wpa_supplicant(Linux作業系統中的預設WLAN客戶端)。
首先,我嘗試修改wpa_supplicant,以便它只是忽略WPA握手,但事實證明這非常困難。檢查太多,無法確保WPA狀態機處於正確狀態。這證實我試圖做的事情並不常見。我嘗試的下一件事是在沒有加密的情況下建立連線,但修改包含加密引數的關聯訊息。這與Defensics測試套件在測試用例中所做的一樣。我只需要刪除一些未經協商的加密引數檢查,就可以建立連線。
對新思科技的Defensics智慧模糊測試有疑問?我們給您答案
我有一個wpa_supplicant的修改版本,它提供了網路介面上的完整Linux IP堆疊。首先,我嘗試連線到AP管理面板。雖然連線了,但是我注意到在路由器接到流氓客戶端之前,路由器接受了普通資料幀時,有三到六秒的視窗。然而,wpa_supplicant自動重新連線,我的開發繼續進行。實際上,重新連線速度非常快,即使傳輸控制協議(TCP)連線仍保持開啟狀態。
此外,我還連線了另外兩臺裝置,一臺是有線的,一臺是通過WLAN連線的。從流氓客戶端,我可以毫無費勁地連線兩個裝置。從路由器管理面板,我看到惡意客戶端被識別為連線到路由器的任何其它客戶端。因此,利用此漏洞,我可以在不知道預共享金鑰的情況下完全訪問網路。我不需要做任何耗時的暴力破解 – 我只是連線到網路。
總結
Defensics 802.11測試套件現在可以識別繞過整個WPA加密機制的情況。測試套件現在包含一個單獨的SafeGuard功能來測試此漏洞,如果它檢測到WPA加密被繞過,則測試將顯示失敗。因此,針對其AP執行Defensics模糊測試的供應商將意識到此漏洞。測試的D-Link裝置是隨機選擇的,D-Link已經發布了該裝置的補丁。