首页
论坛
课程
招聘
[原创]手环BLE蓝牙认证绕过,可实现远程控制
2021-6-1 16:40 9382

[原创]手环BLE蓝牙认证绕过,可实现远程控制

2021-6-1 16:40
9382

01 低功耗蓝牙(BLE)

BLE是常见的手环所用蓝牙,低功耗蓝牙(Bluetooth low energy,简称BLE)指支持蓝牙协议4.0或更高的模块。相较于传统蓝牙,BLE的特点是最大化的待机时间、快速连接和低峰值的发送/接收功耗。BLE只在需要时传输少量数据,而除此之外则会保持关闭状态,这大大降低了其功耗,也使其成为了在低数据速率下需要长久连接使用的理想选择。


由此来看,BLE非常适合运用于手环这种数据量比较少的传输场景。下面分析手环认证机制后,进行认证绕过。


02 重放攻击



首先,手机开启开发者模式,在开发者选项中启用蓝牙HCI信息收集日志。然后,通过手机APP点击寻找手环功能,向手环发送蓝牙数据。

分析蓝牙日志,确认蓝牙重放句柄的handle和value,使用BLE调试助手或nRF Connect等蓝牙调试工具即可重放攻击。


03 认证机制分析



手环认证分两种情况,一种是未绑定的情况,一种是已绑定的情况。已绑定情况只是少了一步发送key到手环的步骤。由后面分析可知,已绑定的手环同样可以发送key值覆盖之前的key,所以这里只介绍未绑定的情况。

通过手机APP,绑定手环,抓取蓝牙日志。

首先,获取认证characteristic的descriptor,向desc句柄写入0x0100。


如果该手环处于未绑定的状态,需要向手环中写入0x0100+key(16 bytes)。

之后,手机APP端再向手环发送0x020002,来获取随机数。手环会返回0x100201+随机数(16 bytes)到手机APP端。

然后,手机APP端再将key与随机数加密,并以0x0300+加密数据(16 bytes)的形式发送给手环。

最后,手环内部将key与随机数按同样方式加密,对比加密数据,如果相同则返回0x100301,表示认证通过。失败则返回0x100304。

由于已知key,随机数及加密后的数据,我们可以推出,该加密方式为AES_ECB。


未绑定状态认证流程


04 认证机制绕过



根据上面分析,我们其实可以看出来这里面有一个很严重的漏洞。在手环未进行绑定的情况下,如果我写入任意key,根据返回的随机数,按AES_ECB的方式加密,再向手环发送正确的加密后的数据,即可绕过认证。

经多次测试,在已绑定的情况下,如果也向手环写入key,则可以覆盖掉之前的key(之前绑定的设备将无法连接,需重新绑定)。同样也能绕过认证机制。

最后通过蓝牙抓包,确定手环短信提示,来电提示,寻找手环等蓝牙包的handle及value,即可实现远程控制手环。



[注意] 欢迎加入看雪团队!base上海,招聘安全工程师、逆向工程师多个坑位等你投递!

收藏
点赞4
打赏
分享
最新回复 (10)
雪    币: 1460
活跃值: 活跃值 (319)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
mfkiwl 活跃值 2021-6-2 02:05
2
0
点赞。部分厂商硬是要用认证机制,实现数据必须上云的目的;绕过认证机制蛮有意义的
雪    币: 2018
活跃值: 活跃值 (1070)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
caolinkai 活跃值 2021-6-2 14:55
3
0
支持一下,文章很不错
雪    币: 5533
活跃值: 活跃值 (164)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
广岛秋泽 活跃值 2021-6-5 02:22
4
0
文章写的蛮不错,战术性Mark
雪    币: 1068
活跃值: 活跃值 (58)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
raax 活跃值 1 2021-6-7 11:15
5
0
Mark
雪    币: 209
活跃值: 活跃值 (163)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
SmallDolphin 活跃值 2021-6-7 12:43
6
0
Mark
雪    币: 20
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
建安十二年 活跃值 2021-6-9 14:01
7
0
嘿嘿
雪    币: 395
活跃值: 活跃值 (126)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
0bsidian 活跃值 2021-6-16 14:24
8
0
Mark
雪    币:
能力值: