2.3 低能耗蓝牙和通过移动应用程序开锁
到目前为止,我们已经对磁卡门锁的攻击情况进行了研究,为了解针对常见门锁的基本攻击手段奠定了坚实的基础。我们也研究了Z-Wave门锁,并发现一个在实现协议时犯的简单错误是如何导致门锁不再安全的。
这一节,我们将看一下使用低功耗蓝牙(BLE)的Kwikset Kevo门锁,如图2-3所示。从物联网的角度来看,使用iPhone应用程序控制这种门锁看起来非常有趣。
图2-3:Kwikset Kevo门锁
这里,我们将讨论已知的BLE的弱点以及如何捕获无线流量,但我们会特别关注iOS应用程序,这把它从我们目前已经讨论的门锁中区分出来。
2.3.1 使用抓包工具了解BLE的弱点
作为建立于2010年的蓝牙4.0标准的一部分,BLE在业界受到了惊人的支持,因为它功耗很低,这对智能手机、平板电脑和物联网设备来说都非常重要。蓝牙硬件芯片仅需2美元,与ZigBee和Z-Wave协议相比有着明显的竞争优势。
蓝牙技术联盟负责维护现有的蓝牙规范。需要注意的是,该规范涵盖了经典的蓝牙和BLE,但两者并不相互兼容(采用4.0以前规范的蓝牙设备不能与BLE设备相互通信)。
BLE工作在2.4GHz频段,被分成40个信道,其中37个用来传输数据,其余3个用于未连接的设备来广播设备信息并建立连接。设备可以在监听范围内向任何扫描设备或接收器广播数据。这允许设备发送单向数据到其他设备。
广播设备发送一个广告数据包,其中包含31字节的有效载荷,包括关于广播设备以及任何其他自定义的信息。当31个字节不够传递必要的信息时,BLE支持一种称为扫描响应的机制,其中侦听设备可以用它来请求第二条广告帧,长度也是31字节,总数达到了62个字节。
广告包不包含任何安全机制,因此敏感信息一定不能在广播包中发送。
为了在两个方向上都能传输数据,设备需要在主设备和从设备之间建立连接。主设备接收到由从设备发送的广告数据包,并要求该从设备建立一个永久连接。一个设备可以同时为主设备和从设备。一个从设备可以连接到多个主设备,一个主设备也可以连接到多个从设备。
BLE包可以通过使用基于USB的Ubertooth One设备以及Ubertooth软件工具套装捕获,Ubertooth软件工具套装可以通过构建向导生成。这些工具中包含一个频谱分析仪(如图2-4所示),在购买Ubertooth One后,你应该立即运行它,以确保一切工作正常。
图2-4:Ubertooth 频谱分析
Ubertooth项目还包括一个叫作ubertooth-btle的工具,能够通过以下命令捕获BLE数据流:
[bash]$ ubertooth-btle -f -c capture.cap
-f标志表示新建立的BLE连接,-c标志指定捕获的数据所写入的文件名。这个文件可以使用Wireshark网络嗅探器打开,如图2-5所示。
每个BLE数据包包含一个存取地址(access address,AA),这是一个具体连接的唯一标识符。当设备发送广告数据包时,使用固定的存取地址0x8e89bed6(如图2-5所示)。
图2-5:用Wireshark分析BLE广告包
通过iPhone上一个叫作LightBlue的iOS应用可以模拟BLE设备,如图2-6所示。这对测试Ubertooth One的功能非常有用,并确保抓包工具正在工作。注意,图2-5中的Wireshark正在对图2-6中名为血压计的广告虚拟设备的数据包进行抓包分析。
研究人员Mike Ryan在他的白皮书“蓝牙:低能耗带来的低安全性”中介绍了如何捕获BLE连接。从本质上讲,使用hopIncrement值连接跨越37个预留用于传输的信道。nextChannel值的计算方法如下:
nextChannel ≡ channel + hopIncrement (mod 37)
主设备和从设备用这个公式计算出并跳到下一信道。主、从设备相继跳频传输一个数据包。如果没有数据需要传输,那他们发出一个无数据网络包。因此,为了嗅探BLE连接,当使用-f 参数抓包时,ubertooth-btle工具按照同样的顺序跳频。
图2-6:用LightBlue iOS 应用程序模拟BLE设备
在Ryan的文章中,他公开了一个BLE的关键安全问题,重要的是要理解BLE采用的密钥交换协议容易受到暴力破解的攻击。
主、从设备在传输数据时可以使用数据加密来保护数据安全。为了做到这一点,就必须建立被称为长期密钥(long-term key,LTK)的共享秘密。在大多数情况下,主设备和从设备在后续的连接中会重复使用LTK。通过选择一个临时密钥(temporary key,TK)开始密钥交换协议,这个临时密钥是基于备受推崇的高级加密标准(AES)协议生成的。
根据BLE的规约,如果选择了仅工作模式,那么TK的值是0。这种模式用于设备很少或是没有显示或输入机制的时候,因此配对是自动的。除此以外,TK使用介于0到999 999之间的一个值。更常见的是在主设备和从设备上显示出生成的数字要求用户来确认。一旦计算出TK,主、从设备用TK生成一个短期密钥(short-term key,STK)。由STK最终生成LTK。
Ryan发布了一款名为crackle的工具,使用抓到的BLE数据包,并尝试用0到999 999之间的值作为TK去暴力破解数据包。一旦找到TK,便可以很容易地通过TK解密验证STK。最后,可以通过使用STK解密获得LTK。假设捕获的数据包存储在一个名为capture.pcap文件中,下面是运行crackle工具的命令:
[bash]$ crackle -i capture.pcap -o decrypted.pcap
TK found: 249592
LTK found: 26db138d0aa63a12dd596228577c4731
Done, processed 106 total packets, decrypted 19
像Wireshark这样的工具能打开decrypted.pcap这种包含明文的数据文件。需要注意的是,Ryan的暴力破解方法不能有效破解带外数据(Out-of-Band,OOB)模式,这种模式通过协议交换一个128位密钥,不同于BLE协议。但大多数设备使用仅工作模式或6位数字模式,因此大部分的BLE设备是易受攻击的。
任何研究BLE物联网设备的人都应熟悉Ryan的研究和Ubertooth系列工具,因为这些是进行网络流量分析和对问题产品的安全设计测试中不可缺少的部分。此外,截止到写作本书时,目前的蓝牙规范(4.1)仍没有解决暴力攻击问题,所以依靠BLE加密的设备依旧脆弱。
2.3.2 Kevo移动应用程序不安全
图2-3中的Kwikset Kevo锁可通过iPhone上配套的Kevo iOS应用程序操作。
在第一次启动时,用户被要求指定一个电子邮件地址和密码。如图2-7所示,密码必须为8个字符及以上,至少包含1个数字。
如图2-8所示,Kevo应用程序采用了一个策略,如果密码输入错误6次则锁定账户。锁定有效期为24小时。
图2-7:Kevo iPhone应用程序最低密码要求
忘记密码的用户必须正确回答账户相关的安全问题(如图2-9所示)。由Kevo应用程序选出的这些问题是在用户创建账户时提示用户回答的。
图2-8:Kevo账户输入错误6次后被锁定
如果一名恶意攻击者已经暂时获得了用户的电子邮件账户,便可尝试猜测答案或通过网络钓鱼攻击用社会工程学方法获得密码。与此同时,Kevo应用程序就密码的复杂性做了出色的工作,采用锁定策略并要求回答安全问题,但用户应该认识到,这些信息可经常通过钓鱼攻击和恶意软件的方法窃取到。
该锁还实现了一种机制,允许用户向其他人发送电子密钥。你只要提供个人的电子邮件地址,对方就会收到一封来自Kevo的电子邮件,如图2-10所示。要打开锁,对方必须先用Kevo iPhone应用程序建立一个账户,并验证自己的电子邮件地址。
图2-9:Kevo重置密码的安全问题
这里的安全风险是犯罪分子可能临时获得攻击目标的电子邮件账户。由于被攻击目标必须建立一个新账户,并回答有关注册的安全问题,犯罪分子可以输入任意的安全问题答案,这将反过来锁定正在重置密码的合法用户。
从房门里面抬起门锁上面的盖子很容易发现一个编程按钮。如图2-11所示,用户按下这个按钮并在锁旁边拿着电话用它打开门锁。一旦设置好,用户需要触摸门锁外面的面板唤醒门锁。这时,当门锁在附近发现一个预编程授权的iPhone,门锁和iPhone就可以通过BLE通信实现打开(或锁上)。
图2-10:向外部发送电子钥匙
然而,有人用一部从未授权的新iPhone,只需下载Kevo应用程序并猜到或获取到密码,登录到应用程序后就能开锁。虽然应用程序实现了控制密码的安全机制,但要做到让门锁更安全,可以在即使知道密码的情况下仍需要新设备使用编程按钮来配对。
这给我们带来对锁本身的物理接触的问题。我们知道使用各种方法撞锁开门是一项技艺,有些人非常擅长。事实上,对Kevo锁进行撞锁开门测试,人们可以绕开物理钥匙的机制。
物理撞锁是一个人们熟知的影响很多锁的问题,除此之外,移动应用程序功能应用在Kevo锁上,人们可以用iPhone和临时物理接触门锁,在几秒钟之内重新给锁编程,使其关联上一个新设备——实际上,这是一种虚拟撞锁。通过按住重置按钮几秒钟,如图2-12所示,然后一步步按照图2-11中那样就可以关联新的设备了。临时物理接触门锁的人不需要有物理撞锁的技能,也不需要额外的训练和工具,就可以很容易地做到这些。
图2-11:用锁上的编程按钮关联iPhone
注意,这个人必须进到被保护的场所内才可以,因为重置和编程按钮是朝向里面的。然而,仍有一种风险,临时工或拜访者可以滥用这个功能下次不请自入。或更有甚者,他们把电子钥匙发给其他人。
本节提供了一个很好的例子,我们应当仔细考虑这个问题,我们越来越依赖移动应用程序来保障我们的人身安全。密码猜测和钓鱼攻击常被用来攻击我们的数字信息,但如同Kevo iPhone应用程序一样,平台上相同的攻击可能会破坏家庭和办公室的物理安全。
图2-12:门锁上的重置按钮
锁制造商需要有更强的意识认识到这些威胁,并实施更严格的控制。由于物联网设备固件的物理性质,事实上情况很复杂,即便使用应用程序界面提供升级,许多用户为了节约时间,都会延迟升级。他们不想在离开家或回家的时候还等待门锁处理安全补丁安装。
这意味着:基于物联网的设备制造商如Kevo,必须力争在其产品的初始版本实现正确的安全功能。这很不容易,因为安全是很难完美的,所以使用这些设备的用户应该意识到潜在的风险,正如本节所描述的。