【胖猴小玩闹】智能门锁与BLE设备安全Part 3: 耶鲁智能门锁的简单测试(下) - 嘶吼 RoarTalk – 网络安全行业综合服务平台,4hou.com

【胖猴小玩闹】智能门锁与BLE设备安全Part 3: 耶鲁智能门锁的简单测试(下)

企业资讯 技术 2020-04-07 10:50:00
1020685
收藏

导语:在本专题第三篇文章中,我们研究发现了Yale智能门锁的通信中存在一些问题。

【胖猴小玩闹】智能门锁与BLE设备安全Part 3: 耶鲁智能门锁的简单测试(上)

1.简介

在本专题第三篇文章中,我们研究发现了Yale智能门锁的通信中存在一些问题。在本专题第四篇中(本篇),我们将进行一个“小玩闹”,即利用这些问题实现未授权开锁,具体的操作步骤如下:

a. 嗅探BLE通信获取productInfo;

b. 使用获取的productInfo控制门锁。

在后文中将详细介绍每一步的操作内容。

2. 嗅探BLE通信

Yale门锁的BLE通信没有加密,所以我们通过嗅探的方式可以直接获取Authentication Request和Authentication Response,利用这两个数据包的Payload做减法运算即可得到productInfo。

2.1 嗅探工作

嗅探BLE通信需要有专用的硬件工具,我们使用的是CC2540 Dongle,配合TI的Packet Sniffer软件,如图2-1所示。

图片1.png

图2-1 CC2540 Dongle+Packet Sniffer软件

Dongle直接接到电脑的USB接口即可使用,Packet Sniffer软件可以对Dongle进行配置,并展示Dongle嗅探到的BLE通信数据。

我们在第一篇文章中介绍过,Master在Scanner状态下,会不断地扫描并接收Slave在Advertiser状态下发出的广播包。在BLE通信的全部40个信道中,广播包的发送和接收固定在其中3个信道上进行的,Master想要与某个扫描到的Slave建立连接时会进入Initiator状态并向Slave发起连接请求,双方建立连接后会在其他37个通信信道上以一定的规律进行调频通信。

由于连接建立后,双方以跳频的方式进行通信,而我们并没有全频谱嗅探工具,所以我们必须在Master和Slave建立连接时,也就是Master发出CONNCET_REQ数据包时,开始跟踪双方的通信,与通信双方同步跳频,才能嗅探到完整的通信内容。

因此,Dongle的工作原理如图2-2所示,整个嗅探流程可以分为三个步骤:

a. 启动完成后,Dongle监听某一个广播信道,会嗅探到所有附近设备在该信道上的进行的广播包;

b. 当探测到CONNECT_REQ数据包时,说明该信道上有Master和Slave准备建立连接,此时Dongle会解析CONNECT_REQ数据包的内容,并自动开始跟踪这两个设备的通信过程;

c. 此后,Dongle不再展示其他设备的广播内容,而只显示步骤b中,建立链接的设备双方通信内容。

图片2.png

图2-2 Dongle工作原理示意图

一个Dongle只能监听一个广播信道的通信,而通信双方可能会在3个广播信道中随机挑选一个建立通信,因此如果只有一个Dongle时,可能需要多次尝试才能获得需要的数据,有多个Dongle时则可以分别将它们配置为监听不同的广播信道,选择Dongle并配置监听信道的方式如图2-3所示。

图片3.png

图2-3 选择并配置Dongle

以上就是USB Dongle的简单介绍,下面我们进入正题。BLE嗅探的操作非常简单,配置好Dongle后,点击Packet Sniffer中的开始嗅探按钮,就可以看到Dongle接收到的所有广播包,如图2-4所示。

图片4.png图2-4 嗅探到的广播包

开始嗅探后,我们在Dongle附近尝试在app里连接门锁,如果手机和门锁恰好是在Dongle监听的广播信道上建立连接,那么就可以抓到后续手机和门锁之间BLE通信内容,如图2-5所示。

图片5.png图2-5 手机与门锁建立通信

图2-5中,从黄色数据包开始,手机和门锁的通信开始跳频,可以看到Channel字段每次通信都会变化,而建立通信前的最后一个广播包的类型就是CONNECT_REQ,Dongle是通过这个数据包来跟踪双方随后的跳频通信的。

最后还需要说明,Dongle一次只能监听一个广播信道,所以我们可能需要多次重复才能嗅探到手机和门锁的通信。

2.2 数据包分析

拿到通信内容之后,我们只要找到Authentication Request和Authentication Response即可,要定位这两个数据包,则需要知道数据包的特征和结构。

回想上一篇文章,在生成Payload并发送Authentication Response之前,调用过一个makeACKFrame的函数,从函数名看,这个函数的作用是将Payload封装成ACK Frame,我们就从这里着手分析。

首先我们看一下调用makeACKFrame的地方,如图2-6所示。

图片6.png

图2-6 函数调用处

