1. 蓝牙通信安全威胁分析:中间人攻击、数据窃听、重放攻击、设备伪造、密钥泄露风险

BLE(Bluetooth Low Energy)通信在未经加密或仅使用传统 Legacy Pairing 时,面临多种安全威胁。攻击者可通过低成本硬件(如 nRF52840 Dongle)在广播、扫描、连接、数据传输各阶段实施以下五类攻击。理解每种威胁的原理与攻击面,是后续选择 Keystore 加密方案的前提。

课程前提:本章假设读者已了解 BLE 协议栈(GAP/GATT)基础,且已为应用申请了 BLUETOOTH_ADVERTISE、BLUETOOTH_CONNECT、BLUETOOTH_SCAN 等运行时权限。权限适配是加密通道建立的前置条件,但不在本章展开。
蓝牙通信安全威胁总览 配对/连接阶段 数据传输阶段 密钥管理阶段 设备固件 中间人攻击 设备伪造 数据窃听 重放攻击 密钥泄露 常见攻击 入口: 未认证广播 空密码 PIN

1.1 中间人攻击(Man-in-the-Middle, MITM)

攻击者在两台蓝牙设备(如手机与传感器)之间插入虚假连接,同时扮演“外围设备”与“中央设备”,实时转发(或篡改)未加密的协议数据单元(PDU)。在 BLE Legacy Pairing(Just Works)中,因为没有认证密钥,攻击者仅需监听配对过程的临时密钥(TK)即可完成劫持。

防护思路:使用 Secure Connections 模式(LE Secure Connections)或应用层额外加密(如 GATT 上的 AES-CCM)。Keystore 中存储的预共享密钥(PSK)可提供设备间独立于蓝牙栈的认证。

1.2 数据窃听(Eavesdropping)

BLE 工作在 2.4GHz ISM 频段,未加密的数据包在空中以明文传输。攻击者通过 BLE 嗅探器(如 Wireshark + nRF Sniffer)即可捕获所有 Attribute Protocol(ATT)读写请求和响应。窃听在 Legacy Pairing 中尤其严重:即使使用了 STK(Short Term Key),若 TK 在配对过程中被泄露(如固定为 000000),则 STK 可被计算,后续链路加密形同虚设。

攻击阶段 抓包内容示例 信息泄露风险
广播扫描设备名称、UUID、制造商数据设备类型泄露,可被定位追踪
配对过程TK/STK、LTK、IRK长期密钥泄漏,后续所有会话被破解
数据传输传感器读数、令牌、用户输入敏感数据(心率、地理坐标、支付信息)泄露

1.3 重放攻击(Replay Attack)

攻击者先记录一次合法的加密数据包(如“解锁门”指令),然后在任意时刻重放该数据包,使接收方再次执行相同操作。BLE 协议在链路层使用 Packet Counter 和 IV 防止重放,但在应用层未使用计数器或时间戳时,攻击者仍可能在协议栈外重放。

// 典型重放场景:BLE 锁
// 合法数据包(加密后):0x01 0x02 0x03 0x04 0x05 0x06 ...  (静态指令)
// 重放时直接发送完全相同的字节序列,锁端未做防重放校验 -> 开锁
// 防护:每次指令加入单调递增序列号,并在接收方验证序列号是否大于上次记录。

1.4 设备伪造(Spoofing / Impersonation)

攻击者通过嗅探获得合法设备的蓝牙 MAC 地址(可修改),使用已公开的 Identity Resolving Key(IRK)或直接复制设备广播数据,伪造一个与原设备同名的“克隆设备”。用户手机无法区分真假连接,将敏感数据发送给攻击者。

  • MAC 地址欺骗:BLE 4.2 前使用静态随机地址,攻击者可直接拷贝。
  • 广播数据克隆:若设备未在广播中包含数字签名或认证字段,伪造非常容易。
  • 配对后冒充:若 LTK 已被窃取,攻击者可成功完成后续连接加密协商。

1.5 密钥泄露风险(Key Leakage)

蓝牙密钥(LTK、IRK、CSRK)通常存储在设备的 NVRAM 或系统密钥池中。在 Android 上,Legacy 方式使用 BluetoothDevice.setPairingConfirmation 等 API 时,密钥可能以明文形式传入应用内存。此外,以下场景都可导致密钥泄露:

  1. 应用内存 dump:调试工具(如 Frida、Xposed)可读取 Java/Kotlin 堆中的密钥 byte[]。
  2. 文件系统未加密:SharedPreferences 或 SQLite 中明文存储 LTK。
  3. 日志泄漏:Log.d 输出密钥字节(常见于调试阶段)。
  4. 备份恢复:ADB backup 或云备份包含密钥文件。
核心原则:即便使用了蓝牙官方定义的 Secure Connections,其在应用层依然存在以上威胁。因此,本课程在权限适配后,使用 Android Keystore 生成/存储会话密钥,并在应用层对 BLE 数据进行 AES-GCM 或 AES-CCM 加密——与蓝牙链路层加密形成双层防护。

1.6 五种威胁的防护优先级概述

威胁 当前 Android BLE 原生防护 本课程 Keystore 加密增强点 优先级
中间人攻击LE Secure Connections (BLE 4.2+)应用层签名 + 会话密钥预置⭐⭐⭐
数据窃听链路层 AES-CCM 加密应用层全包加密(包含 ATT 头部)⭐⭐⭐
重放攻击Packet Counter(链路层)应用层单调序列号 + MAC⭐⭐
设备伪造Resolvable Private Address + IRK应用层 RSA/ECDSA 数字签名⭐⭐
密钥泄露系统密钥存储(TEE/StrongBox 有限支持)Keystore 硬件级加密 + 访问控制⭐⭐⭐⭐