随着消费电子器件快速发展和物联网在生活中的快递推进,促使芯片产商和大量的智能设备创业团队在智能生活领域加大投入,芯片产商针对各种生活场景提供有针对性的整套SoC(System On Chip)方案。这对小的智能设备创业团队降低了进入该领域的门槛,小团队可以快速的利用芯片产商提供的解决方案,可以定制化硬件设备产品,自己可以不关心硬件集成的问题,自己只需要利用芯片产商提供的SDK开发平台开发自已的上层应用即可。
今天我将深入介绍物联网应用中智能设备的一些设计架构和安全问题上的问题,我们将以Broadlink的智能插座作为研究目标来窥探整个博联智能生态网络的安全问题,该系列安全漏洞在2015年的GeekPWN智能设备破解上进行演示过。
0×01初识智能插座
今天我选择分析研究的这款插座是 博联的SP2(smart plug) ,为什么选择这款插座,这款插座现在应用比较多,而且使用的元器件产商marvell提供的smart energy在国内的创业团队中也应用的比较多,据悉小米插座也使用了marvell的解决方案。
外观如下图,是我们今天研究的主角.
通过拆解插座我们得知它使用的一些芯片和元器件,下图插座核心模块.
Cortex-M3处理器+WIFI模块,具体芯片是marvell的88MC200+88W8782
下图是插座的继电器模块,主要功能是用于开关插座,具体器件是Y14F-SS-105LMW-115
下图是电量计量模块,用于记录电量使用情况,具体器件是ATT7021CU
从使用的这几个模块来看,基本上我们能够确定一些关联,微控制器是核心的控制中心,管理WIFI模块用于联网和通信,管理继电模块物理开关插座,从计电传感器读取电量的使用情况,以上的微控制模块是我们今天研究的重点。
0×02.系统架构
我们将从硬件架构和软件系统来对这款插座进行详细介绍。
2.1硬件架构
这里我们将详细介绍该核心控制系统的硬件和软件架构,上面我们提到了微控制芯片marvell的88MC200和WIFI模块88W8782,这两芯片组合就是Marvell提供的smart Energy解决方案。
下图是硬件组合功能图
简单介绍这两片芯片的特性:
88MC200:ARM Cortex M3的核,处理器时钟高达200Mhz,512KB SRAM,1MB Flash片上存储空间,128位AES加密算法引擎,CRC算法引擎.
88W8782:集成Marvell Feroceon CPU(ARMv5TE-compliant)高达128Mhz处理器时钟,兼容802.11 a/b/g/n,支持WIFI-Direct和stations模式(后面会详细介绍,传说中的SmartConfig)
2.2软件系统架构
该插座的软件系统基于Marvell的Easy-Connect SDK开发平台来完成,产商通过Marvell提供的开发平台来开发属于自己的上层应用,通过marvell提供的信息来看,我们可知该插座的软件系统的一些特性,下图是marvell提供的开发板。
操作系统:FreeRTOS
TCPIP协议栈 :LwIP(一个轻量级的TCPIP协议栈的实现)
简单介绍一下嵌入式操作系统FreeRTOS,这是一款开源的跨平台的迷你实时操作系统,第一次知道这个操作系统要从硅谷有一家做智能手表的公司叫pebble watch说起,他们是从美国众筹网站kickstarter上融到钱做智能手表的,他们就是用的FreeRTOS。
它的特点就是短小精悍,最小的FreeRTOS核心仅包含3个.C文件(task.c,queue.c, list.c)和少量的头文件,精简编绎的二进制文件可以小到10几K,非常适合做这种低功耗的智能设备的操作系统,博联的这个插座的整个系统的firmware才260多KB,里面包括整个硬件初始化,FreeRTOS系统和TCPIP协议栈,无线管理,上层业务逻辑等等,使用FTFS精简文件系统,显得非常紧簇和精简,下面我们将介绍插座的启动过程。
2.2.1系统引导过程
我们从一些途径获取到了该插座的更新固件(BL_SP2-27-3.bin),因此我们可以获知它的内部系统运行的流程和功能,下图是该固件的结构分析图。
该固件的头部0×28个字节包含头部标识,固件长度,和加载地址,固件校验等信息。
对于88MC200的芯片启动过程来讲,我们有必要附上整个硬件系统的内存分布图,来详细介绍其启动过程,它使用的是Cortex-M3 32位的处理器,使用ARMv7-M架构,使用的指令集Thumb-2(16/32位混用),由于代码密度高,所以编绎出来的体积小。
简单介绍一下硬件系统部分地址空间分布:
1.地址空间0×0000-0×100000,片上1MB flash存储,0×0~0×1000为Boot ROM,BootROM的功能主要是把flash上面存储的固件加载到起始地址为0×100000的静态内存上去。
2.片上静态内存(SRAM),大小512KB分为4个段,跨代码和数据段,分别是(RAM0/1/2/3),地址空间和大小可以通过系统控制存器标志位可配,默认配置如下:
0x100000-0x12ffff RAM0 192KB (用于存储代码和数据) 0x12ffff-0x15ffff RAM1 192KB (用于存储代码和数据) 0x20000000-0x20010000 RAM2 64KB (运行时栈空间) 0x20010000-0x20020000 RAM3 64KB (BootROM运行时栈空间)
3.AON Domain静态内存,
0x480c0000-0x480c1000 4KB AON Domain(用于存储一些即使系统断电后关键的信息,上电唤醒后还能继续使用)
启动过程如下:
1.BootROM 从0地址读4个字节数据作为初始MSP(主堆栈)的值,然后从0×04地址取值作为指令执行的入口接管MCU(微控制器),通过SPI控制器读取WIFI Flash固件到内存空间,并且WIFI固件代码接管控制权。
2.WIFI固件代码把flash上面的系统固件加载到静态内存0×100000处,然后跳到0×100000读取4个字节值作为MSP的初始值,读0×100004作为PC的初始值并开始执行代码,此处是向量表中的reset执行函数
3.初始化电源管理单元(PMU)
4.初始化uart和watchdog
5.从flash里面读取系统之前运行的配置数据信息并校验
6.初始化wlan(包括tcpip协议栈,wifi芯片的驱动,无线网络管理)、GPIO和PIN_MUX
7.初始化AES加密算法引擎
8.初始化插座的业务逻辑等
这里我们将重点介绍业务逻辑。
设备配置
智能设备运行起来并且使用它之前必须用户对它进行配置联网并手机关联帐号等步骤,联网之前必须告之智能设备家里使用的WIFI帐号和密码,这个过程是通过手机来完成,具体方式通过SmartConfig或者DIRECT WIFI来实现。
先说SmartConfig模式,该模式是让设备的WIFI模块处于监听模式,这样设备可以收到原始的802.11的数据帧,手机把wifi帐号信息通过随机数据长度编码的方式告之给设备,完成WIFI配网,具体流程如下:
上图完成整个WIFI配网和手机和设备配对的过程。
DIRECT WIFI的方式更加简单,智能设备把自己变成一个WIFI的AP,让手机用户连接上去,手机用户告之设备家庭WIFI的帐号信息即可完成配网过程,手机配对过程同上。
控制插座的客户端与插座之间会协商一个16字位的AES密钥,该密钥的生成基于插座的系统时钟来生成,该密钥将用于业务控制逻辑,比如手机远程控制设备的开关等操作,云端只进行转发和定位设备网络链路,该密钥存储于手机端和设备端,云端并不存储该信息,所有的设备都是MAC地址进行索引。
Broadlink智能设备生态
博联智能设备生态分两类,第一类就是博联通过自己的物联网解决方案开发的属于自己的智能设备产品,比如如下的智能插座,万能遥控,智能音响,属于自己的产品。
第二类是第三方设备产商通过博联的物联网解决方案加入到它的智能生态中来的设备产商,其中包括传统的家居制造商和一些智能设备产商,如下图示。
博联提供的物联网解决方案包括硬件和软件两方面,硬件就是上面我们提到的Marvell的智能家居方案,软件包括Marvell提供的低功耗嵌入式操作系统方案和博联提供的手机App SDK,网络管理逻辑和云端通信存储方案(可选,因为有的产商是自己建立云端),而设备的控制逻辑由产商开发完成,整体解决方案按照设备收取每个设备9.999元。
Broadlink设备漏洞
1.控制端缺乏严格的认证导致设备可被攻击者所控制,由于设备与控制端的认证体系的脆弱,设备没有对控制端进行可信性认证,导致设备可能会被恶意攻击者所控制,由于大部分智能设备都在家庭网络里面使用,由于路由器的关系,所以危害性得以缓解,但是在通过我们全球扫描过程中发现仍有大约10000左右的设备暴露在公网中(包括第三方产商的智能设备),大部分在中国。
2.未公开的一键“自毁”功能,由于博联所有的智能设备产品都是使用同一套协议框架代码进行开发,不同系列产品只是控制逻辑不同,导致底层代码出问题,所有其它系列产品都会受到影响,该漏洞藏于全系列代码中,一未公开的功能,特定的网络包,可以远程重置设备,清除系统配置信息,让设备处于不可用状态。
漏洞一之危害性:
由于漏洞一的存在,可以导致智能设备能够远程被黑客控制并且拥有和设备正常用户同样的操作与控制权,由于博联设备支持从非官方地址更新固件,所以黑客可以远程更新插入恶意代码的固件,由于固件更新验证机制比较脆弱,没有数字签名,远程更新固件的防线也轻而易举,笔者为了验证其危害性,自制固件,插入一段代码目的为了把远程智能设备用户家里的WIFI帐号和密码,还有智能设备的MAC地址信息发送到我们的C&C服务器来,并且不破坏智能设备原有的正常业务逻辑。
我们C&C服务器的UDP 80将会收到MAC地址和远程的WIFI帐号信息与密码信息。
通过自制固件远程更新并且能够从智能设备中获取用户手机的用户名和IMEI等信息,并且可以渗透内网等功能。
Broadlink智能生态漏洞
该漏洞同博联的漏洞一,通过该漏洞可以远程控制生态里面的其它智能设备,可能受影响的产品如下。
注: 由于部分产品的验证机制在第三方的云端,所以可能不受此漏洞的影响。
0×03.安全修补建议
1. 完善客户端接入验证机制,例如每台设备有一个唯一的序列号和验证码用于接入时验证。
2. 发布版本的测试代码一定要清除掉,可能测试代码会成为产品的后门而存在。
3. 固件更新的签名机制,这个我觉得跟Marvell提供的物联网解决方案有关。
4. SDL开发流程。
* 作者:谢君(阿里巴巴安全部),转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)