Black Hat Europe 2021議題解讀:Wi-Fi Mesh中的安全攻擊面

百度安全發表於2021-11-20

近年來,隨著萬物互聯技術的發展,Mesh技術逐漸興起,Mesh技術是一種組網技術,可將多個接入點組成同一個網路來提供服務,相比於傳統的WiFi組網技術,Mesh組網更穩定,更快,擴充套件性更強。而WiFi Mesh也憑藉著自組織,自管理,自治癒的特性,在未來萬物互聯的場景中佔據重要的地位。

針對WiFi Mesh的新興場景,在本次Black Hat Europe 2021大會上,百度安全以線上的形式分享了議題《BadMesher: New Attack Surfaces of Wi-Fi Mesh Network》,該議題主要討論了WiFi Mesh中的安全攻擊面,設計並實現了一套自動化漏洞挖掘工具MeshFuzzer,並展示了其在實際漏洞挖掘過程中的效果。

**議題解讀

基本概念

EasyMesh概念

EasyMesh是WiFi聯盟推出的一項標準化認證方案,其經歷了三個發展階段:

圖 1 EasyMesh發展流程

2018年,Mesh技術為廠商各自實現,缺乏統一的標準,因此不同廠商的裝置之間無法互聯互通。

2019年,WiFi聯盟推出EasyMesh V1版本,引入了Onboarding流程和Auto-Config流程,並使用1905控制協議來實現Mesh中大部分的控制功能。

2020年,WiFi聯盟推出EasyMesh V2和V3版本,V3版本豐富了更多的控制特性,尤其增加了安全特性,為控制訊息新增了授權和完整性校驗。

目前通過EasyMesh認證的廠商已經有數十家,其中包括Mediatek、Huawei、ZTE等。

EasyMesh架構

EasyMesh的架構如圖 2所示,其中包含兩個關鍵鏈路,兩個關鍵角色。

圖 2 EasyMesh架構圖

關鍵鏈路

1、Fronthaul鏈路:指的是暴露的WiFi鏈路,也就是我們手機能夠正常連線的SSID

2、Backhual鏈路:指的是隱藏的WiFi鏈路,即為是無法搜尋到的SSID,是專門為Mesh提供的鏈路

關鍵角色
1、Controller角色:Mesh網路的管理者,可向Agent傳送控制指令,來完成Mesh網路的管理,達到自組織,自管理,自治癒的效果

2、Agent角色:Mesh網路的執行者,通過接受Controller的控制指令來執行任務,並向Controller反饋執行結果

這裡的角色並不針對具體的裝置,是邏輯實體,一個裝置既可以作為Controller也可以作為Agent,或者同時作為Contrller和Agent。

Mesh網路構建過程
整個Mesh網路構建過程分為如下2步:

1、Onboarding
2、Discovery和Configuration

Onboarding過程
Onboarding過程是幫助一個未加入Mesh網路的裝置加入Mesh網路,我們將未加入網路的裝置稱為Enrollee裝置,整個過程是通過1905 Push Button Configueration協議(後面簡稱1905 PBC)來實現的,1905 PBC包含了如下3個特性:

1、特性1:入網雙方需要進行push button

2、特性2:基於WiFi Protected Setup實現

3、特性3:基於TLV

從圖 3中可看出,1905 PBC在Multi-AP Extension部分進行了專門的標記,也就是標記獲取的是Backhaul的SSID。因此Entollee裝置可通過1905 PBC來獲得Mesh鏈路的入網憑證。


圖 3 Multi-AP Extension

整個Onboarding的流程如圖 4所示:

圖 4 Onboarding流程

首先將兩個裝置進行Push Button,讓兩個裝置進入配網狀態。

其次Enrollee裝置通過1905 PBC來與Fronthaul SSID互動,經過M1-M8的過程後,最終Existing Agent將Backhual的SSID和password返回給Enrollee裝置,之後Enrollee裝置便能夠連線Backhaul SSID,加入Mesh網路。

至此Onboarding流程完成了。

Discovery和Configuration過程

整體流程如圖 5所示:

圖 5 Discovery和Configuration流程

在完成Onborading流程後,Enrollee裝置需要找到Mesh網路中的Controller來獲得當前Mesh網路的基本配置,這裡則使用IEEE1905.1a控制協議,Enrollee裝置通過“AP Autoconfig Search”廣播包來探測Controller是否存在,若網路中存在Controller, 則Controller會回覆“AP Autoconfig Response”, Enrollee裝置成功找到了Controller,至此,Discovery過程完成。

Configuration過程則是將當前Mesh網路的配置資訊同步給Enrollee裝置,如Mesh網路的使用者名稱密碼,通訊Channel的選擇,網路穩定性的維持引數等,是通過“AP Autoconfig Wifi Sample Configuration”來實現的,Enrollee裝置獲取了Mesh網路的基本配置,可真正的Agent的身份加入Mesh大家庭裡,至此整個Mesh 網路構建完成。

