如何使用 TrustZone 从安全世界反省正常世界?

How to Introspect normal world from secure world using TrustZone?

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

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

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

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

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

顺便说一句,我使用的是 armv8 开发板。

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

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

这里的关键点是 TZASC 和其他总线外围设备可以授予安全世界对 read/write 正常世界内存的访问权限。您将必须验证 MMU 表和其他数据结构,以防 OS 像 Linux 这样的完全成熟的情况。模块加载、进程运行等都需要验证。但是,如果您在正常世界中有一个简单得多的系统,则可以验证它。很可能你必须接受其中的一部分。 PC 的随机抽样可能会起到威慑作用;但除非正常世界证明携带代码,否则没有什么是万无一失的。

  1. Suppose I want to see what processes are running in the normal world, do I have to use a kernel module in the normal world to help me do this? If so, how do I make sure that it has passed the right result to the secure world? To be precise, how do I check that whether the kernel has been comprimised?

您的安全世界可以包含一个 OS(或原始调度程序),它将定期检查正常世界代码的完整性。有像 RTIC 等硬件模块。您还可以使用 TZASC 将内核代码锁定为只读的普通用户(无访问权限)和普通主管。 comprimised 是一个重载的词。在某些时候,您必须信任某些东西。如果正常的 super 被破坏,私钥可以复制吗?您必须定义您的安全目标。在 any sense/meaning 中,正常世界的内核当然可以被攻破。您没有完整的行为规范来从安全世界进行验证。

  1. Suppose I have a RSA key pair and I keep the private key in the secure world. When a process request to decrypt some data, how does secure world get to know whether the request is from a legislative process? A whitelist mechanism might help, but what if the kernel in normal world has been compromised and the adversary pretend to be legislative? The secure world seems to know nothing about what is happening in the normal world.

您的安全世界可能需要加密实体的一些合作。例如,您可以在不进行某些验证的情况下限制解密的数量。看来最有价值的东西就是RSA私钥了。如果您允许正常世界请求解密,那是您的问题而不是 Trustzone 的问题?您必须使用密码学和 unknown/untrusted 主机的正常机制来处理这个问题。 RSA 密钥对是全局的还是每个设备?是否支持吊销等,在你的系统中,TrustZone只是其中的一部分。