智能手环的漏洞挖掘

news/2024/11/25 0:34:36/

在一个悠闲的阳光午后,拿出一个未知品牌的蓝色小药……,哦,小手环。用力撕扯半张卫生纸,将搁置已久的手环表面擦拭。

既然是蓝牙版的智能手环,那必不可少的要介绍一下通信协议啦。低功耗蓝牙(BLE)是蓝牙技术联盟设计和销售的一种鲁棒性无线技术,旨在用于医疗保健、运动健身、信标、安防、家庭娱乐等领域的新兴应用。相较经典蓝牙,低功耗蓝牙旨在保持低成本、短距离、可互操作。

  1. 生平介绍
  • 安卓的 BLE 标准在 2013 年 7 月发布,一般搭配Android 4.3 及以上系统的手机都是支持蓝牙 BLE 的。
  • IOS的 BLE 标准在 2013 年9月更新推出,一般搭配IOS 7.0及以上系统的手机都是开始支持蓝牙 BLE 的。
  1. 协议内容

要使安卓设备连接上智能穿戴设备(如智能手表),通过经典蓝牙的socket连接一般是连接不上的(为什么说一般呢,因为有些不良厂家和杂牌智能手环用的不是低功耗蓝牙,这个可以使用经典蓝牙连接上),必须要使用BLE的 GATT连接才能连接上。

GATT连接涉及到四个比较陌生的名词:服务(service)、特征值(Characteristic)、描述(discript)、UUID

  • service服务是包含了若干个数据包(特征值)的集合,一个智能设备可能包含多个服务,使用之恩那个设备生产厂商提供的UUID码来识别。比如之恩那个手环中有测心率的服务、步数的服务,心率和步数的数据包(特征值)都包含在服务中,通过指定的UUID来辨别到底是心率的服务还是步数的服务。
  • characteristic特征值包含在服务里面,顾名思义就是一种数据值,特征值包含一个或者多个描述。如心率是多少,今天走了多少步都可以放进特征值里面,服务中有多个特征值,也是通过UUID来识别
  • discript描述一般是对特征值的值进行描述,比如单位等等的描述,开发中一般用不到(我用不到)
  • UUID由蓝牙设备厂商提供的UUIDUUID是在硬件编程里已经确定了的,想要草所特定的服务、特征值都需要通过UUID来找。

手机是通过app控制的蓝牙手环,那么由想而知,apk内肯定有控制蓝牙手环命令的功能代码,那么这些蓝牙的命令是如果构造通过蓝牙发出去的?我们首先逆向蓝牙手环的控制APP,找找蓝牙命令构造的代码片段。

  1. Apk逆向

apk逆向工具有很多,比较成熟有名气的例如:JEB、APKTOOL、AFE、DEX2JAR、ENJARIFY、JD-GUI等等,安卓安全测试这篇文章就不在累述了,下次专门写一个安卓安全的系列。回归正传,本次通过JEB反编译该APK,通过搜索我们确定了该APP中蓝牙命令构造的类BleUtile:

通过对代码进行分析,我们确定了APP与智能手环蓝牙通信的命令构造方式:操作头(126)+操作数(不同方法不同)+CRC(消息鉴别码)。下图为手环震动命令(函数setRemindCmd)的构造方法:

下图为CRC(消息鉴别码)在该APK中的构造方式:

虽然看起来很简单的定位到了我们所需的功能实现代码,但从开始到成功定位,代码分析和查找的工作量确是最大的,在整个漏洞挖掘过程中所耗时间也是最多的。但庆幸的是,本次apk并未进行代码加固,很容易就成功逆向出代码,并且未做代码混淆,方便了我们分析,而且省下很多时间,否则可能会耗费更多。

分析出蓝牙命令的结构了,来点实际的验证一下。

  1. 分析手环蓝牙信息

分析手环蓝牙信息首先得获取手环的蓝牙属性,可以使用python脚本(利用python bluepy模块)对智能手环进行扫描,

扫描得到手环蓝牙信息:

如图,该手环低功耗蓝牙handle为3和14的属性存在WRITE方法,其中handle为3的属性同时具有读和写的属性,读出的值为“Lem_S9P”,我们猜测此属性用于读或修改设备名称,下面数据包分析中我们将重点关注handle为14的属性。

