BLE协议安全测试:抓包、解密、重放

admin 2026-03-09 02:59:15 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文演示了针对BLE设备的全链路安全测试。通过提取AndroidHCI日志获取密钥,结合nRFSniffer抓包,手动计算SessionKey解密流量,并成功实施重放攻击控制云台。文章揭示了链路层加密的局限性,并提出了包含滚动计数器、时间戳校验及HMAC签名等具体的防御建议。 综合评分: 89 文章分类: IoT安全,渗透测试,实战经验,漏洞分析


cover_image

BLE协议安全测试:抓包、解密、重放

原创

liulangmao liulangmao

流浪猫收容所

2026年3月6日 10:11 广东


BLE协议安全测试:抓包、解密、重

在物联网(IoT)安全领域,BLE协议(Bluetooth Low Energy)因其低功耗特性被广泛应用于智能家居、可穿戴设备等场景。本文将以一台Pixel 6手机和一款智能手机云台为例,完整演示“hci抓包-空口抓包-解密-重放”的分析过程。


抓取HCI层数据包

原理概述

Android 系统内置了 HCI(Host Controller Interface)层日志功能,开启后蓝牙协议栈会将主机与控制器之间的所有 HCI 命令、事件及 ACL 数据以 btsnoop 格式写入日志文件。该日志位于宿主机协议栈之上,能够捕获配对密钥交换、连接参数协商、GATT 属性读写等完整交互过程。

操作步骤

1. 开启开发者选项与 HCI 日志

在 Pixel 6上依次进

设置 → 关于手机 → 版本号(连续点击 7 次激活开发者模式)设置 → 系统 → 开发者选项 → 启用蓝牙 HCI 信息收集日志

开启后重启蓝牙(飞行模式切换一次),日志即开始写入。

2. 触发目标流量

将 Pixel 6 与目标 BLE 设备完成配对并执行控制操作,期间所有 HCI 交互均被记录。

3. 提取日志文件

# 强制开启 HCI snoopadb shell su -c "setprop persist.bluetooth.btsnooplogmode full"adb shell su -c "setprop persist.bluetooth.bluetooth_logger 1"# 通过 ADB 拉取日志adb pull /data/misc/bluetooth/logs/btsnoop_hci.log ./btsnoop_hci.log# 若遇权限问题,先以 root 身份复制到可读目录adb shell "su -c 'cp /data/misc/bluetooth/logs/btsnoop_hci.log /sdcard/'"adb pull /sdcard/btsnoop_hci.log ./btsnoop_hci.log

4. 使用 Wireshark 分析

Wireshark 打开 btsnoop_hci.log(Wireshark 原生支持 btsnoop 格式)


抓取 BLE 空口数据包

参考文章:《nRF Sniffer+wireshark嗅探蓝牙数据》 https://www.yuque.com/hxfqg9/iot/pet5rg

设备准备

Nordic nRF52840 DK 或 nRF52840 Dongle 刷入官方 Sniffer 固件后,配合 Wireshark 的 nRF Sniffer 插件,可在无需配对的情况下实时捕获空口原始 BLE 帧(包含 ADV、CONNECT_IND、LL 数据包等)。

固件刷写

Nordic官方的sniffer固件包下载页不知道为什么关了,github上找找现成的固件。

sniffer固件https://github.com/zapta/ble_stepper_motor_analyzer/blob/2d32e2d76fc9a5499a8f12fc83c1034aaca317c3/tools/nordic_sniffer/nrf_sniffer_for_bluetooth_le_4.1.1/hex/sniffer_nrf52840dongle_nrf52840_4.1.1.hexconnect固件https://github.com/makerdiary/nrf52840-mdk-usb-dongle/blob/main/firmware/ble_connectivity/connectivity_4.1.4_usb_with_s132_5.1.0.hex

安装nRF Connect for Desktop图形化工具,打开Programmer刷入sniffer固件。

安装 Wireshark 插件

插件下载地址:

https://github.com/zapta/ble_stepper_motor_analyzer/tree/main/tools/nordic_sniffer/nrf_sniffer_for_bluetooth_le_4.1.1/extcap
# 将插件目录复制到 Wireshark extcap 路径D:\iot\nRF52840\zapta_ble_stepper_motor_analyzer-main\tools\nordic_sniffer\nrf_sniffer_for_bluetooth_le_4.1.1\extcapλ python3 -m pip install -r requirements.txt# 安装wireshark插件E:\Wireshark\App\Wireshark\extcapλ nrf_sniffer_ble.bat --extcap-interfaces

