BlackHat USA 2022议题解读:蓝牙Mesh中的安全攻击面

百家 作者:百度安全应急响应中心 2022-08-19 19:41:30

作者:百度安全-AIoT安全团队 Han Yan,Lewei Qu,Dongxiang Ke


蓝牙Mesh是智能家居、工业控制等场景的理想解决方案,相关标准也已得到各大芯片厂商的支持,但其软件实现的安全性却未得到足够的重视。针对这一新兴场景,百度安全研究员于北京时间8月11日上午,在BlackHat USA 2022上分享了《BrokenMesh: New Attack Surfaces of Bluetooth Mesh》议题,探讨蓝牙Mesh中的安全攻击面,并设计了一套自动化漏洞挖掘工具BLE Mesh Fuzzer,展示了在漏洞挖掘实践中的优秀效果。


入选BlackHat USA 2022议题:蓝牙Mesh中的安全攻击面


  • 蓝牙Mesh中的安全攻击面

本此议题的研究范围包括两个方面,蓝牙Mesh协议及蓝牙Mesh封装程序,协议指蓝牙技术联盟提出的蓝牙Mesh标准规范,封装程序指为上层应用提供蓝牙Mesh相关接口的软件框架,而百度安全研究员进一步将蓝牙Mesh协议划分成网络构建和网络控制两个阶段,专注于挖掘两个阶段及封装程序在软件实现层面的漏洞:

一、蓝牙Mesh协议的攻击面

网络构建是新设备通过蓝牙Mesh网关接入蓝牙Mesh网络的过程,百度安全研究员认为,攻击最好发生在身份验证之前。期间,蓝牙Mesh网关和新设备之间的通信无需任何额外的、第三方难以获取的信息。如此一来,攻击可适用于任何厂商的设备。其中,消息分段重组机制(Segmentation and Reassembly)是一个理想的攻击目标。消息分段重组用于传输超长的数据,基于Transaction Start PDU和Transaction Continue PDU实现。攻击消息分段重组机制有两处优势:首先,消息分段重组是一种通用的机制,所有厂商的蓝牙Mesh设备均存在该攻击面;再者,消息分段重组涉及内存操作,容易产生内存破坏漏洞。其实,可以通过对Transaction Start PDU和Transaction Continue PDU中与长度相关的字段(SegN、TotalLength、SegmentIndex)进行变异,来触发重组时的异常行为。总的来说,攻击者既可以作为蓝牙Mesh网关,又可以作为新设备。如果攻击者是蓝牙Mesh网关,则可在建立连接后向目标设备发送一系列畸形的分段数据包,目标设备将在重组这些畸形数据包时触发漏洞。同理,如果攻击者是新设备,则可在接收到Provisioning Invite后向目标设备发送畸形数据包,从而触发漏洞。


网络构建阶段的攻击面


而网络控制是一个设备向其他设备发送消息的过程,控制协议遵循分层架构,网络层定义了消息的源地址(SRC)和目的地址(DST),低传输层定义了分段重组相关的字段。蓝牙Mesh强制要求对网络控制消息进行混淆和加密。网络层的部分字段采用密钥NetKey进行混淆和加密,高传输层采用密钥AppKey进行加密。如果没有任何密钥,则攻击者只能读取/伪造网络层的IVI、NID和NetMIC字段;如果拥有NetKey,则攻击者可以读取/伪造网络层和低传输层;如果同时拥有NetKey和AppKey,则攻击者可以读取/伪造整个网络控制数据包。在Mesh网络中,不同设备的NetKey是相同的,但AppKey可能不同。其中,在网络控制阶段,分段重组机制仍然是理想的攻击目标。不仅是因为分段重组机制通用且涉及内存操作,同时也因为分段重组发生在低传输层,这意味着发起攻击只需要拿到共享的NetKey,而不需要拿到每个特定的AppKey,攻击的成本相对较低。其实,仍可以通过对分段数据包中与长度相关的字段(SegO、SegN、CTL、Segment m)进行变异,来触发重组时的异常行为。总的来说,蓝牙Mesh的攻击范围不再局限于物理相邻网络,恶意设备A不但可以向邻近的目标设备C发送畸形分段数据包,同时也可以向更远的目标设备D发送畸形分段数据包,最终在目标设备重组数据包时触发漏洞。


