基于 nRF Sniffer 的 BLE 智能灯泡协议逆向与重放攻击
漏洞分析
本文详细记录了对某智能灯泡的低功耗蓝牙(BLE)安全测试全过程。文章从 Wireshark 与 nRF52832 抓包环境的搭建切入,直击物联网设备通信痛点,演示了如何捕获设备指令、逆向分析 GATT 读写 Payload,并成功利用 nRF Connect 实施重放攻击接管设备。文末针对实测漏洞,提出了引入随机数、挑战-应答机制及链路层加密等安全防护建议。
**本文涉及的技术仅供安全研究与学习参考,请勿用于非授权的真实环境攻击。** 一、攻击环境 ====== 1. 目标设备:LIfeSmart 的某款智能灯泡 2. 手机端 LifeSmart App 3. 抓包工具:Wireshark 4.6.5 + nRF52832 Dongle 4. 发包工具:Android nRF Connect 二、BLE 协议 ======== 1. BLE 通信流程 ----------- 什么是BLE? ```php BLE是蓝牙低功耗的缩写,是一种专为低功耗应用设计的蓝牙技术标准,与传统蓝牙相比具有更低的功耗、较短的时间和简化的通信协议等 ``` BLE工作过程如下: **1、角色** BLE设备角色主要分为两种角色,`主机(Central)`和`从机(Peripheral)`,当主机和从机建立连接之后才能相互收发数据 **2、广播** 在BLE技术中,广播用于设备之间的发现和连接。当BLE设备处于广播模式时,它会周期性地发送广播包(Advertising Packets)来向周围的其他设备宣告自己的存在和提供的服务信息。广播数据包最多能携带31个字节的数据,广播包中通常包含设备的唯一标识符、设备类型、支持的服务等信息。 以下是广播在使用过程中的几个重要作用: 1. **设备发现**:通过广播,其他设备可以扫描周围的信道,检测到广播的设备并获取其信息,从而实现设备之间的发现和识别。 2. **建立连接**:当设备发送广播包时,其他设备可以解析其中的信息,确定是否与该设备建立连接。广播可以帮助设备快速建立连接,实现数据交换和通信。 3. **节省能量**:相比于主动扫描或保持持续连接,使用广播可以有效地节省设备的电量。设备只需要定期发送广播包,而无需保持长时间的连接状态。 4. **提供服务信息**:广播包中可以包含设备支持的服务、特征值等信息,帮助其他设备了解该设备的功能和可用服务,从而实现更加智能化的连接和交互。 **3、扫描** 扫描是主机监听从机广播数据包和发送扫描请求的过程,主机通过扫描,可以获取到从机的广播包以及扫描回应数据包,主机可以对已扫描到的从机设备发起连接请求,从而连接从机设备并通信。 **4、连接**  (图文部分参考自:<https://zhuanlan.zhihu.com/p/687355390>) 2. ATT/GATT协议 ------------- [4. 蓝牙协议ATT、GATT层介绍 — bluetoothlover\_wiki 0.0.1 documentation](https://asfsdfasf.readthedocs.io/en/stable/01_helloworldzlg/02_introduce/03-%E8%93%9D%E7%89%99%E5%8D%8F%E8%AE%AEATT%E3%80%81GATT%E5%B1%82%E4%BB%8B%E7%BB%8D.html) 在这个蓝牙灯泡中,ATT/GATT交互流程 手机 App ↓ Write Request (0x0012) 灯泡 ↓ Write Response 灯泡 ↓ Notification (0x0016) 手机 App ↓ Read Request (0x0014) 灯泡 ↓ Read Response 三、nRF52832 BLE 抓包sniffer ======================== 为什么需要NRF Sniffer区抓包? -------------------- 普通windows电脑并不能抓取大部分的BLE通信包,有如下原因: 1. WIndows蓝牙适配器看不到空中的BLE数据包,而只能看到自己配对,自己参与的通信,例如手机与智能手环通信过程中,电脑只是旁观者,普通的蓝牙网卡看不到完整的通信过程,看不到连接建立后的数据 2. 由于BLE工作在2.4GHz频段,共有3个广播信道(37、38、39)和37个数据信道(0-36)。当配对连接建立后双方会按照算法不断地切换频道,每秒可切换数百次,普通的蓝牙适配器不知道当前在哪个信道也无法同步调频跟踪,所以无法完整监听 而nRF Sniffrer可以捕获广播包监听连接建立,同时跟踪调频将数据实时发送给wireshark nRF Sniffer如何配置? ---------------- 首先安装wireshark,注意安装时候需要勾选Npcap和USBPcap  全部勾选即可   其他位置默认即可 注意wireshark最好以管理员模式启动,否则每个抓包节点会一直请求管理员权限 ### 安装CP2102驱动  驱动下载链接:『来自123云盘用户15982553848的分享』CP210x\_Universal\_Windows\_Driver.zip 链接:<https://1836347495.share.123865.com/123pan/ji9fTd-5mRm3?pwd=V5AK>\# 提取码:V5AK  点击选择解压的文件夹安装即可 Wireshark设置nRF52832 Sniffer插件 ----------------------------- 打开wireshark:帮助 - 关于  把解压内容文件夹extcap中的内容复制到步骤 的路径中。注意这个插件在网上流传版本似乎已经很是古老了,特别是对于与wireshark的插件竟然还在Python 2.7,并且与当前新版本的Wireshark并不能使用,所以我自行对插件进行了一些调整,在现版本下可以完美运行 下载链接:[https://github.com/vstralcn/nRF52832\_WireShark\_cap](https://github.com/vstralcn/nRF52832_WireShark_cap)-  在菜单栏中勾选插件:  然后就可以抓包了  四、攻击过程 ====== 1.启用Wireshark开启抓包 ----------------- 需要在建立连接前提前开启  2.锁定灯泡设备 --------   BLE 建立连接后,应用层数据主要通过 ATT(Attribute Protocol)承载,因此使用:btatt 过滤ATT数据包,重点观察Write Request、Handle Value Notification、Read Response等GATT交互行为 3.追踪数据包 ------- 断开app与灯泡连接,然后重新启动 抓到来自灯泡和手机app的大量蓝牙数据包  等待指示灯信号稳定  4.测试定位信号 -------- 重复开关灯捕获信号 关灯信号:  开灯信号:  可以得出 关灯:0e00000000000000000000040**50**20**180** 开灯:0e00000000000000000000040**60**20**181** 根据GATT数据包分析,可以得出Handle映射: | Handle | 作用 | |---|---| | 0x0012 | Write | | 0x0014 | Read | | 0x0016 | Notify | Characteristic UUID: | 项目 | UUID | |---|---| | Service UUID | 9fdc... | | Write Characteristic | ac7b... | 5.多次对比验证分析 ---------- - 第一次开灯:0e00000000000000000000040**4**02018**1** - 第一次关灯:0e00000000000000000000040**5**020180 - 第二次开灯:0e00000000000000000000040**6**02018**1** - 第二次关灯:0e00000000000000000000040**7**020180 - 第三次开灯:0e00000000000000000000040**8**02018**1** - 第三次关灯:0e00000000000000000000040**9**020180 断开设备重新连接配对,然后开灯: - 1开:0e000000000000000000000403020181 - 1关:0e000000000000000000000404020180 然而数据包中并没有0e00000000000000000000040**1**02018**1**和0e00000000000000000000040**2**020180 再次重新配对: - 1关:0e00000000000000000000040**3**020180 根据对比分析发现其实第七个数字并没有校验,只是app端发送时做了每一次递增,实则每次发送同样的也并没有影响,关键只在于最后一个字符为0 或者 1,为0则关灯,为1则点亮 6.重放 ---- 使用nRF Connect App,发送0e000000000000000000000405020180   在未使用原厂 App 的情况下,仅通过重放捕获到的 ATT Write Request,即可直接控制目标灯泡状态,说明该设备控制协议缺乏有效的重放防护机制。 五、技术点分析 ======= 1. Follow Device 机制 ------------------- 由于 BLE 连接建立后会进行信道跳频,因此 Nordic Sniffer 必须提前锁定目标设备并捕获 CONNECT\_IND,才能持续跟踪后续 ATT 数据流。 2. 安全性修复分析 ---------- 1. Replay Attack 防护 ------------------- 当前 ATT Write Request可以直接重放,而没有任何保护措施,可以增加以下保护措施: ### 1.增加随机数 Nonce 当前协议中没有增加随机数或动态字段,攻击者可以直接重放历史 ATT Request即可控制设备,如果在控制指令中加入随机数、时间戳、会话表示,并在设备端校验有效性,从而避免重放攻击 ### 2.Challenge-Response机制 在车机ECU,通过Challenge-Response机制进行验证UDS检测来源合法性,当设备在建立连接后,可先下发随机 challenge,由客户端基于 challenge 和共享密钥生成响应值,设备仅接受合法 challenge-response 计算结果,从而避免攻击者直接重放固定控制命令。 ### 3. 加密保护 启用 BLE Link Layer Encryption,并强制设备在配对完成后才能执行敏感控制操作。当前设备协议Characteristic 权限过宽。可以通过增加会话绑定限制
发表于 2026-06-25 09:33:48
阅读 ( 3926 )
分类:
硬件与物联网
3 推荐
收藏
0 条评论
JiuMeng
1 篇文章
×
温馨提示
您当前没有「奇安信攻防社区」的账号,注册后可获取更多的使用权限。
×
温馨提示
您当前没有「奇安信攻防社区」的账号,注册后可获取更多的使用权限。
×
举报此文章
垃圾广告信息:
广告、推广、测试等内容
违规内容:
色情、暴力、血腥、敏感信息等内容
不友善内容:
人身攻击、挑衅辱骂、恶意行为
其他原因:
请补充说明
举报原因:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!