Mesh網路控制過程

Mesh網路的維護與管理是一項重要的工程,通過IEEE1905.1a來實現,IEEE1905.1a本質上是介於物理層和網路層的協議,是定義了家庭網路中的有線或無線的控制技術。在Mesh場景中,IEEE1905.1a是載體,提供了多種控制協議如裝置發現、裝置配置、裝置管理等,其整個實現都是基於Type-Length-Value,部分EasyMesh控制協議如表 1所示:


表 1 部分EasyMesh控制協議

這裡選擇“Multi-AP Policy Config Request Message”來作為例子,可以看到圖 6對應的命令字為 0x8003,具體的Streeing Policy則滿足基本的TLV,可以看到圖 6中Type為0x89,len為21,而value則為對應的payload。


圖 6 Multi-AP Policy Config Message

攻擊面分析

分析完了整個Mesh網路的組網和控制過程,我們來看看實際的攻擊面,攻擊的載體是兩個關鍵協議:
1、1905 Push Button Configuration Protocol
2、IEEE 1905.1a Control Protocol
對應的是兩個關鍵的攻擊面:
1、攻擊網路構建過程

2、攻擊網路控制過程

攻擊Mesh網路構建過程

攻擊Existing Agent
攻擊者:“Bad“ Enrollee Agent
受害者:Exixting Agent
攻擊載體:1905 Push Button Configuration Protocol(M1、M3、M5、M7)
整個攻擊流程如圖 7所示

圖 7 攻擊Existing Agent

攻擊者構造惡意的Enrollee裝置來攻擊Existing Agent,具體則是基於1905 PBC傳送畸形的M1、M3、M5、M7包來進行攻擊,可觸發Existing Agent在M1、M3、M5、M7過程中的TLV的解析漏洞。

攻擊Enrollee Agent

攻擊者:“Bad” Existing Agent
受害者:Enrollee Agent
攻擊載體:1905 Push Button Configuration Protocol(M2、M4、M6、M8)
整個攻擊流程如圖 8所示


圖 8 攻擊Enrollee Agent

攻擊者構造惡意的Existing Agent裝置來攻擊Enrollee裝置,具體則是基於1905 PBC回覆畸形的M2、M4、M6、M8包來進行攻擊,可觸發Enrollee裝置在M2、M4、M6、M8過程中的TLV解析漏洞。

攻擊Mesh網路控制過程

分析完Mesh構建的攻擊面,再看Mesh網路控制的攻擊面。
攻擊者:“Bad” Existing Agent
受害者:Controller和其他Existing Agent
攻擊載體:IEEE 1905.1a Control Protocol

攻擊者可傳送畸形的1905包來觸發Controller和Existing Agent中1905 TLV的解析漏洞,圖 9是我們針對“AP_AUTOCONFIGURATION_WSC_MESSAGE”設計的惡意包,可以看到,我們在SSID的len部分填入了0xFF,而實際的SSID最長為64,並在SSID的payload部分中全部填入0xFF,從圖 10實際獲取的資料包中可以看到,實際的SSID部分充滿了我們填充的0xFF的Payload,這是不符合SSID解析的預期。


圖 9 模擬傳送畸形的IEEE 1905.1a控制包

圖 10 實際的IEEE 1905.1a控制包

**自動化工具MeshFuzzer

MeshFuzzer架構**

我們的Meshfuzzer包含兩個Fuzzing子系統,分別是針對1905 PBC的Fuzzing以及針對1905.1a的Fuzzing,整體架構如圖 11所示。


圖 11 MeshFuzzer架構

上半部分是我們設計的針對1905 PBC的Fuzzing子系統,我們採用實際裝置間的WPS互動資料作為輸入,經過我們的TLV 變異系統,最終使用我們的802.1的發包器來進行發包,與此同時對裝置進行串列埠連線,實時監控crash的狀態。

下半部分是我們設計的針對IEEE 1905.1a的Fuzzing子系統,我們實現了大部分EasyMesh中的控制協議欄位,同樣經過我們的TLV變異系統,最終使用我們的1905發包器來進行發包,通過獨有的1905資料包來監控crash的狀態。

變異策略

由於兩個目標協議均是基於TLV實現的,我們可以用統一的變異策略來高效的輔助Fuzzing的進行。

變異策略1:變異長度欄位,通過過長或者過短的長度來觸發TLV解析的一些常規記憶體破壞漏洞,比如長度過短會導致越界讀,或者整數溢位,過長會導致越界寫等問題,圖 12是我們實際測試中將長度欄位變異為過短的效果。

變異策略2:對現有的TLV塊進行隨機的增刪改,這可能會導致的記憶體破壞相關的邏輯漏洞,如Double-Free、UAF等,圖 13是我們實際測試中隨機增加TLV塊的效果。

圖 12 過短的長度欄位

圖 13 隨機對TLV塊進行增加

Fuzzing網路構建過程

軟硬體選擇

