物联网系统安全得靠什么手段来保证
扫描二维码
随时随地手机看文章
物联网拥有从传感器和处于不同网络中的嵌入式系统的实时数据中创造巨大价值的潜力。然而,造就高价值的同时也带来了更高的风险。由于物联网设备是可以经由网络连接的,寻找在线设备的漏洞和弱点的恶意用户可以很容易地尝试攻击这些众多的设备。一旦找到进入的方法,攻击者可以随时让整个网络瘫痪。卡巴斯基实验室基于一项全球黑客活动问卷调查的报告表明,仅2018上半年,就有超过40%的工业控制系统计算机遭受过不同程度的攻击。
虽然服务器是主要攻击目标,但一些简单、看似平淡无味的嵌入式设备同样是遭受威胁的对象。谁能想到鱼缸中的电子温控器可能会威胁到企业网络安全呢? 对于一个赌场而言,这是完全可能的! 黑客通过薄弱的电子温控器进入到核心网络中,进而从这里截获一个关键用户数据库的信息,直到安全分析人员在网络日志中发现数据通过流媒体播放协议传往芬兰的一台服务器,真相才水落石出。
银行的内部网络曾有过通过闭路电视网络被入侵的先例(虽然闭路电视的存在改善了物理层面的安全),黑客也曾经从吸尘器的摄像头中监控用户的一举一动。这些攻击都应该被避免,从而保护核心网络不受入侵。为了让随时可能发生的攻击变得更加困难,多层安全保护是一个关键。
今天,黑客时常会利用开发团队的草率决定,比如,一个常见的问题是设备时常会有一个统一的默认的远程登录密码,通常这样的密码是为了方便物联网设备的初始化,但最好的方式是给每一个设备设定不同的密码。随着设备生产商不断提升他们的基础安全水平,网络犯罪者们也在升级攻击服务器的手段。在不断变化的环境中,嵌入式系统不能再以本身的价值低为理由而不去提升安全水平。就像上文中赌场拥有者所发现的那样,任何物联网设备都可能导致一个专有网络被入侵。
如图1所示,网络系统可能遭遇不同类型的攻击。举例来说,黑客通常会利用软件中的漏洞,如果一个设备收取了超出缓冲区大小的数据,额外的字节将会溢出到其他的数据结构中,这样的数据结构进入到其他程序中后就可能会导致错误的结果或者崩溃的发生,处理器甚至可能将这些字节认为是跳转地址进而执行错误的代码。除此之外,熟悉设备内存布局的黑客可以构建特定的小程序来获取设备的控制权,或者通过向设备发送特定的、能让处理程序崩溃的数据达到目的。
图1 应对多种不同攻击的方式
一些攻击方式着重于攻击通信协议,而不是核心设备软件。如果协议在压力下发生崩溃,那么在恢复过程中攻击者就可能会趁虚而入。如果攻击者能够攻破设备附近的网络基础设施,或者直接取得对设备的物理访问,那么就可以伪造服务和设备见的通信。这类中间人攻击可以用于分析从设备发送出来的数据,并取得更多的情报用于下一步的攻击。黑客也可能试图在设备上载入修改后的固件,一旦成功,重启后的硬件将可以执行任何黑客希望的功能。
应对方式
系统应当能够拒绝任何未授权方发起的通信请求,这样设备就不会载入黑客修改过的固件,能够忽略拒绝服务式的攻击,自然可以避免因蚕食系统的资源造成的系统崩溃。再者,设备不会将敏感数据发送给未经验证的服务器。即使对于设备接受的数据,系统也应该检查数据包的长度和正确性,并拒收可能导致缓冲区溢出和包含命令注入的数据包。
不过,对于已经很庞大的代码库来说,在设备的固件中实现这些功能可能是不现实的,费用也极其高昂,特别是使用了许多第三方软件的固件。更加现实的方式是,将固件分为需要高安全保障的部分以及可以被攻击的、不会连累安全功能的部分。举例来说,将温度传感器数据包装为JSON格式并返回给手机App的例程,并不需要进行安全检查。安全的代码则需要在送出数据前进行身份验证。
软件的考量
相对于所有的代码而言,需要全面安全强化的仅仅是一小部分。这样的分隔必须确保没有从不安全代码渗透到安全代码的后门。在上文缓存区泄露的例子中,如果攻击者能够将数据混入“安全的”数据中并成功伪装成系统管理员,那么所有的保护措施都将失效。安全内存和不安全区域隔离的重要性是不可言喻的,这一任务也只能在硬件级别才能可靠地完成。
Microchip SAM L11家族的嵌入式微处理器包含基于Arm TrustZone扩展架构的安全保护硬件,以及专有的应对软件攻击的保护。SAM L11的硬件保护构建起的信任根能让系统成为更加复杂的安全框架中的一环(见图2)。
图2 双开发者方式
在信任根上进行的密码学操作能够将信任区扩展到系统的其他部分,从而在不受信任的网络中建立安全的通信信道。内建密码学微控制器提供产生会话密钥、加密和解密功能,并能够检查来自网络的外部消息以及内部代码的可信性。基于密码学的保护甚至可以检测伪造的硬件:运行在可信区的软件可以向设备内的电路板发出质询,并检查返回的结果是否有效。
为了维持信任根的可靠性,SAML11硬件使用安全启动过程。初始启动首先加载ROM 中的代码,这部分代码通过密码学加速器来检查其余固件的可信性,比对每一个部分的哈希值是否与厂商在出厂时设置的参考哈希值相同。当比对失败时设备重置,安全启动过程会再次开始。因此,即使黑客能够修改闪存上的固件,系统也无法正常启动,除非固件被恢复为出厂版本。
TrustZone技术
当设备成功启动可信的固件时,SAML11上的Arm TrustZone实现确保可信和可能有害软件间的隔离。SAM L11的Arm Cortex M23处理器上的Arm Trust-Zone代码提供了一组安全指令集,可以确保当不可信的代码执行访问安全域函数调用时,系统将会进行检查(见图3)。Arm TrustZone技术支持安全域的创建,在不影响性能的前提下,不同的安全域会允许不同级别的存储器、外设和面向可信软件的I/O 访问。Arm TrustZone技术允许安全代码的分组和保护,这很大程度上简化了嵌入式设备的安全评估。
图3 Cortex-M23中断机制
为了区分和隔离安全代码,SAML11的存储器被分为不同的区域。每一个区域都由硬件来保护,不受软件攻击影响,任何从非安全区域向安全区域的访问,或者运行的代码与当前的系统安全状态不符,都会导致硬错误发生。在此状况下访问将无法成功,系统也可能会自动重启。即使在处理中断和调试时,这一保护措施依然存在。
如图4所示,Arm TrustZone技术的实现维护两个栈指针来区分安全和非安全代码的执行,并保证中断处理例程不会导致数据泄露。调试程序时可以通过不同的访问级别对安全和非安全代码进行区别对待。在非安全部分工作的开发者不能改变安全代码或者直接访问安全区的信息,这一机制使开发者的职责得以清楚区分,只有拥有安全资质的开发者才可以修改受保护的代码。
图4 安全和非安全态之间的标准交互
一般来讲,编写安全应用的开发者会提供头文件和库函数,以便非安全代码做出请求,比如加密和发送一个网络数据包。受保护的代码会在受保护的内存区域中加载,没有安全权限的开发者开发网络应用时只能通过代码库的API访问安全代码。这样安全代码和数据就处在了一个黑盒子中。启动时安全代码的哈希值会被检查,被篡改的安全代码会导致启动失败。SAM L11的可信安全启动过程使得这样的检查成为可能。举例来说,通过指针指向不正确的内存位置会导致错误发生。
外设也可以被设置为安全或者不安全,仅由被授权的软件访问和控制对应的设备。至于向两个区域同时提供服务的外设,对于它们的访问可以用类似安全函数的方式进行管理。不安全的代码可以通过安全代码开发者提供的API访问这类设备。这确保只有被授权的、可以检测恶意访问的代码才能够直接访问外设。
举例来说,不可信的代码可以读取一个计数器的当前数值,但并不能进行重置。微处理器访问外设和子系统时,必须验证芯片密钥存储器中相应的数字证书和获得数据的哈希值。这一机制保护系统不受单个被攻陷的设备影响,也帮助生产商确保设备不会被用于仿制的系统中。即使黑客能够篡改用于密钥存储的256字节的存储器区域,SAML11也能够检测到这样的行为并将密钥和数据清零。
SAM L11的安全机制覆盖从Arm TrustZone的隔离技术到存储器物理安全等不同方面。这些机制帮助OEM在嵌入式设备中构建整个系统安全,确保对应的应用不会成为物联网中的安全薄弱环节。