为基于处理器的 SoC 保障安全的技术

Synopsys 高级主管工程师 Ruud Derwig
Tortuga Logic 高级硬件安全工程师 Nicole Fern

现代系统的安全至关重要。设备制造商在硬件和软件设计中都纳入了多种安全功能和攻击防护。例如,Synopsys DesignWare® ARC® 处理器 IP 在其 SecureShield™ 功能集中纳入了许多安全功能。但是,不能仅通过使用安全处理器来保证最终产品系统的安全。最终产品的安全不单单取决于使用经过验证的安全硬件组件。另外,必须考虑配置、集成和其他软件。将安全处理器集成到片上系统 (SoC) 并为其开发软件时,仍然会引入安全漏洞。验证由硬件和软件组成的系统中是否存在这些安全漏洞是一项复杂的工作。

Tortuga Logic 的 Radix-S 采用了专利型信息流跟踪技术,可以基于机密性和完整性的概念来验证安全目标,可以帮助验证设计人员是否正确地集成和编程了安全功能,把对现有验证工作流的干扰降至最低。

ARC 处理器调试锁定功能和 MPU 配置的安全性验证

使用处理器 IP(例如 DesignWare ARC 处理器)的系统集成商必须确保正确配置和管理防护和安全功能,并且不会引入漏洞。大多数验证工具都是用于验证功能而非验证安全性,所以很难评估高度集成的复杂软硬件系统具备安全性,并确保这些系统不存在漏洞。 Tortuga Logic 和 Synopsys 携手展示了一种新颖的安全验证方法,该方法可支持采用 Radix-S 结合由 VCS 和 ARC MetaWare 开发工具组成的现有仿真基础架构,验证 DesignWare ARC 处理器的几个系统级安全目标。

这些安全目标促成了三条安全规则的创建和验证。两种基于与安全调试相关的威胁模型,一种验证了 ARC 内存保护单元 (MPU) 的配置期间没有软件错误。这些规则可以轻松地应用于许多项目。我们在下文描述了在 ARC 处理器的硬件/软件仿真过程中如何指定和验证这些安全规则。

验证安全调试锁定模式

调试模式为硬件和软件测试巩固了可控性和可观察性;但是对设计内部的访问又构成了安全风险。为确保调试功能只能由授权用户访问,DesignWare ARC Processor IP 提供了配置安全调试功能的选项,包括锁定/解锁机制(图 1)。Synopsys 提供了一个基于简单质询响应协议的示例解锁模块。设计人员通常会替换该示例并定义自定义解锁逻辑,以提供必要的安全性,保障解决特定威胁模型或将处理器安全调试集成到更大的 SoC 安全调试设计中。

图 1:在 DesignWare ARC EM 处理器 IP 中进行安全调试

设计人员应验证锁定功能是否执行了预期的行为,并且当调试访问端口处于锁定模式时,没有产生意外的信息流。在锁定模式下,调试器应该不能访问 1)处理器寄存器或 2)处理器数据存储器。

Radix-S 可以通过创建两条安全规则来跟踪处理器寄存器和数据存储器到调试端口的流,进而验证处于锁定模式时特定的 ARC 配置是否符合这一假设。这些规则使用 Tortuga Logic 的 Sentinel 语言编写。Sentinel 的独特功能是能够表达与设计中的信息流相关的安全要求,这对于有效表达和验证设计资产的机密性和完整性属性至关重要。“无流量”运算符 (=/=>) 是用于创建规则,跟踪设计信号之间的信息流的基本构建块。出现 Sentinel 关键字“当”和“除非”,以分别指定在执行流跟踪之前必须满足的条件以及允许信号之间发生流的条件。 

安全规则 #1:当调试访问端口处于锁定模式时,CPU 寄存器的内容永远不会流到调试接口。

u_regfile_2r2w.$all_outputs when (!dbg_unlock) =/=> dbg.$all_outputs

u_regfile_2r2w 是执行 ARC EM 寄存器文件的模块。dbg_unlock 是图 1 中所示的解锁信号,而 dbg 就是调试模块本身。“$all_outputs” 关键字是用于描述设计层次结构中特定模块实例的所有输出信号集的简写。当调试处于锁定模式时,如果寄存器文件内容流到调试模块输出,则不符合规则 #1。

安全规则 #2:当调试访问端口处于锁定模式时,数据存储器应该永远不会流到调试接口。

dccm_data_out when (!dbg_unlock) =/=> dbg.$all_outputs

如果数据存储器内容 (dccm_data_out) 在调试处于锁定模式时仍能流出调试访问端口,则不符合规则 #2。请注意,ARC 处理器能够单周期访问数据紧密耦合存储器(用于数据的 DCCM 和用于指令的 ICCM)。Radix-S 可以在基于 ARC 的系统中,作为现有测试流程的一部分来验证规则 #1 和规则 #2,以确保调试端口在锁定模式下不会泄漏内部处理器信息。设计人员可以编写其他 Radix-S Sentinel 规则来验证自定义解锁模块本身。

验证安全存储区的软件初始化

