译者:blueSky
预估稿费:200RMB
投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿
前言
这篇博客的主题是关于LIFX灯泡的,LIFX是一款智能灯泡,它能够用WIFI控制,节能,多颜色显示,可以使用Android或iOS手机控制。我们之所以选择对这款产品进行研究,主要是因为它使用了新兴的无线网络协议,投入市场的方式以及先进的技术深深的吸引了我们。
2012年9月,LIFX项目开始于Kickstarter众筹平台,该产品刚开始在众筹平台上线就受到了投资者们的青睐,其募集到的资金是其原始目标资金的13倍以上。
LIFX灯泡通常需要连接到WiFi网络,以便使用智能手机应用程序能够对灯泡进行控制。在有多个灯泡可用的情况下,只有一个灯泡将连接到网络。这个“主”灯泡从智能手机应用程序上接收命令,并通过802.15.4 6LoWPAN无线网络将其广播到其他灯泡。
WiFi和802.15.4 6LoWPAN mesh网络
在主灯泡关闭或与WIFI网络断开连接的情况下,系统会从剩余灯泡中重新选择一个灯泡作为主设备,并使其连接到WiFi网络,新主设备继续将命令发送到其他灯泡。这种一次只需要连接一个灯泡到WiFi上的架构具有许多优点,其中包括剩余灯泡在不亮时以低功率运行,还有就是可以使灯泡网络的可用范围远远超过WiFi网络的覆盖范围,这样可以减少WiFi网络的拥塞。
不用说,LIFX灯泡使用的新兴无线通信协议,mesh网络结构以及主/从通信方式深深吸进了“黑客”的注意力,因此我们拿起了几个灯泡并开始了我们的研究之旅。该博客针对LIFX固件1.1版本进行了研究和分析,并且自从向LIFX报告了研究结果之后,该公司已经对固件1.1版本进行了升级,现在1.2版本已经可供下载了。
开启攻击之旅
LIFX灯泡网络中有以下三个核心通信组件:
1.智能手机到灯泡的通信
2.灯泡WiFi通信
3.灯泡网络通信
分析初始阶段碰到的最大难题是新技术和理论知识带给我们的挑战,因此我们准备从灯泡内的802.15.4 6LoWPAN无线mesh网络开始着手,以查看其是否存在漏洞。具体来说,我们决定研究LIFX灯泡是如何在6LoWPAN mesh网络之间共享WiFi网络凭证的。
6LoWPAN是一种基于IEEE 802.15.4构建的无线通信规范,与Zigbee使用的基本标准相同,该规范允许通过低功率的Personal Area Networks (PAN)转发IPv6数据包。为了监控和注入6LoWPAN流量,我们需要一个基于802.15.4规范的外围设备。在此任务中我们选择的设备是安装了Contiki 6LoWPAN固件镜像的ATMEL AVR Raven ,该设备提供了一个标准的网络接口,通过该网络接口我们可以监控和注入网络流量到LIFX mesh网络。
协议分析
通过上述网络接口,我们可以监控并将网络流量注入到LIFX mesh网络中。通过观察我们发现LIFX网络在很大程度上是未加密的,因此我们可以轻松地解析其网络协议,并构造消息来控制灯泡并重放任意数据包的有效载荷。
通过在LIFX网络中添加新灯泡以及同时监控从mesh网络中捕获的数据包,我们能够识别有关WiFi网络凭证的特定数据包。整个新灯泡的加入过程包括主灯泡在网络上广播有一个新灯泡加入进网络;之后新灯泡对主灯泡的广播作出响应,并请求传输WiFi凭证细节;然后主灯泡通过mesh网络广播加密的WiFi凭证细节,并将新的灯泡添加到LIFX智能手机应用程序中的可用灯泡列表中。
通过Wireshark 6LoWPAN捕获数据包
通过对捕获到的数据包进行分析我们发现,WiFi细节(包括凭证)是被加密传输的,因此我们可以在mesh网络中注入数据包,以获取WiFi细节。此外,获取WiFi详细信息的过程不会添加任何新设备或在LIFX智能手机应用程序中引发任何警报。现在我们可以任意地从mesh网络获取WiFi凭证,但却没办法来解密它们。为了进一步的攻击,我们需要对其使用的加密机制进行分析。
获取固件
我们首先从分析LIFX设备的固件开始来尝试去破解其加密机制,一般情况下,我们只需要从供应商网站下载固件,脱壳,解密或以其他方式将其更改为我们熟悉的格式就可以了。然而,在研究时我们发现,由于LIFX设备刚投入市场,因此供应商还没有向公众发布可以分析的固件。在这种情况下,我们只能自己获取LIFX设备的固件。
为了从设备中提取固件,我们首先需要获得对内嵌的微控制器的物理访问,这是一个非常讲究技术的获取过程。对于外行人来说,似乎只不过是用锤子敲击它,直到能够看到LIFX设备的内部结构。一旦获取内嵌的微控制器,我们就可以访问Printed Circuit Board (PCB)了,该设备如下图所示:
提取LIFX PCB
通过分析获取到PCB我们发现,该器件主要由两个片上系统(SoC)集成电路(IC)组成:一个是德州仪器CC2538,其主要负责6LoWPAN网络设备的通信,另一个是STMicroelectronics STM32F205ZG,其主要负责WiFi端的通信。这两款芯片均基于ARM Cortex-M3处理器。进一步的分析发现,每个芯片上的JTAG引脚功能齐全。JTAG是Joint Test Action Group的缩写,是IEEE 1149.1标准的常用名称,它描述了用于测试微控制器缺陷的一种协议,并通过Test Action Port接口调试硬件。
一旦确定了每个芯片正确的JTAG引脚以及准备好连接到芯片的JTAG接口,下一步要做的事情是手动跟踪引脚,分析以及自动探测。为了能够控制发送到芯片的JTAG命令,我们需要硬件和软件组合起来使用。在这种情况下使用的硬件是开源的BusBlaster JTAG调试器,它与开源的OpenOCD调试器配合使用。在配置好硬件和软件之后,我们可以向芯片发出JTAG命令了。
BusBlaster JTAG调试器
此时,我们可以从每个芯片中快速的转储闪存,并启动对固件的逆向分析工作。
逆向分析固件
现在我们拥有两个二进制的blob固件,我们需要识别哪个固件负责存储和加密WiFi凭证。通过映像上的“字符串”我们确定WIFI凭证存储在LIFX LWM-01-A芯片的固件映像中。
将固件映像加载到IDA Pro中,我们可以通过查找常见的加密常量(S-Boxes,Forward and Reverse Tables和Initialization Constant)来识别加密代码,通过该方法我们确定芯片中使用的是AES加密算法。由于AES是一种对称加密算法,因此加密密钥和解密密钥是相同的。通过分析我们发现在LIFX的设计中,每个设备都会发出一个恒定的全局密钥。因此如果我们可以从一个设备中获取密钥,那么我们就可以使用相同的密钥来解密所有其他设备发送的消息。在这种情况下,密钥可用于解密从任何LIFX灯泡发送的加密消息。由于加密常量也可用于识别加密和解密程序的汇编代码,因此在AES算法开源实现的帮助下,我们可以通过逆向分析之前定位到的加密函数来提取加密密钥,初始化向量以及块模式。
IDA Pro拆解固件加密代码
最后一步是通过使用提取到的密钥解密从网络中嗅探到的WiFi凭证来证明提取的加密密钥是否正确。
组合攻击
掌握了加密算法,密钥,初始化向量以及对mesh网络协议的了解,我们可以将数据包注入到mesh网络中,捕获WiFi细节并解密凭证,所有这一切都不会引起LIFX设备的任何身份验证或警报。因此我们成功了!
应该注意的是,由于这种攻击是针对802.15.4 6LoWPAN无线mesh网络进行的攻击,所以攻击者需要在一个易受攻击的LIFX灯泡的无线覆盖范围内(30米范围内)进行攻击,因此这严重限制了大规模漏洞利用的实用性。
修复建议
在发现该漏洞后我们及时通知了LIFX公司,并一起协助该公司完成了漏洞的修复工作,以及其他进一步的安全性改进措施。现在,新固件使用从WiFi凭证导出的加密密钥来加密所有的6LoWPAN流量,并包括了用于保证新灯泡能够安全加入到WIFI网络中的安全功能。
当然,任何物联网设备,无论是手机,笔记本电脑,还是灯泡,黑客总是有机会将其劫持,后续我们将会在博客中介绍更多有关劫持物联网设备的技术文章。