如何渗透联网智能灯泡——LIFX智能灯泡

  • A+
所属分类:未分类

写在前面的话

这篇文章的“主人公”,即LIFX智能灯泡。根据官方描述,这种灯泡配备了WiFi功能,可以进行多色调节,它是一种高效节能的LED灯泡,并且可以通过智能手机[1]远程控制。考虑到它使用了新型的无线网络协议以及其进入市场的高调程度,因此我们选择对这款物联网设备进行安全分析。

LIFX项目最初于2012年9月份在众筹网站Kickstarter上发起,当时该项目大受欢迎,其最终筹得的资金是原始计划的十三倍之多。

为了通过智能手机应用来进行远程控制,LIFX灯泡需要连接至WiFi网络。如果处于多个灯泡均可用的情况下,用户只需要将其中一个灯泡接入网络即可。这个“主”灯泡可以接收智能手机应用发送过来的控制命令,并将命令通过一个802.15.4 6LoWPAN无线mesh网络广播给其他灯泡。

802.15.4 6LoWPAN无线mesh网络运行架构如下图所示:

当“主”灯泡熄灭或者断开网络连接之后,剩下的灯泡会自动选出一个来代替之前“主”灯泡的位置,然后接入网络并继续负责给其他灯泡发送控制命令。这种架构一次只需要一个灯泡接入网络,其优势是非常明显的。比如说,其余灯泡在不亮的时候可以用低功耗模式运行,扩展了灯泡网络的可用范围,并且还不会给WiFi网络造成拥塞。

毫无疑问,使用这种新型的网络通信协议之后,mesh网络和主/从通信端都会成为攻击者的攻击目标,因此我们决定选取一些灯泡并开始我们的研究。

分析攻击面

LIFX灯泡网络中有三个核心通信组件:

1.      智能手机端;
2.      灯泡WiFi通信;
3.      灯泡mesh网络通信;

首先,我们将对802.15.4 6LoWPAN 无线mesh网络中的安全漏洞进行研究和分析。其中,我们将重点分析各个灯泡之间是如何通过6LoWPAN mesh网络来共享WiFi网络凭证的。

6LoWPAN是一种基于IEE802.15.4的无线通信规范,这一点与Zigbee是一样的(同样基于IEE802.15.4)。6LoWPAN可以允许设备通过低功耗个人局域网络(PAN)来转发IPv6数据包。

为了监听和注入6LoWPAN流量,我们还需要一台使用802.15.4规范的外部设备。我们这里选择了ATMEL AVR Raven[2],并安装了Contiki 6LoWPAN固件镜像[3]。它可以提供一个标准网络接口,而我们就可以利用它来监控并向LIFX mesh网络注入网络流量了。

协议分析

安装了Contiki的Raven网络接口将允许我们对LIFX mesh网络进行监控以及流量注入,而就我们的观察情况来看,该协议似乎并没有经过加密。这也就意味着,我们可以轻松地对协议进行剖析,伪造用于控制灯泡活动的信息,并重放任意数据包Payload。

我们在添加新灯泡时,对mesh网络进行了监控并捕获了相关数据包,并识别出了灯泡间共享WiFi网络凭证的特定数据包。整个过程大致如下:首先,主灯泡向网络广播称有新的灯泡要添加进来,新的灯泡会给主灯泡发送响应信息,然后要求获取WiFi数据。接下来,主灯泡会将经过加密的WiFi信息通过mesh网络发送给新的灯泡。最后,新的灯泡会被添加进LIFX智能手机应用中的可用灯泡列表之中。

下图即为我们用Wireshark捕获到的6LoWPAN数据包:

如上图所示,其中的WiFi细节信息包括凭证数据在内,并通过加密代码块的形式进行发送。

在对添加灯泡的过程进行深入分析之后,我们发现我们可以向mesh网络注入数据包并在主灯泡毫不知情的情况下请求获取WiFi详细数据。除此之外,我们在请求WiFi详细信息的时候既不需要添加任何的新设备,也不会让LIFX智能手机应用发出警报。

这样一来,我们就可以随意向mesh网络请求获取WiFi凭证了。但是我们目前所掌握的信息还不足以完成解密任务,为了进一步实现攻击,我们还需要了解其中的加密机制。

获取固件

