ARM TrustZone 如何安全 OS 安全?

How is an ARM TrustZone secure OS secure?

我正在尝试阅读 TrustZone 白皮书,但确实很难理解一些基本内容。我对此有一些疑问。它们可能是简单的问题,但我是这个领域的初学者:

  1. 真正安全的世界是什么 "secure"。我的意思是为什么正常世界可能会被篡改,而安全世界却不会?

  2. 谁能改安全os?我的意思是想添加一个 "service"?例如,移动支付应用程序的应用程序开发人员可以在 Secure OS 中添加一项服务来使用他的应用程序吗?如果是,那么任何开发人员如何添加到安全 OS 并且它仍然是安全的?

  3. 什么阻止恶意应用程序从正常 OS 引发 SMC 异常并转移到安全 OS?

安全世界的理念是让在那里执行的代码尽可能小和简单 - 履行其职责的最低限度(通常控制对某些资源的访问,如加密密钥或硬件或促进某些安全功能像 encryption/decryption)。

因为安全世界中的代码量很小,所以可以很容易地对其进行审计,并且可以减少引入错误的表面积。然而,并不意味着安全世界自动'secure'。如果安全世界代码中存在漏洞,它可以像任何其他安全漏洞一样被利用。

将此与正常世界中执行的代码进行对比。例如,Linux 内核要复杂得多,也更难审计。有很多内核漏洞和利用允许恶意代码接管内核的示例。

为了说明这一点,假设您有一个系统,用户可以通过一些挑战-响应交易系统来支付钱。当他们想要进行交易时,设备必须等待用户按下物理按钮,然后才能使用加密密钥签署交易并授权支付。

但是,如果某些恶意代码利用内核错误并能够 运行 在内核模式下执行任意代码怎么办?通常这意味着彻底失败。该恶意软件能够绕过所有控制机制并读出签名密钥。现在,恶意软件可以向任何它想要的人付款,甚至不需要用户按下按钮。

如果有一种方法可以在 Linux 内核不知道实际密钥的情况下签署交易怎么办?进入安全世界系统。

我们可以拥有一个小型安全世界 OS,其唯一目的是签署交易并持有签名密钥。但是,除非用户按下特殊按钮,否则它将拒绝签署交易。这是一个非常小的 OS(以千字节为单位),并且您已雇用人员对其进行审计。出于所有意图和目的,安全世界中没有错误或安全漏洞 OS。

当正常世界OS(例如Linux)需要签署交易时,它会调用SMC将控制权转移到安全世界(注意,正常世界不允许modify/read 完全安全的世界)与它想要签署的交易。安全世界 OS 将等待用户按下按钮,签署交易,然后将控制权转移回正常世界。

现在,想象一下恶意软件接管 Linux 内核的相同情况。恶意软件现在无法读取签名密钥,因为它处于安全世界中。未经用户同意,恶意软件无法签署交易,因为安全世界 OS 将拒绝签署交易,除非用户按下按钮。

这种用例正是安全世界的设计目标。整个想法是安全世界和正常世界之间的硬件强制分离。在正常世界中,无法直接篡改安全世界,因为硬件保证了这一点。

我没有特别使用 TrustZone,但我想一旦安全世界 OS 启动,就无法直接修改它。我不认为应用程序开发人员应该能够 'add' 为安全世界 OS 提供服务,因为那样会破坏它的目的。我还没有看到任何供应商允许第三方将代码添加到他们的安全世界 OS。

要回答你的最后一个问题,我已经在 中回答过了。 SMC 异常是您从安全世界 OS 请求服务的方式 - 它们基本上是系统调用,但针对安全世界 OS。通过将控制权转移到安全世界,恶意代码会获得什么?

  • 你无法从正常世界modify/read安全世界
  • 当您将控制权转移到安全世界时,您将失去对正常世界的控制权

What makes secure world really "secure". I mean why normal world might be tampered with but not the secure world?

安全系统设计者使其安全。 TrustZone 是一个工具。它提供了一种分区 PHYSICAL 内存的方法。这样可以防止DMA attack。 TrustZone 通常支持 启动时锁定 功能。因此,一旦物理映射完成(secure/normal 世界权限),它们就无法更改。 TrustZone 提供了划分中断和安全启动的工具。

请务必注意,安全世界 是一个技术术语。它只是与 正常 世界不同的状态。 secure world 这个名字并没有使它成为 secure!系统设计者必须。它高度依赖于安全资产是什么。 TrustZone 只提供工具来分区那些可以阻止正常世界访问的东西。

概念上有两种类型的 TrustZone 安全世界代码。

  1. 一个库 - 这里通常不会在安全世界中使用中断。安全 API 是一个 神奇的八球 。你可以问它一个问题,它会给你一个答案。例如,某些数字版权管理系统可能会使用这种方法。密钥将被隐藏起来,在正常世界中无法访问。
  2. 一个安全的OS - 这里的安全世界将会中断。这更复杂,因为中断意味着某种先发制人。安全 OS 可能使用也可能不使用 MMU。如果要使用系统缓存,通常需要MMU。

这是最终 TrustZone 解决方案之间的两大差异。这取决于系统设计和最终应用程序是什么。 TrustZone 只是尝试实现这一目标的工具的一部分。

Who can change secure os? I mean like adding a "service"? can for example an application developer for mobile pay application add a service in the Secure OS to work with his app? if Yes then how any developer can add to the secure OS and it is still secure?

这不是由 TrustZone 定义的。由 SOC 供应商(从 ARM 获得许可并构建 CPU 的人)提供安全启动技术。 Secure OS 可能在 ROM 中,例如不可更改。其他方法是对安全代码进行数字签名。在这种情况下,可能存在验证数字签名的片上安全 ROM。 SOC 供应商将提供(通常是 NDA)安全启动的信息和技术。这通常取决于他们的目标市场。例如,物理篡改保护和 encrypt/decrypt 硬件也可能包含在 SOC 中。

片上 ROM(仅由 SOC 供应商编程)通常具有从不同来源(如 NAND 闪存、串行 NOR 闪存、eMMC、ROM、以太网等)启动的机制。通常它会有一些一次性可熔存储器 (EPROM),device/solution 供应商(确保应用程序安全的人)可以编程配置系统。

其他功能包括安全调试、安全 JTAG 等。显然所有这些都是可能的攻击向量。