ARC SecureShield 技术可以将内存划分为安全区域和正常区域,这两个区域应保持彻底隔离。图 2 显示了两种实现普通执行环境和受信任执行环境 (TEE) 拆分的方法。左侧图显示了单个处理器 TEE,其中使用同一个 CPU 执行受信任和不受信任的应用程序,它们通过 MPU 强制执行的安全和正常 CPU 特权级别予以相互隔离。在右侧,传统方法表明每个环境都有自己的专用 CPU 和其他资源,例如内存或加密加速器。这种方法称为“托管 TEE”,因为它采用普通的应用处理器充当 TEE CPU 的主机。例如,非特权程序不应访问用于加密机密信息的安全存储器中的加密密钥。非特权程序应该只能访问普通内存,而安全内存中的数据绝不能置于普通内存。

图 2:单个 处理器(左)或专用(右)处理器上的受信任执行环境

威胁模型可以覆盖由 ARC MPU 强制以普通模式运行且只能访问普通内存区域的恶意非特权程序。恶意软件可能会尝试识别和利用在配置内存区域时所犯的错误,在以安全模式执行的程序中提取敏感信息(图 3)。Radix-S 提供了一种描述信息流属性的简洁机制,所以设计人员可以验证特定的存储器保护配置,并可以随着设计要求的发展轻松地进行调整。此外,规则不直接检查 MPU 控制寄存器,而是检查高层属性,以保证安全存储器发出的数据不会最终存储在普通存储器中。因此,不仅会检查特定的配置错误,还会检查任何可能导致数据从安全内存泄漏到正常内存的错误。

图 3:潜在的安全漏洞——隔离内存区域之间的流

可以对 ARC 的 SecureShield MPU 进行编程,以强制执行使用不同访问权限的内存区域。这样,可以将“安全”程序与“正常”程序隔离。可以创建两个数据存储区:

  1. 安全数据区域:0x800000 至 0x801FFF
  2. 正常数据区域:0x802000 to 0x81FFFF

Radix-S 通过创建一个 Sentinel 规则来验证这两个内存区域的隔离,该规则跟踪从数据存储器的输出端发送到数据存储器的输入端的信息流(执行软件时,两端之间的数据将流经 ARC 处理器)。如果信息流经图 4 中红色虚线所示的路径,则不符合下面的安全规则 #3。Sentinel 规则的一个重要方面是通过任意组合和顺序逻辑转换随时间跟踪信息流。可以将安全存储器中的数据存入各渠道或与 ARC 处理器中的其他数据合并,并且规则 #3 仍将检测是否将任何版本的安全数据写入了正常数据区域。

安全规则 #3:安全存储区的数据绝不能流到普通存储区。

dccm_data_out when (dccm_data_addr >= 0x800000 && dccm_data_addr < 0x802000) =/=> dccm_data_in

unless (dccm_data_addr >= 0x800000 && dccm_data_addr < 0x802000)

规则 #3 规定,数据内存模块的输出数据 (dccm_data_out) 从安全地址范围读取时将被跟踪,并且如果此信息传播到数据内存模块的输入端 (dccm_data_in),则不符合规则,除非在写入安全区域期间数据正在进入内存。有必要对地址范围进行此额外检查,以获取到达 dccm_data_in 的安全信息,因为安全软件可以从安全区域读取数据,然后将数据重新写入安全内存。规则 #3 可以检测在安全和正常内存区域设置期间发生的软件配置错误。为了测试这一断言,Synopsys 和 Tortuga Logic 在设计中将安全区域配置为比预期短 32 个字节,以此测试了规则 3。由于该错误,以正常模式执行的程序可以读取写入安全区域的最后 32 个字节的任何敏感特权数据。

Radix-S 提供了多种视图,可轻松查看信息流和任何规则违背情况。例如,图 4 中的路径视图显示了从规则源到目标信号的信息流。信息流的图形呈现为路径通过时间和设计层次结构。规则 #3 的路径视图显示了从安全内存读取的数据(从 dccm_data_out 读取),该数据流经 ARC 处理器,然后在写入正常内存之前重新进入数据内存模块(流经 dccm_data_in),导致不符合规则。路径视图可提供宝贵见解,阐明违背规则的根本原因,并使安全分析更加高效。

图 4:Radix-S 路径视图——展示违背规则的完整信息流路径

结语

Tortuga Logic 的 Radix-S 安全验证平台和 Synopsys 的 DesignWare ARC 处理器 IP,针对复杂的软硬件安全验证问题提供了强大的解决方案。Synopsys ARC 处理器 IP 利用 SecureShield 技术支持设计人员开发 TEE。TEE 保证了代码和数据保护的机密性和完整性,并提供了共享系统资源以处理受信任和不受信任代码的能力。但是,要确保整个系统的安全性,就需要硬件和软件同时进行分析。Radix-S 是 ARC 客户的强大工具,它可以识别和防止由于在设计中配置和集成处理器,或在处理器上执行的平台和应用软件而引入的任何安全漏洞。ARC 处理器的编程不当会导致安全漏洞,而 Radix-S 可以在标准功能验证过程中检测到这些漏洞。Radix-S 可以用作真正的硬件安全开发生命周期 (SDL) 的基础,该生命周期使设计人员能够构建安全优质的基于处理器的系统。

如需了解更多信息,请阅读以下深度白皮书:配置、确认并发货:构建上市时间更短,依托安全处理器的系统