狗汪汪玩转无线电——不安全的蓝牙锁

0x00 前言

随着物联网科技的飞速发展, 各类IOT设备都通过使用无线技术BTLE; ZigBee; WIFI; 6LoWPAN等来实现万物互联. 但随之而来的安全及个人用户隐私问题也越来越敏感. 所以将在这篇文章中分享一个低功耗蓝牙智能锁的分析案例. 希望能对IOT安全研究起到抛砖引玉作用.

BTLE 俗称低功耗蓝牙, 比传统的蓝牙更能控制功耗和成本. 因此成为当下 IOT 产品中使用非常频繁的技术. 比如小米智能手环; 飞利浦的HUE 智能灯,  甚至还有羞羞的蛋蛋系列都是通过BTLE 来完成联接的.  据说BTLE设备的年出货量在过去15年内增加了1000倍,已经达到了30亿的水平,在未来的4~5年内还将增加到50亿.

不过越是流行的东西, 黑客对其也越是有兴趣. 通过简单的搜索便可发现不少关于BTLE 设备安全隐患的文章. 其中编号为 CVE-2013-4866 的硬编码PIN漏洞堪称一绝. 因为它是第一个关于智能马桶的漏洞. 感兴趣的朋友可以自行了解相关信息.

0x01 BTLE 基础

有些朋友可能会觉得仅仅是家里的智能灯或者手环被黑了, 并不会造成什么特别的影响.  可是有一类蓝牙智能设备的安全问题可就没这么简单了. 不过在进入主题之前大家先来了解一下BTLE 吧.****

其实关于BTLE 的基础介绍网上已经有很多了. 这里只是简单介绍下想要进行测试的必备知识. BTLE 设备运行在2.4ghz. 分为40 个频道, 每个频道 2Mhz 带宽.  其中频道 37; 38; 39 为广播频道. 剩余的37个频道为数据频道.

BTLE 定义使用了3 种匹配模式. JustWorks; 6-digit PIN **和 **Out of band. 其中JustWorks 默认使用000000作为PIN来完成匹配. 这样的设计给本身不带输入方式的设备提供了便利. 但同时让所有人都可以轻易以其匹配. 我们的目标 DOG&BONE 智能锁使用的正是此方式.

在匹配成功后, 我们便可以通过一个独特的UUID对 Characteristics 进行读写操作. 从而实现不同的功能, 比如开灯/关灯等. 在格式上UUID 又分为Bluetooth Special Interest Group (SIG) 规范的 16bit 公有UUID (e.g. 0000180F-0000-1000-8000-00805F9B34FB) 和 厂商自定义的 128 bit 私有UUID (e.g. 00001524-1212-EFDE-1523-785FEABCD123)

在与BTLE 交互的硬件方面可以说非常简单. 仅仅一个便宜的BTLE 蓝牙Dongle 即可. 同时大部分的手机比如IPHONE 自带BTLE功能. 如果想增加收发信号范围的话还可以通过外接天线的方式达到目的.

软件方面的选择也非常之多. 如果是IPHONE 用户的话, 个人推荐 LightBlue. 当然想要深入的话, 则必须使用Linux下的开源软件, 比如hcitool or Gatttool. 尤其是gatttool 提供了一个非常好的交互界面.

0x02 BTLE 智能锁

市面上具有BTLE功能的安防产品种类繁多, 其中又以智能锁为主. 但是作为一款安全产品的自身的安全性能又如何呢. 在DEFCON24上有安全研究员爆出数款蓝牙智能锁的安全漏洞. 而漏洞的类型五花八门. 从明文密码到重放攻击, 甚至还有一款门锁在Fuzzing 攻击下完全失效, 导致门户大开.

其实智能锁的架构非常简单. 通过手机APP 作为中转跟云服务器交互, 用户甚至可以从地球任何一个角落打开锁. 这是普通门锁无法比的.

今天的主角DOG&BONE 蓝牙智能锁正式登场了. DOG&BONE 智能锁是由一家位于英国的公司生产. 目前在市面上售价为100 $. 但在逆向了他们的手机APP后, 发现真正的开发者应该是一名华人. 就如大多数厂商那样, 他们也号称自家的智能锁安全性能极高. 适当的宣传是可以理解的, 但这家公司似乎有点过了头. 简单来说就是号称此锁拥有银行级别的安全性能, 甚至需要设计出苹果电脑的传奇硬件黑客Steve Wozniak 亲自出马才行. 但真实情况是不是真有那么安全呢? 让我们来一起测试下吧.

0x03 攻击准备

在攻击起始阶段最重要的就是情报收集, 掌握目标尽可能多的信息对随后的深入研究至关重要. 就DOG&BONE 锁而言, 我们可以使用LightBLUE 与其交互, 得到一些基本信息开始.

如图所示: 我们可以知道DOG&BONE的蓝牙地址; 使用了Nordic的蓝牙芯片. 且提供了何种services, 这些services 的UUID 又是哪些.

善用GOOGLE 搜索可以发现除了官方文档之外的许多信息. 这里我们发现网上已经有其他研究人员对其进行解剖. 方便我们了解了其内部结构信息. 从而更加确认了DOG&BONE 使用的是Nordic NRF51822 芯片.

从官方发布的APP 我们可以了解到DOG&BONE都提供了哪些功能. DOG&BONE 的APP 同时有IOS 和Android 2种版本, 条件允许的话可以对2种版本分别测试分析. DOG&BONE APP 可以时时查看锁的电池容量等基本信息. 我们可以通过 tap to unlock 和设置passcodes 等方式来打开智能锁. 并且可以共享给其他用户, 并限制其使用的次数和时间. 当设备提供的功能越多, 潜在的攻击点也随之增长. 随后我们会针对这些功能进一步深入.

