12、BLE连接劫持攻击:连接参数更新攻击、连接超时利用、连接ID伪造、会话恢复攻击

各位同学,今天我们来聊一个非常刺激的话题——BLE连接劫持

说实话,我在做蓝牙安全评估的头两年,一直觉得BLE的连接机制挺健壮的。直到有一次,我在帮客户分析一款智能门锁的协议时,亲眼目睹了攻击者如何在几毫秒内把合法手机踢下线,然后自己冒充上去开锁。嗯,从那以后,我对BLE连接的信任度就大打折扣了。

连接劫持,说白了就是攻击者通过各种手段,夺取或伪装成合法的BLE连接。它不像配对攻击那样需要破解密钥,而是直接对连接过程本身下手。今天我会从四个维度来拆解:连接参数更新、连接超时利用、连接ID伪造、会话恢复攻击。

12.1 连接参数更新攻击

先说说连接参数更新。BLE连接建立后,从设备可以发起一个LL_CONNECTION_PARAM_REQ请求,要求改变连接间隔、延迟、超时等参数。这个请求在规范里是允许的,但问题在于——它没有强身份验证

攻击者只要在连接期间伪造一个参数更新请求,就能把连接间隔拉得非常大。比如从正常的30ms改成400ms。你想想看,这意味着什么?

  • 连接变得极其迟钝,数据包发送间隔变长
  • 攻击者可以利用这个间隙插入自己的数据包
  • 甚至可以把连接超时设得极短,迫使连接断开

核心攻击流程:

  1. 攻击者嗅探到连接参数更新请求的时机
  2. 伪造一个LL_CONNECTION_PARAM_REQ,携带恶意参数
  3. 主设备接受后,连接参数被篡改
  4. 攻击者利用参数变化后的窗口进行数据注入

我在项目中遇到过一款智能手环,它的固件对参数更新请求来者不拒。攻击者只需要在连接建立后的任意时刻发送一个参数更新包,手环就会乖乖接受。结果就是,手环和手机之间的连接变得极其不稳定,攻击者轻松插入虚假通知。

避坑指南:我曾经在给某IoT厂商做安全审计时,建议他们在应用层对参数更新请求做签名验证。具体做法是:在参数更新请求中嵌入一个随机数,主设备验证通过后才接受。虽然会增加一点延迟,但能有效防止这种攻击。

12.2 连接超时利用

连接超时,这个机制本来是为了在设备离开范围时自动断开连接。但攻击者可以利用它来制造连接中断,然后趁机插入自己的连接。

具体怎么操作?攻击者会持续发送干扰信号,让合法设备之间的数据包丢失。当连接超时计数器归零时,连接就断了。这时候攻击者立刻发起连接请求,冒充原来的设备。

为什么会这样?因为BLE的连接超时参数是在连接建立时协商的,而且很多设备不会在连接断开后立即清除安全上下文。攻击者只要卡准这个时间窗口,就能完成劫持。

攻击步骤 攻击者行为 合法设备状态
1 发送干扰信号,制造丢包 正常通信,但丢包率上升
2 持续干扰,直到连接超时 连接断开,进入扫描状态
3 立即发起连接请求,使用伪造身份 收到新连接请求,可能接受
4 完成连接,冒充合法设备 被踢出,或与新连接共存

注意:这种攻击对低功耗设备尤其有效。因为很多BLE设备为了省电,连接超时设得很短(比如5秒)。攻击者只需要干扰几秒钟,连接就断了。我见过一个医疗设备,它的连接超时只有3秒,攻击者几乎不费吹灰之力就能让它断连。

12.3 连接ID伪造

连接ID,也就是Access Address,是BLE连接的唯一标识。每个连接都有一个32位的随机Access Address。攻击者如果能猜到或嗅探到这个值,就能伪造数据包。

你可能会问:Access Address不是随机的吗?怎么猜?

嗯,这里有个坑。有些芯片厂商在实现时,Access Address的随机性并不好。我见过某款主流蓝牙芯片,它的Access Address生成算法存在缺陷,导致只有16位的有效随机空间。攻击者只需要枚举65536种可能,就能在短时间内碰撞成功。

更可怕的是,如果攻击者能嗅探到连接建立过程中的第一个数据包,Access Address就直接暴露了。因为连接建立时的CONNECT_REQ PDU里就包含了Access Address,而且是明文传输的。

攻击手法:

  • 嗅探法:监听连接建立过程,直接获取Access Address
  • 暴力枚举:对随机性弱的芯片,枚举所有可能的Access Address
  • 重放攻击:记录合法的数据包,修改内容后重放

我个人习惯在测试BLE设备时,先用Sniffer抓一下连接建立过程。如果发现Access Address是固定的或者可预测的,那基本可以判定这个设备存在连接ID伪造风险。

12.4 会话恢复攻击

最后聊聊会话恢复。BLE 4.2引入了LE Secure Connections,支持会话恢复功能。这个功能的本意是好的——设备重新连接时,不需要重新配对,直接恢复之前的加密会话。

但问题出在会话恢复的凭证管理上。恢复会话需要用到LTK(长期密钥)和IRK(身份解析密钥)。如果这些密钥在恢复过程中被泄露或重用,攻击者就能冒充设备恢复会话。

我记得有一次,我在分析一款蓝牙耳机的固件时发现,它的会话恢复逻辑有个严重漏洞:耳机在恢复会话时,不会验证对端的身份。攻击者只要知道LTK,就能直接恢复会话,然后窃听音频数据。

更常见的攻击方式是会话恢复重放。攻击者记录下一次完整的会话恢复过程,然后在合法设备断开后,重放这些数据包。如果设备没有做时间戳或随机数验证,就会接受这个重放的恢复请求。

防御建议:我曾经给一个客户设计过一套会话恢复保护方案。核心思路是:在恢复请求中加入一个一次性随机数(Nonce),并且这个Nonce必须在每次恢复时都不同。设备端验证Nonce的唯一性,如果发现重复,直接拒绝恢复。这样就能有效防止重放攻击。

知识体系总览

下面这张图总结了BLE连接劫持攻击的四个维度和它们之间的关系。你可以看到,攻击者可以从参数、超时、ID、会话四个入口切入,最终目标都是夺取或伪装连接。

BLE连接劫持攻击 连接参数更新攻击 伪造 LL_CONNECTION_PARAM_REQ 篡改连接间隔/超时参数 制造通信窗口插入数据 连接超时利用 发送干扰信号制造丢包 触发连接超时断开 立即发起伪造连接 连接ID伪造 嗅探/枚举 Access Address 伪造数据包注入 重放攻击 会话恢复攻击 LTK/IRK泄露或重用 会话恢复重放 身份验证缺失 目标:夺取或伪装BLE连接,绕过安全认证

好了,这一章的内容就到这里。连接劫持攻击的四个维度,每一个都有其独特的攻击面和防御策略。在实际项目中,我建议你从连接参数验证、超时机制加固、Access Address随机性检查、会话恢复身份验证这四个方面入手,逐一排查。

记住,攻击者往往不会只用一个手法,而是组合使用。比如先利用连接超时断开连接,再伪造连接ID重新连接,最后通过会话恢复获取密钥。所以防御也要成体系,不能只堵一个漏洞。


公众号:蓝海资料掘金营,微信deep3321