一. 引言
物联网设备进入了千家万户,其安全问题也逐渐被重视起来。作为网络安全厂商,我们在物联网安全方面做了许多研究,今年成立了“格物实验室”,专门研究物联网的安全方案,其中就包括物联网设备的安全研究。
与传统设备相比,物联网设备似乎只是因为联网了,设备可以被我们通过APP等人性化的方式控制,或者可以通过网卡和云端相连与我们交互,才被我们成为物-联网设备。简单地说,防护物联网设备也可以从两个方面着手:一个是从设备本身的安全能力,另一个是对其通信做足够强的认证和加密,即同时实现本地设备信息保护和网络信息保护。只要做好这两方面的保护,攻击者、研究员是很难从物联网设备中获取信息以挖掘、利用漏洞,进而损害大家的财产、生命的安全。
物联网设备如何实现这两个位置的信息保护?接下来,笔者根据性能差异,将物联网设备分为两类:一类设备是由MCU(微控制器)为核心的方案研发而成,另一类是由MPU(微处理器)为核心的方案研发而成。并针对这两类设备,分别以ST、NXP的安全方案为例,讨论问题:如果将这两个厂商的安全方案应用地好,能防护哪些攻击,保证哪些信息的安全。
写这篇文章的目的,是希望可以把物联网设备上已有的安全功能解析出来,并希望借此,使工程师在设计、研发产品时,充分考虑一些风险,并规避风险。最好的是,希望能提出一些可行的防护方法,既能保留厂家在出厂时留下的维修接口,又能保证产品的安全。
二. 两类不同性能的物联网设备简介
为什么把物联网设备根据性能不同划分为两类?主要原因是这两类物联网设备的软硬件方案不同,其防护思路,也要根据其软硬件方案有针对地进行。性能低的一类,通常被用于智能插座、门磁、温湿度传感器等物联网设备中,这类设备通常不需要在本地(设备端,相对于云端而言)做数据处理,只需要把数据收集,再和云端交互即可。性能高的一类,通常可以满足信息处理的需求,比如摄像头通常会集成一个性能优秀的处理器做音视频信号的编解码,路由器会做好网络流量的转发、解析、控制等。
图1 两类物联网设备(左:性能低;右:性能高)
既然是做信息保护,一定会用到密码学算法,现代的处理器不同于以往,即使是一个低性能的物联网设备,其搭载的处理器中都会有硬件的加解密模块,从而保证数据安全的前提下,满足一般场景的数据实时上传、处理、更新的需求。图2所示为一个低性能设备的网卡,该网卡同时实现了两个功能:传统功能的控制(控制插座开、关)和网络信息的发送、接收。
图2 低性能类设备的主控器
在该网卡的芯片手册中,我们得知该网卡用于zigbee组网,我们查到了其芯片内有硬件的128位AES加解密的模块,当时钟输入到该模块中时,该模块会在一段时钟周期之内输出密文到固定寄存器或者其他存储器中,以节省CPU的计算性能,并在数据加密的情况下,保证数据处理时效。
图3 JN5169的AES硬件加密模块的官方文档描述
性能更高的一类设备,如汽车中的辅助驾驶系统,对数据的时效和处理等有硬性的要求,所以这类设备一般会用更高主频的处理器,更先进的架构来满足这些需求。该处理器的性能参数和安全能力如图4所示。一般,如果厂商重视芯片的安全能力,会单独给出文档,说明设计每个安全功能的目的以及每个安全功能的用法。
图4 imx6的性能参数
图5 imx6的安全机制
接下来,笔者以ST和NXP为例,分别介绍这两个公司在MCU、MPU产品中集成的安全能力。
三. 保护固件的方法
1 基于MCU的固件保护方法
以ST公司的STM32系列MCU为例。这一系列的MCU都集成了ARM核心,一般会提供JTAG/SWD的调试接口,方便在开发软件的时候调试。但是,JTAG这类接口也方便了攻击者获取、调试固件,进而理清物联网设备的工作流程,挖掘出一些漏洞。最近两年,ST举办多场巡讲会,介绍其在芯片安全上的应用,让开发者在产品研发阶段采用更安全的开发方案。
目前,从攻击者对物联网设备的攻击手法上看,大多数攻击者首先会尝试获取固件,因为固件中包括了几乎本地的所有信息。如果不对固件做保护,结果可想而知。笔者前段时间也发文《物联网设备固件的安全性分析》介绍了固件提取的三类途径,由这三类提取途径衍生出的各种提取方法层出不穷,ST针对密钥的保护与固件的保护可以同时利用RDP(Readout Protection)等功能来实现。读保护的三个等级中,等级1允许对固件的重写入而不允许读取固件,在擦除旧固件并将新固件写入后,如果新固件解除了读保护功能,则允许JTAG接口和调试器建立连接。而且,攻击者获取不到固件是很难在固件中植入恶意代码的。该等级适合产品维修等场景使用。所以,加入需要保留维修、调试接口,只要设计好RDP等级,外部JTAG等调试接口和UART接口保留在PCB板上即可,不必清除。前文针对RDP已经介绍过了,所以此处不再过多介绍。
2 基于MPU的固件保护方法
MCU的固件、密钥等信息可以得到保护,MPU的性能比MCU的更加强大,理论上讲,更方便设计安全模块应用于物联网设备中。笔者在这里介绍NXP的imx283内部的安全机制能防护哪些攻击。其中大部分内容是参考NXP的官方文档AN4581。
图6 imx283手册中描述的安全功能
其他的我们能理解,如安全启动过程经过硬件的AES模块将加密的固件解密,只读区域的设定,硬件哈希和OTP的AES密钥不可见等,HAB并没有做说明。AN4581文档中专门针对HAB做了解说。说白了就是实现了安全启动过程中的代码签名和密钥管理机制。
图7 imx6固件结构
根据其固件结构看,启动代码中加入了对其引导的image做的签名,既然有签名,一定需要一个验签的流程。设备众多,NXP做了一个CA树,用于对每个设备颁发证书,实现一机一密。私钥不会在设备上,所以攻击者即使拿到了设备,也获取不到私钥,更没办法对伪造的image做合法的签名,代码也不能被篡改。
图8 CA树
图9 启用U-Boot中的安全启动功能
U-Boot的功能偏芯片控制的层面,所以如果开启安全启动功能,需要在编译U-Boot源码前改好源码或者配置好相关配置文件,编译后生成可对后续的代码验签的功能的U-Boot即可。
当然,签名只能保证被签名的代码不被更改,但是依然不能解决代码是明文的问题。U-Boot的基本功能就是把存储在硬盘中的代码加载到内存中,并指定起始地址执行的。当然也可以在加载之前先利用分组加密的方法对代码进行分组解密后,再加载到内存中。这部分功能就需要在U-Boot中实现了。这里不再赘述。
四. 小结
笔者通过介绍两类物联网设备的固件防护方法,保证设备的安全性。当攻击者无法获取到明文固件的时候,在设备端获取到的信息必然大大减少,有助于保护物联网设备。希望笔者研究固件安全的一系列文章将对物联网设备开发者和信息安全从业人员提供帮助,希望今后的物联网设备越来越安全。
参考资料:
[1].Secure Boot on i.MX 50, i.MX 53, i.MX 6 and i.MX 7 Series using HABv4,https://www.nxp.com/docs/en/application-note/AN4581.pdf
[2]. Introduction to STM32 microcontrollers security,链接已失效。
[3].渗透低性能智能设备的关键技术-固件提取,http://blog.nsfocus.net/firmware-extraction/
[4]. 弱设备防护方法,http://blog.nsfocus.net/iot-security-protection/
[5]. 物联网设备固件的安全性分析,http://blog.nsfocus.net/security-analysis-of-the-firmware-of-iot/
[6]. 丰田 C-HR 拆解调研:ADAS (先进驾驶辅助系统),https://www.marklines.com/cn/report/rep1696_201803
内容编辑:物联网安全实验室 张克雷
声明:本文来自绿盟科技研究通讯,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。