前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用 linux 操控小米手环 1 代

使用 linux 操控小米手环 1 代

作者头像
信安之路
发布2018-08-08 17:15:47
1.8K0
发布2018-08-08 17:15:47
举报
文章被收录于专栏:信安之路信安之路

本文作者:reboot(来自信安之路无线安全小组成员)

在这个智能加无线的时代,人们早已习惯于使用一些智能设备进行学习丶生活等等。可是你手中的智能设备安全吗?今天我们将使用无线的一些技术来带大家夺取手环的控制权。

基础知识点

按套路来,文章开头先讲几个需要知道的知识点:

低功耗蓝牙

低功耗蓝牙简称 BLE,是在蓝牙 4.0 之后提出来的技术,由于非常的节能所以被广泛的应用到许多智能设备上,例如智能跑鞋的芯片、计步器等,以及下面要讲的手环。

HCI

HCI(主机控制器接口),是蓝牙协议栈的重要部分

HCI Packet 在 Host 和 Control 之间进行传输,通常有三种类型 Command,Event,Data (ACL 和 SCO/eSCO)。其中 Data 是双向的, Command 只能从 Host 发往 Control, Event 始终是 Control 发向 Host 的。在本文中这点只需要了解即可。

ATT

ATT 允许设备作为服务端提供拥有关联值的属性集(服务端提供数据,客户端请求数据)。

让作为客户端的设备来发现、读、写这些属性;同时服务端能主动通知客户端

ATT 定义了两种角色: 服务端 (Server) 和客户端 (Client)

ATT 中的属性包含下面三个内容:

1、Attribute Type : 由 UUID(Universally Unique IDentifier) 来定义

2、Attribute Handle : 用来访问 Attribute Value

3、A set of Permissions : 控制是否该 Attribute 可读、可写、属性值是否通过加密链路发送

一个设备可以同时拥有 Server 和 Client,而一个 Server 可以支持多个 Client。

说了这么多废话。。其实这里只需要知道 ATT 数据包里面的内容就是用来发送指令。

实验环境:

小米手环 1 代、小米手机一部、Kali Linux、蓝牙适配器 CSR4.0(使用电脑自带的也可以)

1、将手环通过小米运动绑定到手机上,然后开启来电提醒(手环会震动)。

2、手机启用开发者模式并打开蓝牙

3、用另一个手机打这个手机,手环震动后挂断,然后到文件目录找到蓝牙日志文件并拷到电脑上:

4、使用 wireshark 打开日志:

wireshark 是一款用来抓包和分析数据包的非常好一款工具。

5、因为 HCI 的相关命令是用来控制连接的,而 ATT 才是用来执行操作的,所以我们只看 ATT 数据包,对协议进行排序,然后 ATT 的数据包就会按时间顺序进行排序:

找到 Sent Write Command..... 这一类的数据包,这些数据包就是往设备发送命令的数据包,点开一个,可以看到如图中红框标出的点,handle 表示句柄,是,最下面的 0x00 代表的是没有震动的值,因为我们是要“调戏”,自然希望它能震动,所以我们换个数据包,找到下面这个:

可以看到 强烈震动的值是 0x02,对应的是 0200(因为 02 是在高位,所以低危自动补 0,对应值是 0200)

6、打开蓝牙接口

首先用 hciconfig 看一下自己的蓝牙适配器,通常电脑自带的是 hci0,外接的是 hci1 然后启动它:

hciconfig hci1 up

注:

1.因为这款手环的协议栈用的是 Bluez,所以它的调试工具是 hcitool 和 gatttool。

2.这里有的人会出现打不开的情况,需要将:

这里的勾去掉才能找到蓝牙适配器。

7、扫描设备,因为是低功耗设备所以使用命令:

hcitool lescan

8、扫描设备,并连接:

有时候会连接不上,重试两下就可以了

注:

有的人这里会遇到 Connection Refused (111) 的错误:

(这张图与这次实验的设备没关系。。只是举个例子)

这个的话需要执行如下修改:

首先:

vim/etc/bluetooth/main.conf

在最下面添加 :

代码语言:javascript
复制
 EnableLE = true       AttributeServer = true    DisablePlugins=pnat然后service bluetooth restarthciconfig hci1downhciconfig hci1 up

然后再次连接:

9、使用命令 char-write-cmd(gatttool 中用往设备写命令的命令)来发送命令:

char-write-cmd+句柄+值

这里填上前面得到的数据,完整命令为:

char-write-cmd 0x0051 0200

回车后,手环就会震动了:

总结

由上面的实验可以看到,我们很轻易的就可以控制手环并发送命令,而不需要进行接触,当然,这里肯定有人要说“前面你不是把小米手环和自己手机绑定了吗?”,是的,这个绑定是为了抓包来分析那些参数的值,而这些值在开发的时候是通用的,因为厂家不可能为这么多的手环都分配不同的值。所以我们只需要从一个手环上知道了这些值就可以按这个方法去控制别的手环的了。

当然了,这个实验更主要的就是反映了蓝牙安全性的问题。现在物联网技术发展非常的快,当年我刚听说到这个名词的时候还是 12 年,那会哪有什么智能手环、智能跑鞋、智能手表的,而现在这些东西已经是烂大街了。但是这些设备的安全性却十分的堪忧。比如你有可以记录心率和睡眠质量的手环,黑客通过抓包等手段来获取数据并分析处你睡眠质量较差、心率较快的时候,突然给你的手环发送进行强烈震动的命令,将你从梦中惊醒,大家都有惊醒的经历,都知道这时候你的心跳肯定会加快,若是心脏病患者这时候可能就。。。咳咳。。。所以说不要小看这种小设备的安全问题。甚至再扩展到以后的医疗设备、无人驾驶。。等等一系列的使用了无线手段的技术,若忽视了安全性那后果自行脑补。。。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-05-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 信安之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基础知识点
  • 实验环境:
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档