SoC 和系统设计人员希望为他们的产品创建一个坚实的安全基础。通常,对安全系统的要求与提供设计人员的客户可以在其上开发的灵活平台的需要发生冲突。必须从首要原则开始,以提供一个强大、安全的平台,同时让用户自由创建。
与安全相关的两个基本概念在这里发挥作用。它们是防御深度和最小特权原则。第一个意味着您对某些攻击具有多层防御。因此,攻击者必须通过每一层才能获得资产,而他们一开始就不应该访问这些资产。
例如,用户应用程序层应该可以访问其资产,仅此而已。每一层都以相同的方式处理。用户应用层除了向其他层发出请求外,不允许做任何事情。这两个概念强化了安全硅 IP 应在其上运行的刚性基础——例如,来自Rambus的 CryptoManager 信任根 (RoT) 。
刚性基础意味着在每个接口上都强制执行最小权限原则。每个层只能执行它允许执行的行为。如果一个层想要在该边界之外做任何事情,它必须请求另一个层来承担任务。这适用于所有层,从用户应用程序一直到硬件本身。
各种各样的软件漏洞
在这个时代,系统和SoC设计人员面临着各种各样的软件漏洞,为安全系统建立一个安全和刚性的基础具有更大的意义。
在大多数情况下,您(作为系统设计者)为您的客户或其他第三方提供编写软件的能力。该软件在您的产品范围内执行,但它引起了相当大的关注。一方面,您对所编写代码的质量一无所知。
您不知道开发人员对编写安全软件的了解程度。因此,正确地假设将有软件漏洞写入他们的应用程序。因此,作为系统设计者,您必须保护系统的其余部分免受这些不可避免的漏洞的影响。
如前所述,根据最小特权原则,即使是受到损害的用户应用程序也应限制它们可以执行的操作或功能。尽管它们的使用方式由于它们的漏洞而永远不应该被使用,但它们仍然应该无法逃脱堆栈中的特定层。
将其保留在沙盒中
根据此处讨论的基本安全原则,安全硅 IP 必须是可编程的,并且设计用于专门的“沙盒”用户应用程序。(注意:术语“沙盒”是计算机安全术语,描述了一种安全结构,在该结构中创建了一个单独的受限环境,并且禁止某些功能。)在本文的上下文中,术语“沙盒”特指限制关于软件应用程序的功能。应用程序必须通过调用以更高权限执行的系统来请求访问资源。如果应用程序试图破坏其任何沙盒规则,一个或多个系统可能会做出反应以阻止应用程序执行。
安全硅 IP 必须以沙盒方式对用户应用程序进行沙箱处理,以防止他们造成伤害,特别是对在安全硅 IP 内执行的其他应用程序。换句话说,不幸的是,应用程序的漏洞可能会暴露它可以访问的安全资产,但它不能暴露其他应用程序的受保护资产。这就是安全硅 IP 对最小特权原则和深度防御的使用带来巨大收益的地方。
这里的想法是使用安全监视器在加载应用程序时在硬件中对用户应用程序的权限进行编程。这将用户应用程序对资源的访问限制为仅允许它们访问的资源。除了安全监视器在硬件中编程的权限之外,用户应用程序还被限制与底层硬件进行直接交互。用户应用程序必须通过微内核请求访问硬件资源。微内核构成了包含用户应用程序的第一个屏障。
但是,如果在用户应用程序和微内核中发现漏洞,用户应用程序仍然可以安全地超出其自身的资源访问边界。因为用户应用程序的权限是在加载时在硬件中设置的,并且权限一直持续到应用程序被卸载,所以攻击者无法利用安全漏洞来访问用户应用程序尚未访问的资产。同样,基于深度防御和最小特权原则,可以有多个不信任方在安全硅 IP 的范围内安全地执行代码,而不会冒彼此之间或彼此之间泄露其安全资产的风险。
分层安全的意义
分层安全的目标是确保每个层仅限于分配给它执行的任务,而不是更多。如果在特定层中犯了错误,并且该层被授予了对不应该拥有的资产的访问权限,则攻击者将利用该行为进行攻击。
正如我们在今天的系统中一再看到的那样,如果系统行为在每个系统级别都没有得到适当的保护,那么它们就没有适当的约束来执行设计的功能。因此,攻击者极有可能利用不应该执行的功能来获取有价值的资产。
一个典型的例子是当今高度复杂的 CPU,它们针对高性能而不是安全资产的安全性和防御进行了调整。正如广泛报道的那样,这些 CPU 最近成为 Meltdown、Spectre 和 Foreshadow 等漏洞的受害者。平心而论,这些 CPU 确实有最小特权原则的概念。
不幸的是,这些 CPU 没有正确实施纵深防御的概念。系统和 SoC 设计人员的替代方案是将安全资产的使用从主 CPU 转移到专用的安全硅 IP 上。但是,必须从硬件和软件的角度来设计安全硅 IP,以保护安全资产不被泄露。
衡量每个级别的安全性
此时您可能会问自己:“我如何衡量设计中每个级别的安全性?” 首先要做的是定义特定层的能力。系统和 SoC 设计人员应利用形式验证来确保设计和架构的正确性。这对于确保层只做它应该做的事情并且正确地做这件事是绝对重要的。
同样的练习适用于各个层。例如,查看引导加载程序层。引导加载程序被指定为安全地将系统引导到准备好接受用户应用程序的状态。你必须问这样的问题:这种行为的流程是什么?错误条件是什么?如何管理这些错误情况?有没有办法让格式错误的图像导致引导加载程序以可能暴露安全资产的方式运行?
设计人员必须逐层检查系统,并确认每一层的行为都符合规定,并且在给定无效刺激时,每一层都能优雅地管理错误。例如,当将不正确的值(或不可能的值)写入硬件不支持的特定寄存器时,硬件会如何表现?会不会导致系统崩溃?它是否会导致系统表现得由于某种原因而变得不安全?
从软件的角度来看,如果引导加载程序收到了格式错误的固件映像,那么引导加载程序是否会正常运行并丢弃错误的映像?或者引导加载程序是否接受、加载和执行映像?更糟糕的是,引导加载程序是否会变得不稳定并进入无效状态,从而将安全资产暴露给攻击者?
鉴于每个级别的安全性适当,灵活性是系统和 SoC 设计人员期望的安全引擎的另一个方面。这里包括允许第三方应用程序在其边界内执行。这些应用程序是用 C 语言编写的,完全能够执行所需的任何任务。安全硅 IP 必须具有执行任意应用程序的灵活性。这些应用程序仅限于可用的资源。除此之外,应用的类型仅受系统和 SoC 设计者的想象力限制。
结论
在转向高度安全的系统时,设计人员应强烈考虑深度防御和最小特权原则这两个安全概念作为指导方向。
这些将为正确架构和设计的安全执行环境提供路线图。反过来,这些环境将把每一层的能力限制为只有该给定层所必需的那些能力。因此,即使第三方应用程序引入了漏洞,这些应用程序仍然仅限于最初授予它们的资产。
审核编辑:郭婷
-
cpu
+关注
关注
68文章
10901浏览量
212798 -
soc
+关注
关注
38文章
4199浏览量
218896
发布评论请先 登录
相关推荐
评论