文章总结: 本文演示了针对BLE设备的全链路安全测试。通过提取AndroidHCI日志获取密钥,结合nRFSniffer抓包,手动计算SessionKey解密流量,并成功实施重放攻击控制云台。文章揭示了链路层加密的局限性,并提出了包含滚动计数器、时间戳校验及HMAC签名等具体的防御建议。 综合评分: 89 文章分类: IoT安全,渗透测试,实战经验,漏洞分析
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_REQ、LE_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协议安全测试:抓包、解密、重放》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论