BLE安全基础:无线通信风险、BLE安全特性概览、安全模式与安全等级
蓝牙低功耗(BLE)技术在设计之初便将低功耗与低成本作为首要目标,而安全性往往需要在协议栈层面进行精细设计。随着物联网设备的爆发式增长,BLE被广泛应用于医疗、工业、智能家居和可穿戴设备中,这些场景对数据的机密性、完整性和设备身份的真实性提出了严格要求。理解BLE面临的实际无线通信风险、协议栈提供的安全特性,以及安全模式与安全等级的划分逻辑,是构建可靠安全连接的前提。本章将从攻击面分析入手,系统梳理BLE安全架构的核心要素,并深入解析安全模式与安全等级的工程含义。
上图展示了BLE安全架构的核心链路:无线攻击面、设备协议栈与安全特性之间的对抗关系,以及安全模式与安全等级的映射框架。攻击者通过无线信道对设备实施窃听、中间人、注入等攻击,而BLE协议栈通过配对、加密、签名和身份认证机制构建纵深防御。安全模式与安全等级则定义了不同业务场景下所需的安全强度,为开发者提供了可配置的安全策略接口。
2.1 无线通信风险:BLE面临的真实威胁模型
BLE工作在2.4GHz ISM频段,采用跳频扩频(FHSS)技术,拥有40个物理信道(37个数据信道+3个广播信道)。虽然跳频机制增加了被动窃听的难度,但攻击者使用软件定义无线电(SDR)设备即可在毫秒级时间内完成信道扫描与同步。BLE的威胁模型必须从机密性、完整性、可用性和身份认证四个维度全面审视。
2.1.1 核心攻击类型与原理
| 攻击类型 | 攻击原理 | 影响范围 | 典型工具/手段 |
|---|---|---|---|
| 被动嗅探 | 监听2.4GHz频段,捕获广播包与数据包 | 机密性丧失,泄露设备地址、服务UUID、传感器数据 | Ubertooth、nRF Sniffer、Wireshark |
| 中间人(MITM) | 同时与两个合法设备建立连接,转发或篡改数据 | 数据完整性破坏,可注入恶意指令 | GATTacker、BTLEJuice |
| 重放攻击 | 记录合法数据包并在后续重放 | 设备状态被非法篡改,如重放开锁指令 | 自定义脚本+Sniffer |
| 配对劫持 | 在配对过程中干扰或抢占配对通道 | 获取或篡改配对密钥,后续通信完全暴露 | FIDO嗅探器、协议栈漏洞利用 |
| DoS干扰 | 在2.4GHz频段发射强干扰信号 | 可用性丧失,设备无法建立或维持连接 | USRP、ESP32 Jammer |
被动嗅探是最基础的攻击形式。攻击者只需将nRF52840 DK开发板配合Wireshark软件,即可在数秒内捕获周围所有BLE设备的广播包。广播包中包含设备MAC地址(可解析或不可解析)、设备名称、服务UUID、外观类别等信息。若设备未启用加密,攻击者还能直接读取连接后的所有GATT属性值。对于使用Just Works配对方式的设备,即使启用了加密,由于配对过程不提供MITM保护,攻击者仍可通过主动注入方式实施中间人攻击。
2.1.2 风险缓解策略
- 强制使用LE Secure Connections:在BLE 4.2及以上版本中,使用ECDH P-256椭圆曲线密钥交换,提供前向保密性。
- 启用MITM保护:通过Numeric Comparison或Passkey Entry配对方式,确保双方确认配对信息。
- 使用随机可解析地址:定期更换设备MAC地址,防止攻击者长期追踪设备。
- 最小化广播数据:广播包中不包含敏感信息,仅广播必要的设备标识。
- 实施应用层加密:对于高价值数据,在GATT层之上再增加一层应用级加密。
2.2 BLE安全特性概览:从配对到加密的完整链路
BLE协议栈的安全特性从底层到上层依次包括:链路层加密、配对/密钥分发、GATT服务安全属性、以及应用层安全策略。理解这些特性的协同工作方式,是配置安全连接的基础。
2.2.1 配对与密钥分发机制
BLE配对过程分为三个阶段:配对特性交换(Pairing Feature Exchange)、认证与密钥生成(Authentication and Key Generation)、密钥分发(Key Distribution)。在BLE 4.2之前,Legacy配对使用AES-128加密引擎和PIN码生成STK;在BLE 4.2之后,LE Secure Connections使用ECDH P-256生成长期密钥(LTK)。
| 配对方式 | MITM保护 | 密钥生成算法 | 适用场景 | 安全等级 |
|---|---|---|---|---|
| Just Works | 无 | Legacy: STK / SC: LTK | 快速连接、无显示设备 | 低 |
| Numeric Comparison | 有 | SC: ECDH + 6位数字确认 | 手机与手表、电脑与耳机 | 高 |
| Passkey Entry | 有 | Legacy: 6位PIN / SC: ECDH+Passkey | 键盘、门锁等有输入设备 | 高 |
| Out of Band (OOB) | 有 | 通过NFC或USB传输密钥 | 医疗设备、工业配对 | 最高 |
密钥分发阶段,设备间交换LTK(长期密钥)、IRK(身份解析密钥)、CSRK(连接签名解析密钥)等。LTK用于后续连接的数据加密,IRK用于解析随机地址以识别设备身份,CSRK用于数据签名。开发者需要根据设备存储能力选择需要分发的密钥类型,并确保密钥存储在安全元素(Secure Element)或TrustZone中。
2.2.2 加密与完整性保护
BLE使用AES-128-CCM加密算法,该算法同时提供机密性和完整性保护。CCM模式结合了CTR(计数器模式)加密和CBC-MAC认证,每个数据包都包含一个4字节的消息完整性校验码(MIC)。链路层加密在连接建立后自动启用,但需要先完成配对并生成LTK。对于未配对但需要加密的连接,可以使用LE Legacy配对中的Just Works方式快速建立加密链路,但安全性较低。
// nRF5 SDK中启用加密连接的典型配置
ble_gap_sec_params_t sec_params;
memset(&sec_params, 0, sizeof(sec_params));
sec_params.bond = 1; // 使能绑定
sec_params.mitm = 1; // 使能MITM保护
sec_params.lesc = 1; // 使用LE Secure Connections
sec_params.keypress = 0;
sec_params.io_caps = BLE_GAP_IO_CAPS_DISPLAY_ONLY; // 显示能力
sec_params.oob = 0;
sec_params.min_key_size = 7;
sec_params.max_key_size = 16;
sec_params.kdist_own.enc = 1; // 分发LTK
sec_params.kdist_own.id = 1; // 分发IRK
sec_params.kdist_peer.enc = 1;
sec_params.kdist_peer.id = 1;
sd_ble_gap_sec_params_reply(m_conn_handle, BLE_GAP_SEC_STATUS_SUCCESS, &sec_params, NULL);
sd_ble_gap_sec_params_reply函数必须在收到BLE_GAP_EVT_SEC_PARAMS_REQUEST事件后调用。若设备不支持LE Secure Connections,需要回退到Legacy配对,此时应将lesc字段置0,并确保io_caps与配对方式匹配。
2.3 安全模式与安全等级:BLE安全策略的配置框架
BLE协议栈定义了三种安全模式(Security Mode)和多个安全等级(Security Level),用于控制设备对GATT服务和数据的访问权限。安全模式与安全等级的配置直接影响设备的行为:是否允许未加密连接、是否要求认证、是否强制MITM保护等。
2.3.1 安全模式详解
- 模式1(Security Mode 1):基于加密的安全模式。Level 1表示无安全(允许明文传输),Level 2表示未认证的加密(通过Just Works配对),Level 3表示认证的加密(通过Numeric Comparison或Passkey Entry),Level 4表示带MITM保护的LE Secure Connections加密。
- 模式2(Security Mode 2):基于数据签名的安全模式。Level 1表示未认证的签名,Level 2表示认证的签名。该模式不加密数据,仅通过CSRK进行数据完整性验证,适用于对机密性要求不高但需要防篡改的场景。
- 模式3(Security Mode 3):仅适用于LE Secure Connections。Level 1表示无认证的加密,Level 2表示认证的加密,Level 3表示带MITM保护的认证加密。
2.3.2 安全等级选择策略
| 应用场景 | 推荐安全模式 | 推荐安全等级 | 配对方式 | 理由 |
|---|---|---|---|---|
| 心率传感器(无敏感数据) | 模式1 | Level 1 | 无需配对 | 数据公开,无需保护 |
| 运动手环(同步健康数据) | 模式1 | Level 2 | Just Works | 需要加密但无需身份认证 |
| 智能门锁(远程开锁) | 模式1 | Level 3/4 | Passkey Entry / Numeric Comparison | 必须防止MITM攻击 |
| 工业传感器(防篡改) | 模式2 | Level 2 | 认证签名 | 数据完整性优先于机密性 |
| 医疗植入设备 | 模式3 | Level 3 | OOB | 最高安全要求,防攻击 |
在nRF5 SDK中,安全模式与安全等级通过sd_ble_gatts_sec_set函数配置。每个GATT特征可以独立设置安全级别,例如允许设备名称公开读取,但心率数据需要加密读取。这种细粒度的安全策略设计,使得开发者可以在用户体验与安全性之间取得平衡。
sd_ble_gatts_sec_set分别设置不同特征的属性权限,实现了安全策略的差异化部署。
2.3.3 常见误区与复盘
误区2:忽略广播数据的安全。即使连接后加密,广播包中的设备名称、服务UUID仍可能泄露设备类型和厂商信息,攻击者可据此定位目标设备。
误区3:错误配置安全模式导致连接失败。例如,将服务设置为模式1 Level 3,但设备IO能力不支持Numeric Comparison,导致配对无法完成。开发者需要确保安全等级与设备硬件能力匹配。