跟大多数Android app 一样, APP本身没有加固. 所以我们可以轻易通过JD-GUI 得到JAVA Byte codes. 从代码中我们可以窥探到DOG&BONE的工作机制和采用了何种认证方式. 一些至关重要的信息也同时暴露出来. 比如UUID 和其对应的功能.

不仅如此DOG&BONE APP虽然使用了SSL 来加密其与云服务器的交互数据, 但是并没用启用Certs-Pinning. 所以我们仍可以通过中间人的方式抓到所有的交互数据包. 并对其进一步分析. 常用的MitM工具包括 MitMProxy 和BurpSuit Pro 等.

另一方面DOG&BONE使用蓝牙来与智能锁交互. 详细的蓝牙交互数据包将大大缩短我们的分析的时间. 幸运的是自从Android 4.4 开始便提供了Bluetooth HCI Logs 的功能. 我们可以将得到的btsnoop_hci.log 导入Wireshark 中进行分析.

在分析后, 我们可以得知DOG&BONE 是通过对属性为lock_password的UUID 写入正确的解锁密码得以开锁. 而这个解锁密码则是从服务端产生的, 并发送到锁和APP里保存. 但是这个密码只有当用户将锁和自己的账号取消关联, 再重新绑定时才会更新. 那么问题来了会有用户每开一次锁就把锁和自己的账号取消关联吗?

通过MitM抓包可以得到当前的开锁密码. 这时可以用BTLE dongle 将密码写入lock_password 的UUID 来验证密码的正确. 但请注意目前我们仅是从自己的手机得到开锁密码. 如果想截取别人的开锁密码, 我们就需要知道如何从空中抓包..

Unlock DogBone Lock (视频地址)

http://v.qq.com/page/n/2/1/n0519c7d021.html

0x04 攻击 – RF无线层

如何从空中抓取蓝牙包?这里必须提及Michael Ossmann 设计的Ubertooth. 这可以说是蓝牙安全研究的瑞士军刀. 具体使用方法可以移步到其官网. 但必须提醒的是如果需要确保可以抓到蓝牙包, 我们需要使用3 个Ubertooth 来监控 37 38 39 这3 个广播频道.

在得到足够的数据包后, 我们可以通过 CrackLE 来破解出BTLE 配对的密码. 但是因为DOG&BONE 使用的是JustWorks 配对模式. 所以其实是完全可以省略这步的.

如果觉的Ubertooth 价格过高的话, 我们也可以用基于CC2540 芯片的TI-SmartRF Sniffer. 和其自带的SmartRF 软件. 而且测试发现抓包效果要比Ubertooth 好些.

 

0x05 攻击 – APP 运用层

大家还记得DOG&BONE还有一个共享锁的功能么. 在共享给其他用户的同时, 还可以限制其使用的次数和时间. 那么这期间到底发生了什么, 是否可以绕过限制呢. 这里我们通过BurpSuit Pro 来一探究竟.

其实共享过程很简单, 当锁的主人决定共享给某个用户. 服务端会发送邀请token 给此用户

当此用户接受了邀请. 服务器便会将锁的ID 和共享类型等信息返回到用户的账号. 这里的共享类型包含了次数以及时间限制信息.

而当此用户想开锁时, 客户端便会发送请求到服务端. 如果一切顺利服务端会将当前的解锁密码返回. 从而达到开锁的目的.

但如果用户的次数用完了, 此时再发送开锁请求. 服务端返回错误信息.

但是因为整个过程都在我们的掌握之中, 所以我们可以将服务端的返回信息换成任意我们想要的信息. 比如提高共享次数等. 以下是绕过共享次数限制的视频演示.

Bypass DogBone lock sharing limits (视频地址)

http://v.qq.com/page/y/3/v/y05190ihb3v.html

 

0X06 攻击 – 物理机械层

以上我们通过逆向应用程序, 蓝牙数据包嗅探等方式搞定了Dog&Bone 智能锁的安全防御. 但事实上还有一个非常简单但又非常致命的方式可以打开锁. 那就是使用SHIM (铁片) 攻击, 事实证明往往最简单的攻击方式却是最行之有效的. 以下是演示视频, 在看过之后你还愿意花100 美金去买这个所谓的智能锁吗?

Bypass DogBone by SHIM (视频地址:)

http://v.qq.com/page/j/8/q/j0519sav98q.html

0X07 总结

通过DOG&BONE 蓝牙锁这个案例, 相信大家对低功耗蓝牙设备的分析和攻击方式有了一定程度的了解. 但市面上的BTLE相关产品种类繁多, 每款产品的安全程度也各不相同. 大家可以自行尝试玩出新花样. 而从开发者的角度来说在设计阶段就要将安全防御考虑进去. 在产品上市前可以考虑找白帽黑客测试过后再发布.

 

0x08 参考文献

https://lacklustre.net/

https://github.com/securing/gattacker

http://greatscottgadgets.com/ubertoothone

https://github.com/pwnieexpress/blue_hydra

https://en.wikipedia.org/wiki/Bluetooth_Low_Energy

https://github.com/kevin2600/BTLE-SmartLock-Hacking

https://media.ccc.de/v/33c3-8019-lockpicking_in_the_iot

http://hackaday.com/2016/08/08/the-terrible-security-of-bluetooth-locks/

 

授权转载自先知社区,原文链接:https://xianzhi.aliyun.com/forum/read.php?tid=1799

原文作者:kevin2600