可采用蓝牙模块(CC2540)或手机蓝牙数据包记录功能抓取APP与智能手环蓝牙通信数据包,本次采用的是手机蓝牙日志,通常智能手机可以点击5下版本号打开开发者选项,勾选一下蓝牙hci日志,重启手机后手机就会自动保存手机蓝牙通信的所有数据包啦,每款手机生成的蓝牙数据包名不一样,可以去各家网站搜一下,将这个数据包上传到电脑后用wireshark打开进行分析。

下面为抓取到的蓝牙通信数据包(主要关注handle为14及0x000e的通信数据包,篇幅有限给出两个示例):

与apk内的命令构造模块进行对比,格式完全匹配。开始写脚本尝试发送一些我们构造的蓝牙指令吧!

  1. 拿下手环

手环震动的命令是由长度为5的字节数组构成,其中第四字节值可为(1,2,3,4)中的一个(表示震动类型,如来电为1)。

以来电为例,构造低功耗蓝牙命令:126=0x7e, 5=0x05, 8=0x08, 1=0x01, CRC=0x82。或者通过蓝牙日志发现的value值重放“7e05080182”,我们使用python脚本实现手环震动命令:

手环成功的不停震动~太邪恶了。

详细测试过程、截图请关注“信安攻防”公众号:


http://www.ppmy.cn/news/219130.html

相关文章

智能手环功能模块设计_智能手环的设计的方案.doc

智能手环的设计的方案 智能手环的设计的方案 摘 要 本手环设计本身添加了市面上智能手环的相关功能,能够实现显示时间、测量步数、热量、闹钟等功能。因此本设计也适用于普通的使用者,在能够拥有智能手环的便捷同时。他们也能够在安静的环境下进行电话的…

android 智能手环应用,戴图智能手环app(健康手环应用) 1.7.8安卓版

戴图智能手环app是一款非常实用的手环应用,通过蓝牙连接手机即可了解智能设备信息,能够共享智能手环手机的健康数据和信息,还能够对手环设置进行调整,帮助大家更好的玩转戴图智能手环,有需要的朋友快来下载使用吧&…

模拟智能手环的时间显示功能 c语言,javascript实现智能手环时间显示

本文实例为大家分享了javascript实现智能手环时间显示的具体代码,供大家参考,具体内容如下 代码:Document #shijian{ width: 500px;height: 120px;background-color:#117dbb; margin: 50px auto;line-height: 120px; color: white;font-size:…

智能手环功能模块设计_基于51单片机的智能手环蓝牙模块设计

龙源期刊网 http://www.qikan.com.cn 基于 51 单片机的智能手环蓝牙模块设计 作者:王烈进 王游司 陈洪燕 孙超 卢宇 来源:《电脑知识与技术》 2018 年第 23 期 摘要:随着通信技术的发展,无线通信也日趋成熟,蓝牙就是其中之一。现在的蓝牙通信 技术都已经应用在手机、耳机、…

智能手环功能模块设计_智能手环毕业设计

智能手环毕业设计 【篇一:基于嵌入式智能手环的设计与开发】 基于嵌入式系统智能手环的设计开发 姓名:杨赛专业:信号与信息处理 学号: 6141904011 1. 设计目的 随着科技的进步,智能化成为了人们关注的焦点,…

智能手环功能模块设计_基于STM32实现智能手环设计

龙源期刊网 http://www.qikan.com.cn 基于 STM32 实现智能手环设计 作者:付海生 陈婷婷 韩百科 涂曾兵 来源:《科学导报 学术》 2017 年第 10 期 摘 要: 随着计算机标准化软硬件以及互联网技术的高速发展,可穿戴式智能设备的形态 开始变得多样化,逐渐在工业、医疗、军事、…

智能手环功能模块设计_基于嵌入式系统智能手环的设计开发

1.设计目的 随着科技的进步,智能化成为了人们关注的焦点,同时也越来越贴近人们的生活。人们对于健康生活方式的需求催生出了智能可穿戴设备,智能手环就属于其中的一种代表性产物。其主要应用于监测运动,监测睡眠以及智能化的安排人的生活作息方式等。是一款突出个性与人性的…

智能手环功能模块设计_智能手环设计方案.doc

智能手环设计方案 摘 要 本手环设计本身添加了市面上智能手环的相关功能,能够实现显示时间、测量步数、热量、闹钟等功能。因此本设计也适用于普通的使用者,在能够拥有智能手环的便捷同时。他们也能够在安静的环境下进行电话的保密接听和丝毫不会影响外界地听自己喜欢音乐。 …