近年来,随着万物互联技术的倒退,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,并给出相应的修复倡议。