为了表示这些东西,我利用Android SDK中的现有代码,来说明连接到蓝牙LE设备中的一款应用程序。我一行代码也没写,只是打开Android Studio中的已有项目并且按下“开始”键。
上面截图是在应用程序的帮助下尝试连接我的健身智能手环。我们可看到服务及其特征。然而,从特征中获得手环的数据并不容易,它需要除连接之外的认证步骤。在其他的一些设备案例中,我能从特征及其描述符中读取这些数据,而这些数据很可能是用户数据。
扫描
那么,我通过Android SDK应用程序的例子说明我能够连接到某些设备。然后,我自己开发了一个应用程序,可自动搜索蓝牙LE设备,然后进行连接并且获得它们的服务列表。
通过这个应用程序,我执行了几次扫描。
在莫斯科地铁系统中的两个多小时内,我可以连接19台设备:11台FitBit跟8台Jawbone。
在美国华盛顿贝尔维尤一个健身房的一个多小时内,我可以连接到20台设备:20台Fitbit,耐克、Jawbone、微软、Polar及Quans各一台。
在墨西哥坎昆的两个多小时内,我可以连接到10台设备:3台Jawbone、7台FitBit。
在仅仅6个小时的扫描中,我可以连接到54台设备,虽然存在两个很严格的限制条件:
尽管设备指出连接的最大距离是50米,但实际上距离为6米时就很难连接上了。
似乎连接到已跟另外一个手机绑定的设备上不可行。所以,如果你的手环已跟手机绑定,别人是无法连接的;而且在扫描中甚至不会将你的设备显示出来。
上述第2个限制条件意思应该是当手环连接到一台智能手机时,就不会受到攻击。但这是不成立的。举个例子:当用我的app扫描时,我可以拦截手环跟官方应用程序的通信,即使它们处于已连接状态。
也有可能我找到的设备在此之前从未连接过一台手机,或者当我扫描时,这台智能手环没有跟手机连接(可能手机禁用了蓝牙)。然而,也有可能预先被连接的设备还可连接,尽管存在这个限制条件。不管是什么原因,不坏好意的人有一大把的机会连接到健身手环上。
尽管如此,在多数情况下,要获得用户数据除了网络连接之外还需要验证步骤。下面我们来看看我手环的身份验证流程是什么样的。
手环身份验证流程
官方应用程序通过手环上的四种可用服务对连接到智能手机上的手环进行身份验证。每种服务的每个特征都标注“CharacteristicNotification”,也就是app如何通知手环在它想要修改这个特征时进行通知。之后app就会获得每个特征的描述符列表,并将’ENABLE_NOTIFICATION_VALUE’设置标注以通知手环想要对每个描述符作出修改的通知。
随后,其中的一个特征就会更改值即字节缓冲。这个应用程序就会从手环上读取这个缓冲:201f1f头跟字节数组,我们就叫authBytes吧。
这个应用程序会创建一个新数组。数组的第一部分是一个包含在这个应用程序中且以6dc351fd44开头的常量数组;第二部分是authBytes。这个应用程序从新数组中接收到MD5,然后以下面的结构方式将其发送回设备:
Header (201210051f)
MD5
验证字节
这个应用程序随后会发送给设备从中发现的另外一个数组。
手环开始震动时,用户只需按下按钮完成身份验证过程。
官方应用程序的身份验证程序需要15秒,我开发了一个应用程序只需要4秒就能让手环震动。
让用户按一下手环上的这个按钮并非难事。你需要的只是耐心。你可以一直反复不停地尝试验证流程直到用户按下按钮或者不在范围内。
验证完成后,我手环上的数据就可被获取了。现在,可穿戴健身设备上并没有多少信息,也就是步行次数、睡觉时段、最后一小时的脉搏等等。这款app大概每隔1小时就会将信息传输至云端。
验证完成后要执行设备命令就很容易了。比如,可以修改你应该向设备发送的且以f0020c开头的字节数组事件、然后在修改YYYY MM DD DW HH MM SS MSMSMSMS格式的日期。
对于其他健身手环来说就更容易了:一些设备在联网之时就可获取一部分数据,而Nike的应用程序代码甚至没有被混淆,很容易被读取(结果见此)。
结论
研究表明,在某些情况下,你可以在设备所有者不知情的情况下连接到一台可穿戴设备上。
通过入侵手环,我让不怀好意者无法获取所有的用户数据,因为数据没有存储在手环或手机上——官方应用程序会将数据例行传至云端。
健身追踪器变得越来越流行,并且功能广泛。或许在不远的将来它们会提供更多传感器,也就是说会存储更多的用户数据,而这些数据大多是医疗数据。然而,这些设备的创建者似乎对安全考虑甚少。
想象一下吧,如果带有脉搏传感器的手环被入侵会产生什么后果,商店所有者可以在你查看商品价格时查看你的脉搏次数,也有可能别用来了解人们对广告的反应。此外,被入侵的且带有脉搏传感器的可穿戴设备也可被用作说谎检测器。
当然,还有更多不利行为。比如,通过购买木马勒索软件,不怀好意者就可以控制你的手环,让它不停震动并以此勒索你。
我们将这些结果告知手环厂商。厂商认为这是一个UX漏洞而不是安全漏洞。出于道德及安全因素的考虑,这次我们没有公布手环的名称及型号。如果你担心网络犯罪分子利用这个漏洞会带来的可能后果,请联系健身智能手环厂商,询问是否受本文所提及问题的影响。
同时,我们希望这篇文章不但能帮助用户,同时也希望帮助手环制造商在制造设备时多从IT安全角度考虑一下。
(责任编辑:安博涛)