[无线安全]玩转无线电——不安全的蓝牙锁

0x00 前言

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


[无线安全]玩转无线电——不安全的蓝牙锁_第1张图片


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


[无线安全]玩转无线电——不安全的蓝牙锁_第2张图片


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


[无线安全]玩转无线电——不安全的蓝牙锁_第3张图片


0x01 BTLE 基础

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


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


[无线安全]玩转无线电——不安全的蓝牙锁_第4张图片


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)


[无线安全]玩转无线电——不安全的蓝牙锁_第5张图片


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


[无线安全]玩转无线电——不安全的蓝牙锁_第6张图片

[无线安全]玩转无线电——不安全的蓝牙锁_第7张图片

[无线安全]玩转无线电——不安全的蓝牙锁_第8张图片


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



[无线安全]玩转无线电——不安全的蓝牙锁_第9张图片

[无线安全]玩转无线电——不安全的蓝牙锁_第10张图片


0x02 BTLE 智能锁

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


[无线安全]玩转无线电——不安全的蓝牙锁_第11张图片


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


[无线安全]玩转无线电——不安全的蓝牙锁_第12张图片


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


[无线安全]玩转无线电——不安全的蓝牙锁_第13张图片

[无线安全]玩转无线电——不安全的蓝牙锁_第14张图片

0x03 攻击准备

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


[无线安全]玩转无线电——不安全的蓝牙锁_第15张图片


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


[无线安全]玩转无线电——不安全的蓝牙锁_第16张图片


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

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


[无线安全]玩转无线电——不安全的蓝牙锁_第17张图片

[无线安全]玩转无线电——不安全的蓝牙锁_第18张图片

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


[无线安全]玩转无线电——不安全的蓝牙锁_第19张图片


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


[无线安全]玩转无线电——不安全的蓝牙锁_第20张图片


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


[无线安全]玩转无线电——不安全的蓝牙锁_第21张图片


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


[无线安全]玩转无线电——不安全的蓝牙锁_第22张图片


通过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 个广播频道.



[无线安全]玩转无线电——不安全的蓝牙锁_第23张图片


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


[无线安全]玩转无线电——不安全的蓝牙锁_第24张图片


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


[无线安全]玩转无线电——不安全的蓝牙锁_第25张图片


0x05 攻击 – APP 运用层

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

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


[无线安全]玩转无线电——不安全的蓝牙锁_第26张图片

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


[无线安全]玩转无线电——不安全的蓝牙锁_第27张图片


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


[无线安全]玩转无线电——不安全的蓝牙锁_第28张图片


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


[无线安全]玩转无线电——不安全的蓝牙锁_第29张图片

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

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/


author,kevin2600  文章转载自先知社区,原文地址:https://xianzhi.aliyun.com/forum/read.php?tid=1799&displayMode=1&page=1&toread=1#tpc

更多安全类热点资讯及知识分享,请持续关注阿里聚安全博客

你可能感兴趣的:(漏洞安全)