2

我了解到安全世界可以保护关键数据不被正常世界访问,我不明白的是如何从安全世界衡量正常世界的完整性。

我在 Samsung TZ-RKP 和SierraTEE中找到了一些相关的工作,它们都实现了一个可以衡量正常世界完整性的功能。但他们没有提供技术细节。我有两个问题,如果有人能给我一些线索,我将不胜感激。

  1. 假设我想看看普通世界中正在运行哪些进程,我是否必须使用普通世界中的内核模块来帮助我这样做?如果是这样,我如何确保它已将正确的结果传递给安全世界?准确地说,我如何检查内核是否已被破坏?

  2. 假设我有一个 RSA 密钥对,并且我将私钥保存在安全的世界中。当一个进程请求解密某些数据时,安全世界如何知道该请求是否来自立法进程?白名单机制可能会有所帮助,但如果正常世界的内核已被破坏并且对手假装是立法者怎么办?安全世界似乎对正常世界发生的事情一无所知。

即使可以确定它来自立法程序并使用私钥解密数据,解密的数据仍然会以某种方式返回到正常的世界区域(即共享内存),并且解密的数据仍然可以是泄露。那么在安全世界中保留私钥有什么意义呢?

顺便说一句,我正在使用 armv8 板。

提前致谢。如果你能给我提供一些例子,那就太好了。

4

1 回答 1

0

Trust-zone 本身并不是一个安全系统。你必须设计它。此外,还有许多不同类型的安全性。例如,您假设发生了软件攻击,但对系统进行了许多物理攻击(就像我猜您所描述的那样)。必须是可信计算库(TCB);即,您假设的某些代码不会被破坏。一个正常的世界内核可能太大而不能成为 TCB 的一部分,但它可以成为很好的第一道防线。对它的利用只是从用户到主管的特权提升。您的 TrustZone API 应该期待不受信任的数据(即,正常世界内核尝试缓冲区溢出和 API 误用等)。

这里的关键点是 TZASC 和其他总线外设可以授予安全世界访问权限以读取/写入普通世界内存。对于像 Linux 这样成熟的操作系统,您必须验证 MMU 表和其他数据结构。模块加载、进程运行等都需要验证。但是,如果您在正常世界中有一个更简单的系统,则可能可以对其进行验证。很可能你必须接受其中的一部分。PC 的随机抽样可能是一种威慑;但没有什么是万无一失的,除非正常世界是带有代码的证明。

  1. 假设我想看看普通世界中正在运行哪些进程,我是否必须使用普通世界中的内核模块来帮助我这样做?如果是这样,我如何确保它已将正确的结果传递给安全世界?确切地说,我如何检查内核是否已被破坏?

您的安全世界可以包含一个操作系统(或原始调度程序),它将定期检查正常世界代码的完整性。有诸如 RTIC 等硬件模块。您还可以使用 TZASC 将内核代码锁定为普通用户(无访问权限)和普通管理员为只读。 comprimised是一个重载的词。在某些时候,您必须信任某些东西。如果普通的 super 被泄露,可以复制私钥吗?您必须定义您的安全目标。从任何意义上说,当然可以损害正常世界的内核。您没有完整的行为规范来从安全世界进行验证。

  1. 假设我有一个 RSA 密钥对,并且我将私钥保存在安全的世界中。当一个进程请求解密某些数据时,安全世界如何知道该请求是否来自立法进程?白名单机制可能会有所帮助,但如果正常世界的内核已被破坏并且对手假装是立法者怎么办?安全世界似乎对正常世界发生的事情一无所知。

您的安全世界可能必须与加密实体进行一些合作。例如,您可以在没有验证的情况下限制解密的数量。似乎最有价值的是私有 RSA 密钥。如果您允许正常世界请求解密,那么这是您的问题,而不是 Trustzone 的问题?您必须使用具有密码学和未知/不受信任主机的正常机制来处理此问题。RSA 密钥对是全局的还是每个设备的?您是否支持撤销等。它在您的系统中,而 TrustZone 只是其中的一部分。

于 2016-03-29T18:31:18.747 回答