硬體部分:選擇Ubuntu或者樹莓派4,配合無線的USB網路卡來進行發包操作。

軟體部分:選擇了對wpa_supplicant進行改造來定製化我們的Fuzzer,具體原因則是wpa_supplicant本身支援1905 PBC協議,因此我們可以在其不同的階段中加入我們的變異策略,可高效穩定的實現Mesh網路構建階段的Fuzzing工作。

圖 14 wpa_supplicant實現程式碼

實際Fuzzing Existing Agent

我們使用以上的定製化的Fuzzing工具,便可模擬整個1905 PBC過程,並對M1、M3、M5、M7階段注入Fuzzing Payload,圖 15是我們在Fuzzing過程中,捕獲到的的M7階段的TLV解析導致的越界寫入漏洞的崩潰日誌,圖 16是我們捕獲的實際的資料包。

圖 15 M7階段越界寫問題

圖 16 M7階段越界寫實際資料包

我們監控崩潰的方式則是通過對目標裝置進行Ping探測以及串列埠實時捕獲崩潰日誌。

實際Fuzzing “Existing” Agent

Network構建過程另一個受害角色,則是未配網的“Enrollee”,我們模擬一個惡意的“Existing” Agent來fuzzing “Enrollee”。這裡為了保證讓Enrollee持續保持加入Mesh網路的狀態,我們編寫了一個指令碼,如圖 17所示。

圖 17 Enrollee保持加入Mesh網路指令碼

我們在M2、M4、M6、M8階段注入了Fuzzing Payload,圖 18是我們Fuzzing過程中,觸發的M6階段的TLV解析導致的越界寫入漏洞。圖 19是我們捕獲的實際的資料包。

圖 18 M8階段越界寫問題

圖 19 M8階段越界寫實際資料包

這裡我們監控崩潰的方式仍然是通過對目標裝置進行Ping探測以及串列埠實時捕獲崩潰日誌。

Fuzzing網路控制過程

軟硬體選擇

硬體部分:選擇了Macbook Pro,因為Macbook Pro可以較好的支援1905資料包的發。
軟體部分:選擇了現有的開源庫pyieee1905,因此我們可以基於pyieee1905來開發自定義的協議欄位,這將大大減少我們Fuzzer的開發工作量,我們只需要實現EasyMesh裡的控制協議便可對網路控制部分進行Fuzzing測試。

圖 20 pyieee1905

監控模組

由於1905的處理模組大多是單獨的程式,我們無法直接通過串列埠捕獲崩潰,也無法通過對裝置傳送Ping探測包來監控1905程式的執行狀態,這裡我們選擇EasyMesh裡提供的1905 Topology Query Message,該資料包是用於裝置1905程式間探測互相支援的能力,因此通過裝置對該包的回覆與否,我們便可容易的知道,裝置上的1905程式是否存活,或者是否在正常工作。

圖 21 Topology Query Message

每當我們發出一個Fuzzing Payload,便會傳送一次1905 Topology Query,若得到回覆,說明1905 Daemon正常工作,若未得到回覆,說明1905 Daemon可能出現了問題,此時我們會記錄此次傳送的Fuzzing Payload到本地儲存,並等待程式的重啟。


圖 22 1905 崩潰監控與儲存


圖 23 實際崩潰

實際效果

我們使用MeshFuzzer在Mediatek MT7915的EasyMesh解決方案中發現了多處TLV解析導致的記憶體破壞漏洞,並發現了1處違背安全設計準則的安全問題,累計獲得了19個CVE,問題列表如圖 24所示,目前Mediatek已經修復了所有問題並輸出了安全補丁。

圖 24 MT7915安全問題

安全建議

對於處理TLV解析導致的記憶體破壞漏洞,我們建議對資料包進行完整解析,然後一一檢查型別和長度,最後進行處理,當長度和型別檢查失敗時對資料包進行丟棄。

一個很好的例子是wpa_supplicant,圖 25中顯示了wpa_supplicant處理TLV包的過程,遵循解析->分發->驗證->處理的過程。

圖 25 正確的TLV處理例子

針對違背安全設計準則的問題,EasyMesh V3標準中有一節專門描述了1905協議的安全能力。例如,要隔離 Backhaul 和 FrontHaul 鏈路,需要增加訊息的完整性校驗並1905包進行加密,建議廠商在實現EasyMesh時,遵守EasyMesh標準,實現1905協議的安全能力。

總結

對整個議題總結如下:
1、我們發現了WiFi Mesh中的多個安全攻擊面,攻擊者可以在Mesh網路構建階段和網路控制階段對Mesh網路中的裝置發起攻擊;

2、我們開發了一款自動化漏洞挖掘工具MeshFuzzer,可以自動挖掘廠商在實現EasyMesh時引入的安全漏洞;

3、在實踐中,我們在MT7915晶片的EasyMesh解決方案中發現了多處安全問題,獲得了19個CVE,並給出相應的修復建議。

相關文章