一般来说,当我们想要了解某款新设备所使用的加密机制时,我们首先会对其固件进行分析。理想情况下,我们可以直接从厂商网站上下载固件。但是由于LIFX设备是一款刚刚上市的新品,因此厂商还没有发布可公开下载的固件。所以我们现在只能自己想办法获取固件了。

为了从设备中提取出固件,我们首先需要物理访问内置的微型控制器,这可是个技术活,我们的目标就是如下图所示的这个PCB板:

通过分析PCB板,我们发现该设备主要是由两套芯片集成电路系统组成的:即德州仪器CC2538(负责处理设备通信-6LoWPAN无线mesh网络)和意法半导体STM32F205ZG(LIFX LWM-01-A,负责处理WiFi端通信),这两块芯片均基于ARM Cortex-M3处理器。通过进一步分析后,我们发现这两块芯片的JTAG接口(暴露在PCB板上)都有其特殊的功能。JTAG,即Joint Test Action Group(联合测试工作组),它是一种国际标准测试协议(IEEE 1149.1兼容),主要用于对微型控制器和硬件进行测试以及调试。

识别出了每一块芯片的JTAG接口之后,我们就可以向芯片发送JTAG命令了。这个过程需要使用到一些其他的硬件和软件。我们选择使用的是BusBlaster JTAG调试器[5]以及开源的Open On-Chip Debugger(OpenOCD)[6]。配置好之后,我们就可以向芯片发送JTAG命令了。

下图即为BusBlaster JTAG Debugger:

接下来,我们就能够导出每一块芯片的闪存数据,并开始对固件进行逆向分析。

固件的逆向分析

获取到固件镜像源码之后,我们需要知道哪一个镜像负责存储和解密WiFi凭证。通过搜索相关字符串之后,我们发现凭证数据存储在LIFX LWM-01-A芯片的固件镜像之中。将该镜像加载进IDA Pro中之后,我们通过搜索常见加密常量找出了加密代码,越来LIFX使用的是AES。

AES这种对称加密算法要求加密方和解密方共同访问一份相同的预共享密钥。在LIFX的实现中,这种设计暗示着每一台设备都会发送一个全局常量密钥。如果设备能够获取到预共享密钥,那我们就可以使用这个密钥来解密其他LIFX灯泡发送的信息了。事实证明,我们的确可以用这个密钥来解密其他LIFX灯泡发送的信息。

通过对这些密码学常量的引用情况进行分析之后,我们发现了负责实现加密和解密操作的代码。在一款免费AES软件[7]的帮助下,我们对加密函数进行了逆向分析并提取出了加密密钥和初始向量等信息。

下图是我们使用IDA Pro反编译出的部分固件加密代码:

最后一步,就是要用提取出来的加密密钥解密WiFi凭证以证明其有效性了。结果想必大家也已经清楚了,这些加密变量就是我们所要寻找的东西。

总结

现在,我们不仅知道了加密算法、密钥和初始向量,而且我们还对mesh网络协议进行了分析并能够向mesh网络注入数据包、捕获WiFi详细信息并解密WiFi凭证。值得一提的是,整个操作过程并不要求我们完成任何的身份验证,而且更不会向用户发出警告提醒。非常好!

需要注意的是,由于这种攻击技术针对的是802 15.4 6LoWPAN无线mesh网络,因此攻击者必须要身处无线网络的覆盖范围之内(30米之内),并对存在漏洞的LIFX智能灯泡发动此类攻击。

注:厂商现已发布了更新版本的固件镜像,并修复了本文所介绍的安全漏洞(对所有的6LoWPAN流量进行了加密)。新版固件下载地址:【点我获取

参考资料

[1] http://lifx.co

[2] http://www.atmel.com/tools/avrraven.aspx

[3] http://www.contiki-os.org/

[4] https://apps.fcc.gov/oetcf/eas/reports/ViewExhibitReport.cfm?mode=Exhibits&RequestTimeout=500&calledFromFrame=N&application_id=216608&fcc_id=2AA53-LIFX01

[5] http://dangerousprototypes.com/docs/Bus_Blaster

[6] http://openocd.sourceforge.net/

[7] http://svn.ghostscript.com/ghostscript/tags/ghostscript-9.01/base/aes.c

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: