前言
蓝牙低功耗(Bluetooth Low Energy, BLE)广泛应用于智能穿戴、智能家居、医疗健康、工业控制等领域。由于BLE设备通常资源受限且安全实现参差不齐,协议栈各层均可能存在安全风险。
本文将按照BLE协议栈从底层到上层的结构,逐层分析安全测试方法与常见漏洞,帮助安全测试人员系统性地评估BLE设备的安全性。
BLE协议栈概览
BLE协议栈自下而上分为以下层次:
| 层次 | 功能 | 安全关注点 |
|---|---|---|
| 物理层(PHY) | 射频通信、信道跳频 | 信号嗅探、干扰攻击 |
| 链路层(Link Layer) | 连接管理、数据包收发 | 连接劫持、模糊测试 |
| L2CAP | 逻辑信道复用、分片重组 | 畸形包攻击、缓冲区溢出 |
| ATT/GATT | 属性协议、服务发现 | 未授权读写、信息泄露 |
| SMP | 安全管理、配对加密 | 配对劫持、密钥协商降级 |
| GAP | 设备发现、广播管理 | 广播数据泄露、追踪 |
| 应用层 | 业务逻辑 | 认证绕过、重放攻击、OTA劫持 |
一、物理层(PHY)安全测试
1.1 测试目标
物理层负责BLE的射频通信,工作在2.4GHz ISM频段,使用37个数据信道和3个广播信道。测试重点在于评估无线信号是否可被截获和干扰。
1.2 测试方法
广播信道嗅探
使用设备对BLE的3个广播信道(37/38/39)进行被动监听,捕获设备的广播数据包:
- 配置设备监听广播信道
- 记录目标设备的广播包内容
- 分析广播数据中是否包含敏感信息(设备名称、服务UUID、厂商自定义数据)
测试要点:
- 检查广播包是否泄露设备型号、固件版本、序列号等信息
- 观察广播地址是否为静态公开地址(未使用随机地址)
- 分析厂商自定义广播数据(Manufacturer Specific Data)中是否含明文敏感数据
数据信道嗅探
使用设备捕获已建立连接的数据通信:
- 使用设备跟踪连接建立过程,获取Access Address和跳频参数
- 同步跳频序列,解码数据信道上的通信内容
- 分析传输数据是否加密
常见发现:
- 部分设备在连接后传输明文数据,未启用链路层加密
- 某些设备的跳频参数可被预测
射频干扰测试
评估设备在受到射频干扰时的行为:
- 使用设备对2.4GHz频段发送干扰信号
- 观察目标设备的连接稳定性和恢复能力
- 记录设备在干扰环境下是否降级到不安全的通信模式
1.3 常见漏洞
- 广播数据信息泄露:设备广播中包含可用于识别用户或设备状态的信息
- 静态MAC地址:未使用BLE隐私功能(LE Privacy),导致设备可被持续追踪
- 明文通信:连接建立后未启用加密,数据以明文传输
二、链路层(Link Layer)安全测试
2.1 测试目标
链路层负责BLE连接的建立、维护和数据包的收发。测试重点在于连接管理机制的安全性和数据包处理的健壮性。
2.2 测试方法
连接参数探测
建立与目标设备的连接,分析连接参数:
- 使用设备发起连接请求
- 记录连接间隔(Connection Interval)、从机延迟(Slave Latency)、超时时间
- 尝试请求参数更新,观察设备是否接受异常参数值
链路层模糊测试
向目标设备发送畸形链路层数据包:
- 构造异常的连接请求包(非法Access Address、畸形CRC)
- 发送超长或截断的LL Control PDU
- 测试异常的LL_VERSION_IND、LL_FEATURE_REQ等控制包
重点测试的LL PDU类型:
LL_CONNECTION_UPDATE_REQ — 异常连接参数
LL_CHANNEL_MAP_REQ — 非法信道映射
LL_TERMINATE_IND — 恶意断连
LL_LENGTH_REQ — 超大MTU请求
LL_PHY_REQ — 不支持的PHY参数
连接劫持测试
尝试注入或劫持已有的BLE连接:
- 使用设备嗅探目标连接的参数(Access Address、CRC Init、Hop Interval等)
- 在合适的时机注入伪造的数据包
- 评估是否可以接管已有连接
2.3 常见漏洞
- 连接参数异常处理不当:接受非法参数导致设备崩溃或重启
- LL PDU解析缺陷:畸形控制包导致缓冲区溢出或拒绝服务
- 缺乏连接认证:链路层无法区分合法与非法的连接请求
三、L2CAP层安全测试
3.1 测试目标
L2CAP(逻辑链路控制与适配协议)负责上层协议的复用、数据分片与重组。BLE中L2CAP使用固定信道和基于信用的流控信道。
3.2 测试方法
L2CAP信令模糊测试
发送畸形的L2CAP信令包:
- 构造异常的连接参数更新请求(L2CAP_CONNECTION_PARAMETER_UPDATE_REQ)
- 发送非法的CID(Channel ID)值
- 测试信令PDU中长度字段与实际数据不匹配的情况
分片重组测试
测试L2CAP分片重组机制的健壮性:
- 发送分片序列中缺失中间片段的数据
- 发送超过最大PDU长度的分片数据
- 在分片传输过程中插入异常控制包
- 同时发送多个交叉的分片序列
Credit-Based Flow Control 测试
针对LE Credit Based Flow Control模式:
- 请求建立超过设备处理能力的L2CAP连接数
- 发送超出已分配信用值的数据包
- 测试信用值为0时继续发送数据的设备行为
3.3 常见漏洞
- 分片重组缓冲区溢出:超长数据或异常分片导致内存破坏
- 信令处理拒绝服务:畸形信令包导致协议栈崩溃
- 信用值管理缺陷:资源耗尽型拒绝服务
四、ATT/GATT层安全测试
4.1 测试目标
ATT(属性协议)和GATT(通用属性配置文件)定义了BLE设备的服务和特征值读写机制。这是BLE应用数据交互的核心层,也是安全问题最集中的层次。
4.2 测试方法
服务与特征值枚举
全面枚举目标设备的GATT服务树:
- 使用设备连接目标并执行服务发现
- 遍历所有Service、Characteristic和Descriptor
- 记录每个特征值的属性(Read/Write/Notify/Indicate)及权限要求
需特别关注的标准服务:
| 服务UUID | 名称 | 风险点 |
|---|---|---|
| 0x1800 | Generic Access | 设备名称可写? |
| 0x180A | Device Information | 固件版本、硬件信息泄露 |
| 0x180F | Battery Service | 电量信息泄露 |
| 0x1801 | Generic Attribute | Service Changed特征 |
| 厂商自定义 | Private Service | 通常是攻击面最大的服务 |
未授权访问测试
测试特征值在未配对/未认证状态下的访问权限:
- 在未配对状态下尝试读取所有特征值
- 在未配对状态下尝试写入所有可写特征值
- 使用设备订阅所有支持Notify/Indicate的特征值
- 检查是否有敏感数据在未加密连接上传输
常见测试用例:
- 读取Device Information特征值 → 获取固件版本
- 写入控制类特征值 → 未授权控制设备
- 订阅通知特征值 → 被动接收设备敏感数据
- 读取自定义特征值 → 获取配置信息或用户数据
ATT协议模糊测试
发送畸形ATT PDU测试协议栈健壮性:
- 构造超长的Write Request(超过ATT_MTU)
- 发送无效Handle值的Read/Write请求
- 发送格式错误的Execute Write Request
- 测试Prepare Write Queue的边界情况(大量Prepare Write后Execute)
特征值写入注入
对可写特征值进行边界值和异常值测试:
- 写入超长数据(超过特征值声明的最大长度)
- 写入格式不符合预期的数据(如数字字段写入字母)
- 写入特殊字符或控制字符
- 快速连续写入大量数据(压力测试)
4.3 常见漏洞
- 未授权访问敏感特征值:关键功能特征值未设置适当的权限要求
- GATT信息泄露:设备信息服务暴露过多内部信息
- 写入验证缺失:特征值写入缺乏输入验证,导致设备异常
- ATT协议栈崩溃:畸形ATT包导致协议栈拒绝服务
五、SMP层安全测试
5.1 测试目标
SMP(安全管理协议)负责BLE的配对、密钥分发和加密建立。SMP的安全性直接决定了整个BLE通信的机密性和完整性。
5.2 测试方法
配对方式评估
分析设备支持的配对方式和安全级别:
- 使用设备发起配对请求,分析Pairing Request/Response中的参数
- 记录IO Capability、OOB Flag、Bonding Flag、MITM Flag
- 确定设备使用的配对方法(Just Works/Passkey/Numeric Comparison/OOB)
配对安全级别对照:
| 配对方式 | MITM防护 | 窃听防护 | 安全等级 |
|---|---|---|---|
| Just Works (Legacy) | 无 | 无 | 低 |
| Just Works (SC) | 无 | 有 | 中 |
| Passkey (Legacy) | 有 | 弱 | 中 |
| Passkey (SC) | 有 | 有 | 高 |
| Numeric Comparison | 有 | 有 | 高 |
| OOB | 有 | 有 | 高 |
配对降级攻击
尝试将设备的配对方式降级到不安全的模式:
- 在Pairing Request中声明IO Capability为NoInputNoOutput,强制Just Works配对
- 设置Security Connections标志为0,强制使用Legacy Pairing
- 测试设备是否接受降级的配对参数
Legacy Pairing被动窃听
针对使用Legacy Pairing的设备:
- 使用设备捕获完整的配对过程
- 尝试暴力破解Temporary Key(TK)
- Just Works模式下TK固定为0,可直接推导出STK并解密后续通信
- Passkey模式下TK为6位数字(0-999999),可在短时间内暴力破解
Secure Connections测试
针对使用LE Secure Connections的设备:
- 验证设备是否正确实现了ECDH密钥交换
- 检查设备是否接受无效的公钥(CVE-2018-5383类漏洞)
- 测试设备对Key Size协商的处理(KNOB攻击变体)
密钥管理测试
评估密钥的存储和管理:
- 检查LTK、IRK、CSRK的分发过程
- 测试设备对密钥尺寸协商的最小值限制
- 尝试使用失效的旧密钥重新建立加密连接
5.3 常见漏洞
- 强制Just Works配对:设备未强制要求MITM保护的配对方式
- Legacy Pairing降级:设备允许降级到不安全的Legacy Pairing
- 密钥协商降级(KNOB攻击):接受过短的加密密钥(低于16字节)
- 公钥验证缺失:未验证对端ECDH公钥的有效性
- 密钥存储不安全:LTK以明文存储在设备固件或文件系统中
六、GAP层安全测试
6.1 测试目标
GAP(通用访问配置文件)定义了设备的发现和连接流程。测试重点在于设备隐私保护和广播行为的安全性。
6.2 测试方法
设备追踪测试
评估设备的地址隐私保护:
- 长时间监听设备广播,记录MAC地址变化情况
- 如果使用随机地址,分析地址轮换周期
- 检查是否使用Resolvable Private Address(RPA)
广播数据分析
深度分析广播数据的安全性:
- 解析所有AD Structure字段
- 检查扫描响应(Scan Response)数据中的额外信息
- 分析广播数据在不同状态下的变化(是否可用于推断设备状态)
设备克隆测试
尝试克隆目标BLE设备:
- 记录目标设备的广播数据和GATT服务结构
- 使用设备创建具有相同广播数据的仿冒设备
- 测试客户端应用是否能区分真实设备和克隆设备
6.3 常见漏洞
- 静态蓝牙地址:设备使用固定公开地址,可被持续追踪
- 广播数据隐私泄露:广播中包含可关联到特定用户的信息
- 设备克隆风险:客户端仅依赖广播数据识别设备,易被仿冒
七、应用层安全测试
7.1 测试目标
应用层是BLE协议栈之上的业务逻辑层,包括设备控制协议、固件更新(OTA/DFU)、数据同步等。
7.2 测试方法
应用层协议逆向
分析BLE通信中的应用层协议:
- 使用设备抓取正常业务场景下的BLE通信数据
- 分析GATT特征值中传输的数据格式和含义
- 同时抓取手机APP的网络流量,进行关联分析
- 尝试逆向应用层协议的数据结构和命令集
认证与授权测试
测试应用层的访问控制:
- 不通过正常APP认证流程,直接向设备发送控制命令
- 测试是否存在硬编码的认证密钥
- 使用设备重放之前抓取的命令包
- 尝试越权访问其他用户的设备
重放攻击测试
验证设备对重放攻击的防御:
- 使用设备捕获一次合法的命令交互
- 在新的连接中重放捕获的命令包
- 检查设备是否使用了随机数、时间戳或序列号等抗重放机制
OTA/DFU固件更新测试
如果设备支持无线固件更新:
- 分析DFU服务的GATT特征值和交互流程
- 检查固件包是否经过签名验证
- 尝试上传未签名或篡改的固件包
- 测试是否可以回退到存在已知漏洞的旧版固件
- 检查DFU模式下设备的认证要求
数据安全测试
评估设备存储和传输数据的安全性:
- 检查设备传输的用户数据是否进行了应用层加密(不仅依赖BLE链路层加密)
- 分析配套APP的本地存储,检查是否明文保存蓝牙密钥或用户数据
- 测试设备恢复出厂设置后是否清除所有用户数据和配对信息
7.3 常见漏洞
- 缺乏应用层认证:仅依赖BLE配对作为认证手段
- 重放攻击:命令包无防重放保护
- OTA未验证签名:可上传恶意固件
- 固件回退攻击:可降级到有漏洞的旧版本
- 明文传输敏感数据:仅依赖链路层加密,一旦密钥泄露则全部暴露
八、测试流程建议
基于以上各层分析,建议按以下流程进行BLE安全测试:
第一阶段:信息收集
- 被动嗅探广播数据,识别设备信息
- 连接设备,完成GATT服务枚举
- 分析配套APP的通信行为
第二阶段:安全评估
- 评估配对方式和加密强度
- 测试特征值的访问权限
- 执行未授权操作测试
第三阶段:深度测试
- 执行协议各层模糊测试
- 尝试配对降级和中间人攻击
- 应用层协议逆向和重放测试
- OTA/DFU安全评估
第四阶段:报告输出
- 汇总各层发现的漏洞
- 按风险等级分类(参考CVSS评分)
- 提供修复建议和加固方案
总结
BLE安全测试需要从协议栈的每一层进行系统性评估。实践中,ATT/GATT层的未授权访问和SMP层的配对安全问题是最常见的漏洞类型,而应用层的认证缺陷往往影响最为严重。
安全测试人员应根据设备的实际应用场景,合理分配各层测试的深度和优先级,确保测试的全面性和有效性。
本文由拾忆安全团队原创,转载请注明来源。