我们的社会非常依赖互联网去完成我们的大多数商业活动,因为在这些活动中通信、金融交易和娱乐占很大的部分。随着越来越多的设备加入物联网(IoT),对互联网的依赖性只会越来越强。如果这些设备是不安全的,那么这种依赖性将产生显著的安全漏洞。如果不能保证每个设备的安全,那么这些设备将很容易受到攻击并发生故障。
现在被激活并处于工作状态的许多物联网设备需要服务许多年时间,具体取决于应用类型。举例来说,水电气等公用事业仪表很少会更换。通信基础设施设计可以运行和共存长达50年的时间。电力传输系统需要持续运行30年或更长时间。住宅、办公室、工业大楼和其它建筑物通过数十年翻新一次,可以持续使用无限长的时间。如果现在这些新系统是不安全的,那么随着威胁的发展,它们可能很快被淘汰掉。
为了保护用户在智能设备上的投资,防止这些设备受到入侵破坏,安全性对所有这些新设备来说都是最基本的要求。在今后几年中,近500亿个物联网设备有望登录互联网,其中很大部分将是微控制器或具有有限资源的小型微处理器。幸运的是,这些小设备要比大的多的设备安全得多,因为它们更容易得到保护,并且不会遭受相同类型的威胁。这并不意味着安全性很容易满足,只是如果你正确地发挥了MCU和小型MPU功能的话,难度没那么大。本文将讨论如何保护物联网上的小设备。
必要的物联网安全功能
为了完整地保护MCU或小型MPU,通常要求采用以下一些安全功能,虽然其中一些功能并不是对每个系统都是必要的。对于深度嵌入的MCU和MPU产品来说,使用标准信息技术安全解决方案的安全机制是核心安全机制。这些安全协议包括:
●TLS
●IPSec/VPN
●SSH
●SFTP
●安全引导程序和自动回退
●过滤
●HTTPS
●SNMP v3
●安全无线链路
●加密和解密
●加密的文件系统
●DTLS(仅针对UDP的安全性)
●安全电子邮件
TLS、IPSec/VPN、HTTPS、安全无线链路和DTLS都是安全通信链路可以采用的方法。SFTP提供安全的文件传输,SSH则提供安全的远程访问,安全电子邮件可以在加密的链路上提供电子邮件服务。
具有自动回退功能的安全引导程序可以确保系统不会被破坏。SNMPv3、加密的数据和加密的文件系统可以通过加密保护本地数据的安全,或者将要发送到另外一台机器的数据的安全。过滤实际上是一种防火墙功能,用于拒绝有害的和未被邀请的客户的访问。下面先讨论系统级的安全性,然后详细讨论每个部分和每个项目。
系统安全性
安全性的强弱只取决于最弱的链路或部件。为了保证系统的安全,所有的各种通信通道、所有的文件传送、所有的数据存储和任何更新方式都必须是安全的。在具有动态加载、可执行文件修改和其它复杂功能的系统中,很难做到真正的安全。想象以下的场景:
入侵者通过使用电子邮件、FTP或其它一些方式将文件移动到机器上。
文件是动态加载的,当它运行时,它会破坏其它可执行文件,然后清理并删除自己。
如果病毒是新的,或者对系统来说是未知的类型,那么它就不会被系统认出来是病毒,从而大摇大摆地进入系统并感染它。
考虑通信链路不安全或没有得到正确保护的另外一种场合。在这种场合中,可能存在读取最低限度数据的方法。也可能存在将新数据注入数据流的方法,继而这个数据流被用来破坏接收系统。
通过互联网向一个设备加载一个不安全的映像就是一个很好的例子。当这个新的映像被加载和运行时,它将接管系统,当然前提是它拥有正确的访问权。
还有一种情景,即设备上的一些关键数据被偷窃了。除非数据已经被加密,或者处于一个加密的文件系统中,否则就很可能从设备中恢复出受限制的数据。这是另一种需要考虑的情景。
为了确保系统的安全性,通常最好的方法是认真考虑设备信息是如何被访问的。通常较高的安全性要求:你知道的东西(口令),你有的东西(借记卡或可穿戴设备),以及你是什么(虹膜扫描)。
对于小型设备来说,这可能有点过份了,但在要求非常高安全性的场合,通过一些间接方法是可以满足这些要求的,只要各个部分都是安全的。通过与服务器进行安全的交互,进而安全地访问设备,那么设备的安全性接口就既可以在更大的机器上运行,也可以用来保护小设备的安全。
安全系统的另外一个关键要素是分层的安全性,以及人们只能获得部分访问权的前提条件。好的设计实践是尽可能使用层次化的安全特性。在这种情况下,入侵者也许能够访问系统的某个部分,但没有其它显著措施的话将不能访问整个系统。举例来说,将两个不同的防火墙级联在一起来保证服务器的安全,这样一台服务器的漏洞可以由第二个防火墙堵住。
下文先回顾提供各种安全功能的部件或软件组件(图1),然后讨论如何使用这些组件来满足上述各种情景中的要求。
图1:物联网就绪操作系统应该包含的与安全性有关的互联网协议组件将允许在整套协议之上实现无缝集成,从而提供高质量的安全性。
通信安全
这类安全协议用于确保机到机通信是安全的。它有一个信任层,可确保某些信息是可以依赖的,并且可以建立安全的通信。
TLS或较老的SSL是最常用的方法,可用于为TCP流套接字或具有顺序数据和保证送达承诺的流连接提供通信安全。DTLS是一种较新的协议,用于提供安全的UDP传送,或基于TLS的数据报分组。这两种协议都适用于应用到应用的通信。
IPSec或虚拟专用网(VPN)使用TCP栈中的虚拟链路安全性,它的设置比较复杂,但允许应用程序通过链路实现安全的通信,即使应用程序本身不提供安全性。这种方法使用不是很广泛,一方面是因为设置有一定难度,另一方面是许多人认为算法开发中美国国家安全局(NSA)的界入使得安全性可疑的事实。
HTTPS是基于TLS的一种安全的网络服务器访问协议,它能提供安全的应用层访问。同样,SSH提供对远程用户的安全终端模拟访问。
安全的无线链路可以确保无线信号不会被收集,数据不会被任何有天线的人提取出来。
安全电子邮件用于确保用电子邮件发送的数据不会以明文方式传送。一种选项是在数据发送前进行加密。更简单更通用的解决方案是在加密的链路上提供电子邮件服务,这种加密的链路可以确保所有电子邮件数据对管理电子邮件的服务器来说都是安全的。
使用SNMP进行安全的文件传输
SNMPv3可以加密数据,同时加密和解密例程用于保护数据。如果所有数据都是重要的,那么可以使用文件加密方法,虽然这样做会牺牲一点性能。
过滤和防火墙保护。通过过滤掉经过网络服务器抵达的所有数据包可以阻止未授权的访问。使用先进的过滤技术,设计师可以确保正确的用户取得访问权,系统能防止未授权的访问。这些过滤规则可能需要逐个设备去设置。通常它与SSH或SNMP共同起作用。
安全的引导程序。安全启动是一个安全系统的重要部分(图2)。一般经常需要更新固件,而以安全的方式进行更新是非常重要的。这种方法可以取消所有出厂固件更新,并且利用自动回退机制可以极大地增强更新能力。借助自动回退机制,如果新版本(可能被破坏了的版本)无法启动,可以自动启动以前的安全版本——这是层次化安全机制的一个组成部分。
图2:Unison RTOS能够在最低层次提供额外的安全启动功能,因此可以完整地保护系统。没有解释器或加载一个程序并加以运行然后利用系统漏洞的其它方法,攻击系统就会变得异常困难。
重新审视系统安全性
现在让我们考虑一下具有有限资源的MCU或MPU安全性,它们需要借助如果不是全部也是大部分这些协议来实现安全。为了提供实际例子,考虑Unison操作系统——一种微型POSIXRTOS,它具有现成的这些功能。
首先,使用安全通信协议,与目标设备交谈的所有应用程序都可以做到很安全,包括电话应用、对微型网络服务器的安全网络访问等。像缓冲器溢出攻击等骗局就不可能发生了,因为Unison设计在很少的资源条件下运行,必须防止任何不合理的资源使用。安全的无线链路是可以使用的。VPN也可以使用。
为了将文件发送到系统,可以使用SFTP。这样可以保证数据在传输过程中不会被破坏——这对于保证系统更新的安全非常重要。
向TCP服务器中的前端处理过程中增加过滤功能可以确保只有授权的请求和更新得到处理。这样可以防止设备受到入侵者的破坏,极大地提高安全性。
另外,SSH可以用来借助基于终端的方法对设备进行远程设置。与网络服务器相比,这种方法比基于脚本的方法更有帮助,可以保证设备的设置也是安全的。
此时数据流入流出设备都是安全的。任何修改或设置也是安全的,授权的应用和用户可以获取对设备数据和功能的访问权。
如果设备被偷了怎么办?为了保证这种情况下的安全,要么加密设备上存储的数据,要么不保存本地数据,或者使用加密的文件系统。这样可以确保设备上的关键数据的安全。
如果用户有设备,并且有口令,那么通常被认为具有合理的安全性。可以增加指纹扫描、虹膜扫描、掌纹和其它设备等方面的额外安全性,从而实现与设备的安全,或连接到安全访问站的安全。
上面讨论了几乎所有的安全场景,还有一种除外,即破坏安全系统的程序执行问题还没有考虑。在MCU和某些MPU案例中,程序是从闪存运行的单个链接映像。在这种情况下,不可能给系统增加任何东西,因为整个映像是从闪存运行的,如果启动机制或刷新机制是安全的,那么入侵者根本不可能引入新的代码。对Unison操作系统来说就是这样,因此这种系统特别安全。
当系统中存在解释器的时候,就不能下相同的结论了。解释性程序可以利用MCU或MPU上的自由访问权而到处修改系统,除非安装了精心设计的安全机制,比如使用内存保护单元或内存管理单元(MMU)。
本文小结
可以使用标准的信息技术安全协议、安全启动以及通过限制解释器的使用保证MCU和小型MPU系统整体的安全运行。安全性不应该是事后的想法,或置于操作系统的顶层——安全性应该设计进系统,并作为一个有机组成部分进行集成和测试,从而实现真正的安全。