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



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

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

  2. 谁可以更改安全操作系统?我是说,比如增加一项"服务"?例如,移动支付应用程序的应用程序开发人员可以在安全操作系统中添加服务来配合他的应用程序吗?如果是,那么开发人员如何添加安全操作系统,而它仍然是安全的?<罢工>

  3. 如何防止恶意应用程序从正常操作系统引发SMC异常并转移到安全操作系统?, <一口>回答

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

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

将此与正常情况下执行的代码进行对比。例如,Linux内核更复杂,更难以审计。有很多内核漏洞和漏洞利用的例子允许恶意代码接管内核。

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

但是,如果一些恶意代码利用内核漏洞,能够在内核模式下运行任意代码呢?通常这意味着彻底失败。该恶意软件能够绕过所有控制机制并读取签名密钥。现在,恶意软件可以向任何人付款,甚至不需要用户按下一个按钮。

如果有一种方法可以在Linux内核不知道实际密钥的情况下签名事务呢?进入安全世界系统

我们可以有一个小的安全世界操作系统,其唯一目的是签名事务并持有签名密钥。但是,它将拒绝签署交易,除非用户按下一个特殊的按钮。这是一个非常小的操作系统(以千字节计),您已经雇人对其进行审计。对于所有的意图和目的,在安全世界的操作系统中没有错误或安全漏洞。

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

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

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

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

关于你的最后一个问题,我已经在这里给出了答案。SMC异常是指您如何从安全世界操作系统请求服务——它们基本上是系统调用,但针对安全世界操作系统。通过将控制权转移到安全世界,恶意代码将获得什么?
  • 不能从正常世界修改/读取安全世界
  • 当你将控制权转移到安全世界时,你就失去了对正常世界的控制权

是什么让安全的世界真正"安全"?我的意思是为什么正常的世界可以被篡改而安全的世界却不能?

安全系统设计者使其安全。TrustZone是一个工具。它提供了一种对物理内存进行分区的方法。这可以防止DMA攻击。TrustZone通常支持开机锁定特性。因此,一旦物理映射完成(安全/正常世界权限),它们就不能被更改。TrustZone提供了分区中断和安全启动的工具。

重要的是要注意安全世界是一个技术术语。它只是一个不同于正常世界的状态。名称安全世界并不能使安全!系统设计者必须。它高度依赖于安全资产是什么。TrustZone只提供工具来分割可以阻止正常世界访问的东西。

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

  1. 一个库——这里通常不会在安全世界中使用中断。安全API是一个魔术八球。你可以问它一个问题,它会给你一个答案。例如,某些数字版权管理系统可能会使用这种方法。在正常世界中,秘钥将被隐藏并且无法访问。
  2. 一个安全的操作系统——这里安全的世界将有中断。这是更复杂的,因为中断意味着某种抢占。安全操作系统可能使用MMU,也可能不使用。如果要使用系统缓存,通常需要MMU。

这是最终TrustZone解决方案之间的两个主要区别。这取决于系统设计和最终应用程序是什么。TrustZone只是尝试实现这一目标的工具之一。

谁可以更改安全操作系统?我是说,比如增加一项"服务"?例如,移动支付应用程序的应用程序开发人员可以在安全操作系统中添加服务来配合他的应用程序吗?如果是,那么开发人员如何添加安全操作系统,而它仍然是安全的?

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

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

其他特性包括安全调试、安全JTAG等。显然这些都是可能的攻击媒介。

最新更新