2020年10月15日 网络安全

保护您的嵌入式系统免受攻其不备和其他零日网络安全攻击

由肖恩Ruffell

2020年9月,阿姆斯特丹自由大学(VU Amsterdam)系统和网络安全小组的一个团队宣布了一项开发漏洞的新技术,他们称之为“BlindSide[1]”。

BlindSide允许攻击者对非耐崩溃的目标(如Linux内核)进行盲目的ROP-style[2]攻击。作为一个系统工程师,这对你来说意味着什么?这意味着BlindSide可以使了解单个内核溢出漏洞的攻击者将无特权shell转换为根shell,尽管最近的内核特性旨在防止可能导致此类特权升级的信息泄露。

正是像BlindSide这样的技术以及其他未知的技术促使Star Lab在设计产品时假定攻击者将获得根访问权限。这就是为什么我们提倡每个人至少考虑一下安全嵌入式系统的10个特性-静态数据保护、身份验证和/或安全引导、硬件资源分区、软件容器化和隔离、减少攻击面、最低权限和强制访问控制、隐式不信任和安全通信、数据输入验证、安全软件开发和操作系统配置,最后,完整性监视和审核——在设计系统时。这些属性会让攻击者更难以满足发动突袭的先决条件,并且在攻击成功时也能够控制伤害。

首先,使攻击者难以满足攻击前提条件。要使用BlindSide,攻击者既需要了解内核溢出漏洞,也需要访问非特权shell。

为了减少暴露内核漏洞的机会,考虑“安全软件开发、构建选项和操作系统配置”和“减少攻击面”属性。这些属性最基本的方面是配置内核,以删除应用程序不需要的任何特性和驱动程序。加载到内核中的代码越少,出现漏洞的可能性就越小。对于您自己开发的内核代码,利用内核构建系统提供的工具来减少添加您自己的漏洞的可能性。这类工具的例子包括内核堆栈检查器、编译器和链接器,用于在只读数据段中放置包含指针的结构体。

接下来,考虑减少向攻击者公开非特权shell的可能性的方法。这可以和应用OS配置并从生产系统中删除shell一样简单,如果不可能,可以考虑“最小特权&强制访问控制”策略,以确保系统上运行的非特权软件没有运行shell所需的权限。您还可以考虑使用“软件容器化和隔离”和“硬件资源分区”来约束非关键代码,这样,如果攻击者可以利用它,他们就无法在虚拟机上获得包含更关键功能的外壳。对于具有对系统的物理访问权的攻击者来说,“静态数据保护”和“身份验证和/或安全引导”会使攻击者难以脱机更改软件配置,从而无法绕过您设置的运行时保护和分区。

即使您已经遵循了所有的最佳实践来保护您的系统,仍然要谨慎地假设攻击者可以利用它。

对于许多攻击,根访问是最终目标,因为它可以为攻击者提供对系统的完全控制。事实并非如此。

在这里,您可以应用“最低权限&强制访问控制”,这样即使是具有根shell访问权限的用户也不能读取或修改不应超出强制访问控制策略定义的保护域的文件。

“软件容器化和隔离”和“硬件资源分区”可以再次应用,因为你可以将关键功能放置在其他虚拟机中,固定在带有预留CPU缓存的特定内核上。

一个root用户如果利用了一个不太关键的进程,仍然不能影响适当隔离的关键进程,这样就可以更容易地检查它们,以确保它们在与不太关键的进程和设备的交互操作中应用“隐式危难和安全通信”。

最后,考虑应用“完整性监视和审计”的方法,以便您或系统能够实时响应探测安全边界或试图从系统的一个组件横向移动到另一个组件的攻击者。

系统安全似乎是一场无休无止的猫捉老鼠的游戏。攻击者会发现新的漏洞,而防御者会针对这些漏洞制定对策。攻击者就会被激励去研究和开发新的漏洞。《BlindSide》更能证明游戏一直延续到今天。然而,仔细应用安全嵌入式系统的10个特性,你可以给自己一个机会,不被这个甚至是下一个攻击猝不及防。

*文章最初发表于Starlab.io

参考文献

[1]https://www.vusec.net/projects/blindside/

[2]https://en.wikipedia.org/wiki/Blind_return_oriented_programming

以前的确保面向系统的分区
下一个Wind River的Titanium安全套件获得了2020物联网进化安全优秀奖