攻击
1、覆盖密钥
2、万能密码
3、利用中间人进行重放攻击
比较
1、数据分析
2、攻击比较
附录
1、覆盖密钥
从上面的分析可以看到密钥是APP写入设备的,那么我们可以把设备重置掉,然后写个key进去,然后就能用电脑模拟 app控制设备了。
步骤为:
1. 首先访问handle:0x0013触发初始化
2. 向0x000c写入设备号及24个密钥信息
3. 访问0x0013获取此次认证的挑战码
4. 使用python程序计算认证码
5. 向0x000c写入认证码,完成配对
6. 向0x000c写入操作行为,操作门锁
具体操作如下
此时写入密钥成功
配对过程:
此时设备端提示:
此时已经完成了认证过程,然后就可以写数据进入了:
设备端提示:
此时完成了整个设备的控制。
2、万能密码
步骤和一类似,只是不需要覆盖密钥信息了,直接使用4861636b6d654c6f636b4d6173746572通过认证。
3、利用中间人进行重放攻击
利用嗅探工具或中间人获取到ble传输的信息,提取响应的密钥信息,后续使用该密钥进行认证进行操作,改方法不需要
重置设备
根据嗅探或中间人截获到的认证码,使用中间人进行数据的重放攻击
我们在APP上关闭锁操作:
设备端提示:
显示锁处于关闭状态,我们在btlejuice上进行开锁的重放攻击:
操作完成后可以看到设备端提示:
锁已经完成了打开操作。
1、数据分析
分析蓝牙数据可以更清除的知道整个数据的逻辑流程,利用wireshark进行分析更加清楚btle协议。
ubertooth 功能很强大,但是要是自己配置运行环境比较复杂,还要有docker镜像,但是捕获数据比较麻烦,需要正确捕获到此次传输的频段。
中间人,能很好的知道数据的逻辑流程和传输数据,但是需要配置代理,需要又一个额外的系统进行支持。
2、攻击比较
覆盖密钥方法:需要初始化设备,需要搞清楚整个认证流程,自己写AES加密算法。
中间人攻击:不需要自己去计算认证码,直接重放数据即可,但是配置比较麻烦。
AES加密代码: