欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

通过web蓝牙黑掉独角兽玩具

来源:本站整理 作者:佚名 时间:2017-03-03 TAG: 我要投稿

在过去的几个月里,我们一直都在分析CloudPets玩具的安全问题。近期,安全研究专家还发现了一个存在安全问题的MongoDB服务器,而这台存在漏洞的服务器将有可能泄漏数百万CloudPets客户的隐私数据。但是我们的研究针对的是玩具本身,准确说来,我们研究的是玩具低功耗蓝牙的安全问题。
蓝牙的安全问题
实际上,我们一直都对低功耗蓝牙(Bluetooth LE)的安全性非常感兴趣,我们此前还专门开发了一款名叫RaMBLE的Android App来扫描BLE设备,而且我们也为很多客户测试过蓝牙设备的安全性。近期,我发现了一个非常有意思的低功耗蓝牙设备,于是我打算对它进行一次逆向分析。在这篇文章中,我将会把我在逆向分析BLE协议时所用到的部分工具和技术介绍给大家,而且我还专门使用Chrome的新型Web蓝牙API写了一个Web页面来连接并控制蓝牙设备。
我习惯在上下班的路上开着RaMBLE来扫描各种设备,当时除了普通的健康手环和无线耳机之外,我还发现了一个名叫“CloudPets B 1.0.19”的玩意儿。出于好奇,我果断Google了一下这个名字,然后搜索出了一大堆可爱的玩具,而这些玩具全部是使用低功耗蓝牙来与智能手机App进行通信的。

这款玩具的设计意图是,朋友或亲属可以使用CloudPets的智能手机App记录下一段语音信息并将其发送至家长的手机App中。接下来,App会通过蓝牙LE将这段语音发送给玩具。当小孩子按压动物玩具的右爪时,玩具便会播放这段语音消息。此时,孩子也可以按下玩具的另一只爪子来录下自己的声音,App通过蓝牙接受到孩子的录音之后便会将其发送给朋友或亲属。
因此,我认为这种带有混合功能和低功耗蓝牙的玩具是非常适合进行逆向工程分析的。

购买前的研究
这也不是我第一次购买蓝牙设备了,但是在真正购买之前,我打算上网研究一下这款玩具到底有多高的技术含量。
作为一款能够在美国地区购买到的无线设备,这款设备肯定已经通过了联邦通信委员会(FCC)的测试。FCC文档给我提供了很多有用的信息,包括玩具的内部结构图、数据表和各种照片(包括拆解图)在内。

我们可以从FCC的记录文件中了解到,这款玩具使用的是德克萨斯仪器的CC2541低功耗蓝牙和一个松翰科技的SNC7232声音处理器。CC2541蓝牙使用的是Intel 8051微控制器架构和256KB的可编程闪存存储器,而且还有2MB额外的闪存空间用来存储语音消息。
情报收集完毕,接下来就是购买这款价值12英镑的独角兽玩具了。
分析广播数据
通过官方App将玩具设置好之后,我决定先看看这个玩具一开始会向外广播什么数据。
大多数低功耗蓝牙(BLE)设备会通过向外广播数据包来让周围设备感知到它的存在。这种“广播数据包”中包含有设备地址和名称等数据,一般我都会使用我们自己的RaMBLE App来查看蓝牙设备的“广播数据包”,但是你也可以选择Nordic nRF Connect App(可提供更多详细信息)。这款玩具的广播数据包结构如下:

设备地址(Address)是由德克萨斯仪器在出厂时分配好的,用来表示这个蓝牙设备是由他们制造的。标识符(Flags)表示该设备仅支持低功耗蓝牙(BLE),而且不支持之前传统的蓝牙协议。制造商数据(Manufacturer Data)的用处比较多,它包含有德克萨斯仪器的数据(由下划线分割),这部分内容我们待会儿在谈。
发现服务
低功耗蓝牙设备使用的是GATT通用属性协议,每一台设备都有一份GATT profile,并描述了该设备所支持的服务。当一台智能手机首次与该BLE设备连接之后,手机会获取一份名叫“service discovery”(服务发现)的列表,该列表中记录有蓝牙设备的功能特性以及它所支持的服务。在nRF Connect App的帮助下,我发现了下列服务:

我们的独角兽玩具提供了四种服务:前两个是大多数BLE设备都支持的。第三个是德克萨斯仪器的固件更新服务,该服务允许设备通过BLE来更新固件。我Google了第四个服务的UUID之后并没有搜索到任何内容,所以我猜这个服务是CloudPets的App用来控制玩具功能的。每一个GATT服务都包含有一种或多种功能特性,在与设备进行通信时,我们需要读取或写入其中的某些功能特性域。

我们可以从表中的“user description”(用户描述)了解到每一种功能特性的用途。但如果想要深入了解这些功能的话,还需要下一些功夫。为了了解这些特性的工作机制,我采用了两种分析方法:一种是对CloudPets App的源码进行反编译,另一种是记录并分析设备的蓝牙通信数据。
反编译
首先,我使用ADB将CloudPets的APK文件从我的手机中提取出来:
$ adb shell pm list packages | grep cloudpets
package:com.spiraltoys.cloudpets2
$ adb shell pm path com.spiraltoys.cloudpets2
package:/data/app/com.spiraltoys.cloudpets2-1/base.apk

[1] [2]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载