ARM TrustZone安全操作系统如何安全?

时间:2016-11-12 08:47:51

标签: security arm trust-zone

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

  1. 是什么让安全世界真正“安全”。我的意思是为什么普通世界可能被篡改而不是安全世界?

  2. 谁可以更改安全操作系统?我的意思是添加“服务”?例如,移动支付应用程序的应用程序开发人员可以在安全操作系统中添加服务以使用他的应用程序吗?如果是,那么任何开发人员如何添加到安全操作系统并且它仍然是安全的?

  3. 是什么阻止恶意应用程序从普通操作系统引发SMC异常并转移到安全操作系统? answered

2 个答案:

答案 0 :(得分:7)

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

由于安全环境中的代码量很小,因此可以轻松审核,并且可以减少引入错误的表面积。但是,意味着安全世界自动“安全”。如果安全世界代码中存在漏洞,则可以像任何其他安全漏洞一样利用它。

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

为了说明这一点,我们假设您有一个系统,用户可以通过一些质询 - 响应交易系统来支付费用。当他们想要进行交易时,设备必须等待用户在使用加密密钥签署交易之前按下物理按钮并授权付款。

但是,如果某些恶意代码利用了内核错误并且能够在内核模式下运行任意代码呢?通常这意味着完全失败。恶意软件能够绕过所有控制机制并读出签名密钥。现在,恶意软件可以向任何人提供付款,甚至无需用户按下按钮。

如果有一种方法允许在没有Linux内核知道实际密钥的情况下签署事务,该怎么办?进入安全世界系统。

我们可以拥有一个小型的安全世界操作系统,其唯一目的是签署交易并持有签名密钥。但是,除非用户按下特殊按钮,否则它将拒绝签署交易。这是一个非常小的操作系统(千字节),你雇用人员来审核它。出于所有意图和目的,安全世界操作系统中没有错误或安全漏洞。

当普通世界操作系统(例如Linux)需要签署交易时,它会进行SMC调用以将控制转移到安全世界(注意,普通世界根本不允许修改/读取安全世界)它要签署的交易。安全世界操作系统将等待用户按下按钮,签署交易,然后将控制权转回正常世界。

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

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

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

要回答您的上一个问题,我已经在answer here中回答了问题。 SMC例外是您从安全世界操作系统请求服务的方式 - 它们基本上是系统调用,但适用于安全的世界操作系统。通过将控制权转移到安全世界,恶意代码会获得什么?

  • 您无法修改/阅读正常世界的安全世界
  • 当您将控制转移到安全世界时,您将失去对正常世界的控制权

答案 1 :(得分:4)

  

是什么让安全世界真正“安全”。我的意思是为什么普通世界可能被篡改而不是安全世界?

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

重要的是要注意安全世界是一个技术术语。它只是一个与普通世界不同的状态。名称​​安全世界不会使其安全!系统设计师必须。它高度依赖于安全资产。 TrustZone仅提供工具来对可能阻止正常访问的事物进行分区。

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

  1. 库 - 这里通常不会有安全世界中使用的中断。安全API是魔术八球。你可以问一个问题,它会给你一个答案。例如,某些数字版权管理系统可能会使用此方法。秘密密钥将在正常世界中隐藏和访问。
  2. 一个安全的操作系统 - 这里安全的世界将有中断。这更复杂,因为中断意味着某种先发制人。安全OS可以使用或不使用MMU。如果使用系统缓存,通常需要MMU。
  3. 这是最终TrustZone解决方案之间的两大差异。取决于系统设计和最终应用程序。 TrustZone只是尝试实现这一目标的工具的一部分。

      

    谁可以更改安全操作系统?我的意思是添加“服务”?例如,移动支付应用程序的应用程序开发人员可以在安全操作系统中添加服务以使用他的应用程序吗?如果是,那么任何开发人员如何添加到安全操作系统并且它仍然是安全的?

    这不是由TrustZone定义的。 SOC供应商(从ARM许可并构建CPU的人员)可以提供安全的启动技术。安全操作系统可能位于ROM中,但不能更改。其他方法是安全代码经过数字签名。在这种情况下,可能存在验证数字签名的片上安全ROM。 SOC供应商将提供(通常是NDA)安全启动的信息和技术。它通常取决于他们的目标市场。例如,物理篡改保护和加密/解密硬件也可能包含在SOC中。

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

    其他功能是安全调试,安全JTAG等。显然所有这些都是可能的攻击媒介。