抓包流程

连接上 nRF sniffer之后在 wireshark 的捕获->刷新接口列表就可以看到 nRF Sniffer for Buletooth LE 这个接口

在 视图 -> 接口工具栏 中有个工具,可以指定捕获哪些地址的数据

把智能手表解绑后重新用app绑定,让sniffer捕获整个认证过程的ble数据包。

可以看到空口数据包已被 Session Key 加密(AES-CCM)。

空口包与hci包区别

[手机应用层]     ↕  ← btmon 在这里抓包(HCI 层)[蓝牙控制器]  ← 加密/解密在控制器内部完成     ↕  ← 空中接口(无线电波,已加密)[ble设备]

BLE 链路层加密由控制器硬件完成,HCI 层的数据在进入控制器之前都是明文。


解密 BLE 空口加密流量

在 Wireshark 中注入密钥解密空口数据

尝试使用wireshark插件解密数据包,配置大小端SC LTK重新加载数据包文件,事与愿违,解密失败,尝试手工。

BLE LE Secure Connections 加密原理

BLE 4.2+ 引入 LE Secure Connections(SC)配对,使用 ECDH(P-256)协商生成 DHKey,再通过以下密钥推导链最终得到用于空口加密的会话密钥:

DHKey → LTK(长期密钥,128-bit)LTK + SKD(会话密钥多样化因子)→ Session Key(SK)Session Key + IV(初始化向量)→ AES-CCM 加解密

IV 由主从双方各提供 4 字节 Nonce 拼接而成(IVm || IVs),Session Key 通过 AES-128 ECB 以 LTK 加密 SKD 得到。

从 bt_config.conf 提取 LTK

Android 蓝牙配对信息(包含 SC LTK)以明文 HEX 存储在:

/data/misc/bluedroid/bt_config.conf

提取命令:

adb shell "su -c 'cat /data/misc/bluedroid/bt_config.conf'" > bt_config.conf

文件结构示例:

[fc:86:2a:db:7b:0c]Name = ** BandDevClass = 7936DevType = 2AddrType = 0Manufacturer = 2476LmpVer = 9LmpSubVer = 809LE_KEY_PENC = 1d275c06144490d3b95eb0721c6bad12000000000000000000000110LE_KEY_LENC = 1d275c06144490d3b95eb0721c6bad1200001001

其中 LE_KEY_LENC 的前 16 字节(32 个 HEX 字符)即为 LTK

注意bt_config.conf 需 root 权限读取,且格式因 Android 版本略有差异,部分版本使用 ble_ltk 字段名。

计算 Session Key 和 IV

从 LE_ENC_REQLE_ENC_RSP 命令中可直接读取 SKDm、IVm、SKDs、IVs:

Python 计算 Session Key 与 IV

解密数据包


实施重放攻击控制手机云台旋转

获取指令

使用pixel6连接手机云台,空口抓包获取指令

编写代码重放

转!

防御建议

针对此类攻击,设备固件应在应用层增加以下防护:

  • 滚动计数器

    :每条控制指令携带单调递增序列号,设备拒绝重放旧序列号的指令

  • 时间戳校验

    :指令中嵌入时间戳,设备校验时间窗口(如 ±5 秒)

  • HMAC 签名

    :使用设备与 App 共享的应用层密钥对指令进行 HMAC-SHA256 签名

  • 证书绑定

    :配合 BLE 配对绑定,限制仅授权设备可写入控制特征


总结

本文完整演示了针对 BLE 设备的安全研究链路:

Pixel 6 HCI 日志 → 获取完整协议交互及密钥素材 nRF52840 空口抓包 → 捕获加密原始帧 bt_config.conf LTK 提取 → 计算 Session Key/IV 解密密文 Bleak 重放攻击 → 复现控制指令使云台旋转

这一流程揭示了仅依赖链路层加密而缺乏应用层防护的 BLE 设备所面临的安全风险,为物联网安全研究人员提供了完整的测试方法论参考。


有事滴滴,欢迎指正




免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:流浪猫收容所 liulangmao liulangmao《BLE协议安全测试:抓包、解密、重放》

柔肩担重任·巾帼绽芳华 网络安全文章

柔肩担重任·巾帼绽芳华

文章总结: 金盾检测股份工会举办第116个三八妇女节表彰大会,采用线上线下结合方式表彰年度优秀女员工。总经理致辞肯定女员工贡献,董事长寄语发扬四自精神。活动包含
评论:0   参与:  0