makeACKFrame函数有4个参数,其中v2、v3是两个固定内容的字节,用于表示包类型,v4显然是个累加的计数器,最后一个参数arg7,我们上一篇文章中就提到了,这个参数是encodeCounter函数的返回值,也就是Authentication Response的Payload。

在本专题第三篇文章中日志内容截图,如图2-7,第三条日志输出send 72ACK的内容,起始字节是0x72和0xA1,即上文中v2和v3的变量值。所以,我们可以推断Authentication Reponse起始字节是固定的0x72A1,这一点可以作为数据包的特征。帮助我们在BLE嗅探数据中快速找到的Authentication Response。

图片7.png

图2-7 app的日志

此外, 在FrameModel类的toString函数中,可以更直观地看出Authentication Response的数据包结构,这个函数如图2-8所示。

图片12.png

图2-8 FrameModel类的toString函数

根据此图可以猜测BLE通信内容的帧结构如下:

a. 开始的两个字节是event和source;

b. 第3个字节表示数据包的序号,第4个字节则是长度,我们暂时还不清楚这是数据包的长度还是Payload的长度;

c. 第5字节开始是数据包的Payload;

d. 最后一个字节是校验。

根据以上结论,我们在嗅探到的通信中定位到图2-9了这样一组数据包,红框中即为Request和Response两次通信:

图片8.png

图2-9 嗅探到的BLE通信

根据起始字节是0x72A1这一特征,第二个数据包应该就是Authentication Response,那么第一个数据包应该是Authentication Request,Response数据包的结构分析如图2-10。

图片9.png

图2-10 数据包结构

通过类似的方式可以取出Request数据包的Payload,按照上一篇文章的分析,只需要将Response的Request两个数据包的Payload做差运算即可得到这个门锁的productInfo,做差运算过程如图2-11。

图片10.png

图2-11 计算productInfo

最后,我们可以通过adb工具从手机中取得Yale app的应用数据库,其中显示了已绑定门锁的productInfo,如图2-12所示。

图片11.png

图2-12 数据库中的productInfo

对比图2-11和图2-12,可以看到product info二者部分字节是相同的,结合本专题第三篇的分析,可以确定productInfo只有前6个字节参与了计算。在接下来的操作中可以进一步验证,其他字节置0也能够开启门锁。

3. 未授权开锁

前文提到手机和门锁的认证过程完全依靠product_info字段,如果我们在未绑定门锁的手机上,跳过门锁绑定步骤,直接将计算得到的product_info等相关信息写入到app的数据库中会出现什么情况呢?接下来我们对这种情况进行复现。

我们修改数据库的办法很简单:通过ADB将app中的数据库(位于/data/data/com.irevo.blepack/databases目录下)拉取到电脑上,在电脑上修改完成后再推送回app。

使用ADB获取该app的数据库文件有一个前提,即我们必须拥有root权限或者使用run-as指令。而使用run-as指令,需要指定的应用处于允许debug的模式,所以我们在上一篇文章中添加Log代码时,也在AndroidManifest.xml文件中添加了Android:debuggable = true的标签。

在未绑定门锁的手机中,数据库应该是空的。空数据库的填写方式如图3-1所示。除了product_info外,还有一个module_addr字段需要注意,这个字段应该填写门锁的蓝牙地址,这个地址可以在门锁附近,使用nRF Connect扫描周围设备获取。

图片13.png

图3-1 app数据库填写方式

数据库填写完成后,使用ADB指令推送回手机,即可使用该手机控制门锁了。如图3-2所示,手机最初并没有绑定门锁,在我们将数据库推送进手机后,重启app,会发现手机开始尝试与门锁建立连接,稍等片刻连接建立之后,就可以直接用这个手机打开门锁了。

图3-2缩小版 (1).gif

图3-2 用未绑定门锁的手机打开门锁

4. 总结

本篇为耶鲁智能门锁的简单测试下篇,也是本专题的第四篇文章。在本篇中,我们介绍了用于嗅探BLE通信的USB Dongle,并借助这个Dongle分析了门锁和手机的BLE通信数据,完成利用Yale门锁的安全问题实现未授权开锁。

这次对Yale智能门锁的研究仍然是从BLE入手,重点逆向分析了安卓手机端的app代码。而智能门锁种类繁多,开锁方式也不只有BLE这一种方式。在此后的文章中,我们会和大家分享更多的例子,大家如果有想要讨论或者分享的事情,欢迎发邮件到pwn@pwnmonkey.org。

作者:Light & Yimi Hu @ PwnMonkeyLabs

本文为 胖猴实验室 原创稿件,授权嘶吼独家发布,如若转载,请注明原文地址
  • 分享至
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

发表评论

 
本站4hou.com,所使用的字体和图片文字等素材部分来源于原作者或互联网共享平台。如使用任何字体和图片文字有侵犯其版权所有方的,嘶吼将配合联系原作者核实,并做出删除处理。
©2022 北京嘶吼文化传媒有限公司 京ICP备16063439号-1 本站由 提供云计算服务