网络控制阶段的攻击面


二、蓝牙Mesh封装程序的攻击面

在Android中蓝牙Mesh协议通常实现于libmesh.so,并通过封装程序封装为AIDL service提供给其他应用调用。倘若攻击者是恶意Android应用,攻击向量则是恶意的接口调用。基于下图可知,封装程序有两处主要的攻击面。其一,攻击MeshService的权限控制,例如在缺少蓝牙权限的情况下进行未授权的调用;其二,攻击JNI层、HAL层的内存操作。JNI和HAL通常由C/C++实现,容易出现内存破坏问题。


蓝牙Mesh Android封装程序架构


  • 自动化漏洞挖掘工具BLE Mesh Fuzzer

针对网络构建协议的BLE Mesh Fuzzer包含三个主要模块:测试用例生成模块、发送器/接收器、崩溃检测模块。测试用例基于模板数据包生成,并对长度相关的字段进行变异。发送器负责与目标设备建立连接,并依次发送测试用例中的分段数据包。接收器持续监听目标设备发送的Link Close数据包。崩溃检测模块若在规定时间内未接收到目标设备发送的Link Close数据包,则判定目标设备的蓝牙进程发生了崩溃。


针对网络构建协议的BLE Mesh Fuzzer


上图说明了Fuzzing网络构建协议的工作流程,在第一种情况中,Transaction Continue PDU (2/5) 导致目标设备的蓝牙进程崩溃重启。由于本次网络构建的相关信息已在崩溃中丢失,因此目标设备不会向Fuzzer发送Link Close数据包。而Fuzzer在规定时间到达时仍未收到Link Close数据包,即判定本轮测试导致目标设备的蓝牙进程发生了崩溃。在第二种情况中,Transaction Continue PDU (3/5) 在目标设备中校验不通过。目标设备主动终止网络构建,向Fuzzer发送Link Close数据包。Fuzzer接收Link Close数据包,即判定本轮测试未触发崩溃。


针对网络控制协议的BLE Mesh Fuzzer


针对网络控制协议的BLE Mesh Fuzzer同样包含三个主要模块:测试用例生成模块、发送器/接收器、崩溃检测模块。测试用例同样基于模板数据包生成,并对长度相关的字段进行变异。发送器同时向目标设备发送测试用例中的分段数据包和一系列探针数据包。其中,探针数据包是源地址与测试用例不同的、合法的分段数据包,用于辅助判别目标设备的蓝牙进程是否崩溃。接收器持续监听目标设备对探针数据包的响应。崩溃检测模块利用蓝牙Mesh对分段数据包的“Block ACK”机制实现检测。“Block ACK”指接收方的一次响应中应包含对所有已接收的分段数据包的应答,而非仅针对当前接收的数据包。崩溃检测模块可基于应答的完整性判断目标设备的蓝牙进程是否发生过崩溃重启。上图说明了Fuzzing网络控制协议的工作流程,在第一种情况中,Segmented PDU (3/4) 导致目标设备的蓝牙进程崩溃重启。由于本次分段重组的相关信息已在崩溃中丢失,因此目标设备在对Prob No.3的应答中不会包含对Prob No.1和Prob No.2的应答。Fuzzer感知到应答出现缺失,即判定本轮测试导致目标设备的蓝牙进程发生了崩溃。在第二种情况中,Fuzzer总是收到完整的探针应答,因此判定本轮测试未触发崩溃。


目前,基于BLE Mesh Fuzzer已对多家厂商的蓝牙Mesh SDK进行了漏洞挖掘,截至2022年7月24日,累计发现了17处协议漏洞和10处封装程序漏洞,覆盖8家知名厂商,共获得23个CVE。而相关厂商也已经修复了所有列出的CVE漏洞,并输出了安全补丁。

百度安全应急响应中心


百度安全应急响应中心,简称BSRC,是百度致力于维护互联网健康生态环境,保障百度产品和业务线的信息安全,促进安全专家的合作与交流,而建立的漏洞收集以及应急响应平台。地址:https://bsrc.baidu.com

长按关注

关注公众号:拾黑(shiheibook)了解更多

[广告]赞助链接:

四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/

公众号 关注网络尖刀微信公众号
随时掌握互联网精彩
赞助链接