1

简介

上一篇文章的分析中,我们发现Yale智能门锁的通信中存在两个问题,本篇文章将分为两个部分描述如何利用这两个问题:

a. 嗅探BLE通信获取productInfo;

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

2

嗅探BLE通信,获取productInfo

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

2.1 嗅探通信

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

图2-1 CC2540 Dongle+Packet Sniffer软件

Dongle直接接到电脑的USB接口即可使用,Packet Sniffer软件可以对Dongle进行配置,并显示嗅探到的BLE消息。

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

由于连接建立后,双方以跳频的方式进行通信,因此我们只能在Master和Slave建立连接时,也就是Master在Initiator状态下发出CONNCET_REQ数据包时,就开始跟踪双方的通信,才有可能嗅探到所有通信内容。

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

a. 启动完成后,Dongle工作在某一个广播信道上,会嗅探所有该信道上的广播包;

b. 当探测到CONNECT_REQ数据包时,说明该信道上有Master和Slave准备建立连接,此时Dongle会解析CONNECT_REQ数据包的内容,获取主从设备的信息及双方第一次跳频通信的通信信道;

c. 此后,Dongle只会过滤步骤b中主从设备之间的通信,并跟随双方的跳频,这样双方所有的通信都被嗅探到了。

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

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

图2-3 选择并配置Dongle

介绍完嗅探工具,我们就可以尝试嗅探通信了。

嗅探的操作非常简单,配置好Dongle后,点击Packet Sniffer中的开始嗅探按钮,就可以看到Dongle接收到的所有广播包,如图2-4所示。

图2-4 嗅探到的广播包

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

图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所示。

图2-6 函数调用处

调用makeACKFrame函数时传入了4个参数,其中v2、v3分别是已经初始化好的变量,所以Authentication Response中应该有两个固定内容的字节,v4显然是个累加的计数器,最后一个参数arg7,我们上一篇文章中就提到了,这个参数是encodeCounter函数的返回值,也就是Authentication Response的Payload。

我们在上一篇文章中获取到的日志,如图2-7,send 72ACK的内容,起始字节是0x72和0xA1,而图2-6中,参数v2和v3分别包含了HexString(72)和HexString(A1)。所以,我们可以推断Authentication Reponse起始字节是固定的0x72A1,这一点可以作为数据包的特征。帮助我们在嗅探到的通信中寻找Authentication Response。

图2-7 app的日志

makeACKFrame的结果在v1中,打印Log时调用了v1.toString(),这个函数如图2-8所示。

图2-8 FrameModel类的toString函数

在toString函数中我们能直观的看出Authentication Response的数据包结构:

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

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

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

d. 最后一个字节是校验,校验算法暂时未知。

通过数据包的特征,我们在嗅探到的通信中定位到图2-9了这样一组数据包。

图2-9 嗅探到的BLE通信

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

图2-10 数据包结构

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

图2-11 计算productInfo

我们在已绑定了门锁的手机中查看app的数据库,其中显示了已绑定门锁的productInfo,如图2-12所示。

图2-12 数据库中的productInfo

对比图2-11我们计算出来的结果,和2-12中数据库里的product_info字段数值,二者前6字节是相同的,上一篇分析中在分析productInfo变量的使用时,其中也只有6个字节参与了计算,所以我们推测后两个字节是无效字节,下一章的操作中可以看到,这两个字节置0也能够开启门锁。

3

使用计算得到的productInfo开启门锁

前文提到app数据库中有product_info字段,而app在构造Authentication Response时直接使用了这个字段的数值,那么如果我们在未绑定门锁的手机上,跳过门锁绑定步骤,直接将门锁的相关信息写入到app的数据库中会出现什么情况呢?接下来我们对这种情况进行实验。

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

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

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

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

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

4

总结

我们用了两篇文章记录了Yale门锁的漏洞分析及利用过程。

首先我们从Yale Bluetooth Key这款app的Log着手,定位到了app中的关键代码,随后通过对关键代码的分析,发现了门锁与手机之间的身份认证环节存在漏洞,最终通过嗅探门锁与手机之间的BLE通信,我们利用身份认证的漏洞在未绑定门锁的手机上打开了门锁。


作者:Light & Yimi Hu @ PwnMonkeyLabs


邮箱:pwn@pwnmonkey.org



发布     👍 0 举报 写留言 🖊   
✋热门推荐
  • 1、庸人败于惰,能人败于傲 世上两种人必定惨败,一种是懒惰之人,另一种是骄傲之人。前者什么事都想在“明日”再做,结果总是一事无成;后者瞧不起天下所有人,自认
  • 多样的音乐风格,多变的唱法编曲,你一次次的突破自我,带着少年的坚定,每一次耀眼的舞台,都是你向世俗证明自己的决心。你的存在让世界充满色彩,你有着动人的嗓音,有着
  • 曼联欧联大名单:C罗领衔安东尼卡塞米罗在列 拉什福德缺阵#球场一家亲[超话]# 北京时间9月14日傍晚,曼联公布了参加周中欧联杯比赛的球队大名单,C罗领衔,安东
  • 剧版请了杨紫,张晚意,檀健次,邓为等高颜值演员,加上桐华亲自坐镇担任编剧,所以很多人都期待。盘古大帝有三位情如兄妹的下属,神力最高的是一位女子,后来建立了华胥国
  • 摘自百草园书店#沈阳[超话]#《北陵韵歌》(52) 园中的路径清晰起来,直挺的蒿草已倒向两旁,浓郁的芳菲即将褪色,飘香的时节容不得挽留…………忽如一夜晚秋的长
  • 加上两个都是暴脾气,就是这样的一个组合,让大众感到异常不合拍。加上两个都是暴脾气,就是这样的一个组合,让大众感到异常不合拍。
  • 阿程哥还主动的缓和气氛,让翔哥不会感到很紧张,严浩翔和马嘉祺,刘耀文是新认识的朋友,马嘉祺在台风蜕变之战小组赛里第一个选择的就是严浩翔,刘耀文和严浩翔一起作词,
  • 有人说,郭晶晶是名流圈里的一股清流,因为她摒弃了世俗对“富家太太”的约定成俗,只专注于自己的家庭和事业。01不闻不问,是自信杨澜说过:“女人的美不在皮囊,而在于
  • 就像之前的采访中,问:对于脱粉的粉丝,你想对他们说什么,嘉祺回答,明天见真的太酷了@时代少年团队长-马嘉祺 #杨丞琳说想跟马嘉祺有音乐上的合作#独角兽和圣诞树“
  • 惊奇的是,丹中尉来到了他的码头,他想要感激阿甘,但迫于颜面,便以一个委婉的方式:“我可以当你的大副。 阿甘不服,他开始奔跑起来,没有理由,也不是为了珍妮,他开始
  • 之前和调小的司机聊过,问了几个师傅,大多回应的还是东风7改要比和谐车好开(郑州局接的是hxn3系列,与同出南车的5系相比不知道结果如何)东风车的噪音稍微小一点,
  • 想去看一看那片古老土地的前世今生,想去探一探月沼、南湖的奥秘,想亲手抚摸那粉墙黛瓦,想用双脚在那片峰峦叠嶂中徒步,想知道婺源人如何庆祝他们的丰收,一场轰轰烈烈的
  • 面膜的功效为什么要敷面膜 如果小仙女那里比较热,里面就直接穿短款碎花连衣裙就好了,时尚到爆 温碧泉眼霜效果怎么样温碧泉晶致眼啫喱精华作用 一字带凉鞋搭配搭配连
  • 人生何其有幸,有懂我分享的人,她会不厌其烦看完我分享的视频,我说过的话语,每一句都会,回复,今晚看视频,无意间和一个喜欢很久很久的一个博主连麦了,当时除了惊奇,
  • 加里-内维尔说道:“随着俱乐部的快速发展,它需要一个每天都能够专注于俱乐部工作的人,尼基-巴特就是这个职位最好的人选。加里-内维尔说道:“随着俱乐部的快速发展,
  • 看完之后,我想说,我还是觉得故事的结局不重要,因为对于本场辩论的胜者是谁对我来说不重要,你看这又论证了故事的结局并不重要。一开始看这场辩论赛的理由很简单,因为抖
  • #时代少年团[超话]##时代少年团蜕变三周年##时代少年团声声不已##时代少年团三时有声##时代少年团 星奔川骛# 我追星,但是我从来不期待他是一个完美的人,爱
  • 奇怪是,現場球員竟若無其事地肅立,場邊的港隊負責人亦沒有人跑去要求把歌曲腰斬,由得整首《榮光》播完,然後開始賽事,直至港隊在比賽中勝出,再有升區旗播國歌儀式,主
  • #照片儿也会说话# #温州肯恩大学# 小温照片房今儿个正午又开张啦!本期照片主题:你和你朋友最沙雕的一段对话是什么我们将在每周五中午12:00进行照片小展,将自
  • 好好睡了一觉 … 笑在那之后 泡了长澡确认了排练的录像 做了各种事就寝时是早上6点 ~ !说是起来了但却是暖和地裹在毯子里躺着哟 ~ 幸福 ~ …这个时间能待在