2014-09-02 44 views
2

我试图在启用了TrustZone的开发板(Samsung exynos 4412)上运行Linux内核作为安全操作系统。虽然有人会说安全操作系统应该小而简单。但我只想尝试。如果可能的话,那么将Trustlet应用程序编写或移植到此安全操作系统将很容易,特别是对于具有UI(可信UI)的应用程序。Linux内核可以作为ARM TrustZone安全操作系统运行吗?

我买了一个基于Xv6的可运行安全操作系统的开发板,正常的操作系统是Android(Android版本4.2.2,内核版本3.0.15)。我试图用android的Linux内核来替换简单的安全操作系统,也就是用一个小的汇编代码,例如清除SCR寄存器的NS位,直接调用Linux内核条目(带有必要的内核标记列表传入) 。

内核未压缩代码被正确执行,内核的第一个C函数start_kernel()也被执行。除了运行到calibrate_delay()之外,几乎所有初始化函数都运行良好。该功能将等待的jiffies改变:

/* wait for "start of" clock tick */ 
ticks = jiffies; 
while (ticks == jiffies); 

我想原因是没有时钟产生的中断(我在打印中时钟中断回调函数日志,他们从未得到)。我在local_irq_enable()函数之前和之后检查了CPSR状态。 IRQ和FIQ位设置正确。我还在中断向量表中定义的Linux内核的IRQ处理程序中打印一些日志。没有记录。

我知道安全世界和非安全世界之间的中断系统可能存在一些差异。但我无法找到任何文档中的差异。有人可以指出他们吗?最重要的问题是,由于Linux是一个非常复杂的操作系统,Linux内核可以作为TrustZone安全操作系统运行吗?

我是Linux内核和ARM TrustZone的新手。请帮帮我。

+0

内核被编译为'真正'的硬件,而不是硬件TrustZone(驱动程序甚至不可能存在)。 – 2014-09-02 10:23:36

+0

感谢您的回复。但是我已经看到了几个可以做很多事情的trustzone实现,比如UI显示和触摸屏。你可以看到Genode的实现。 [文档](http://genode.org/documentation/articles/trustzone)[视频](https://www.youtube.com/watch?v=voFV1W4yyY8) – 2014-09-02 12:29:14

+0

你的问题似乎有点不清楚。检出标签[tag:trust-zone]中的所有问题,尤其是[如何开发用于arm信任区的程序]问题(http://stackoverflow.com/questions/15455011/how-to-develop-programs-for -arm信任区)。你**不需要安全的操作系统才能拥有安全的* trustlet *;只需安全启动,带有启动锁的分区检查器和带有Secure API的监视器表。 – 2014-09-02 16:40:20

回答

1

没有什么技术上可以阻止Linux在ARM处理器的安全状态下运行。但它击败了TrustZone的全部目的。 Linux等大型复杂的内核和操作系统不能正式验证其可以被视为“安全”。

有关这方面进一步阅读,看http://www.ok-labs.com/whitepapers/sample/sel4-formal-verification-of-an-os-kernel

至于你所面临的具体问题 - 应该有什么特别之处在安全中断处理与非安全状态(除非你明确配置它是不同)。但可能是因为您已删除的安全操作系统正在执行一些目前尚未发生的初始计时器初始化。

3.0.15是一个绝对古老的内核 - 它在2.5年前发布,基于3年前发布的内容。

+1

这可能会分裂头发......在安全的世界中,Linux没有任何问题;这是ARM支持向后兼容的默认设置。在安全的世界中运行Linux和Trustlet可能是错误的。在安全的世界中运行安全的外围设备和另一个非安全的Linux环境中的最小安全Linux技术上是可行的。不要相信微内核的炒作。大多数攻击都是在API代码而不是操作系统上。 Linux比OKL4拥有更多的评论者。在OKL4中编写有缺陷的应用程序/单元与在Linux中编写应用程序/单元一样简单(或更容易)。 – 2014-09-02 16:10:54

+0

Linux也比OKL4大几个数量级(仅仅为了该报告而链接 - 操作系统本身不安全,只有系统可以安全)。大型代码库本质上不太安全。尽管从简单的技术角度来看,可以高兴地使用安全Linux和非安全Linux并存,但这对于提高系统安全性并无帮助。 – unixsmurf 2014-09-02 16:47:26

+0

由于我的澄清似乎并不清楚:我对OKL4了解不多,我也不认为它是安全的。我只是在报告中讨论了正式验证操作系统的问题时才列出了一个链接。正如我在回答中首先说的,然后在评论中更强烈地回答。我宣称它可以在宇宙冷热死亡之前变得安全。我也声称对于Linux的任何规模都是如此。减少攻击面并不是一个安全的系统 - 它可以使它不那么不安全。 – unixsmurf 2014-09-03 01:17:24

2

运行Linux作为安全世界默认情况下,操作系统应为标准配置。也就是说,安全的世界主管是最值得信任的,并且可以轻松转换到其他模式。 安全世界是ARM CPU的操作概念。

注意:仅仅因为Linux在安全的世界运行,不会使您的系统安全! TrustZone和安全世界是您可以用来创建安全系统的功能。

但我只想尝试。如果可能的话,那么将Trustlet应用程序编写或移植到此安全操作系统将很容易,特别是对于具有UI(可信UI)的应用程序。

的TrustZone允许的软件分区。如果您在同一图层中同时运行Linux和trustlet应用程序,则没有用处。 trustlet只是一个正常的应用程序。

trustbar的正常模式是在启动时设置监视器向量页并锁定物理访问。然后,Linux内核可以使用smc指令调用程序在trustlet访问DRM类型的功能来解密媒体等。在这种模式下,Linux上运行作为一个正常的世界操作系统,但可以用,在调用功能有限通过您定义的SMC API保护世界

除了运行到calibrate_delay()之外,几乎所有的初始化函数都运行良好。

这是对症无功能中断。 calibrate_delay()在等待刻度计数以通过系统计时器中断增加时运行紧密循环。如果您在安全的世界中运行,则可能需要路由中断。寄存器GICD_ISPENDR可用于强制中断。您可以使用它来验证ARM GIC是否正常工作。另外,内核命令行选项lpj=XXXXX(其中XXXX是某个数字)可以跳过此步骤。

最有可能的一些外围中断路由器,时钟配置或其它中断/定时器初始化由引导装载程序在一个正常的系统完成,你缺少这一点。启动新的电路板总是很困难; TrustZone更是如此。

1

你说的话有几个问题需要清理。首先,你是否试图让安全世界内核运行或正常世界内核?你说你想在西北的SW和Android上运行Linux,但是你的问题是:“我试图用android Linux内核替换简单的安全操作系统”。那么你遇到哪些内核问题?

其次,你提到清除NS位。这并不合理。如果设置了NS位,则清除它意味着您已经在NW中运行(正如所设置的位将指示),执行了SMC指令,切换到Monitor模式,将NS位设置为0,然后恢复SW寄存器。是这样吗?

至于中断而言,你有没有正确初始化的直条为每个执行模式,即安全世界直条,正常的世界直条和MVBAR。除了在NSACR和其他设置中设置适当的值之外,还需要设置所有这三个参数,以确保中断被引导到正确的执行世界,而不是所有的操作都由SW处理。另外,您确实需要为所有三种模式分别创建异常向量表和处理程序。您最初可能只能使用一组,但一旦使用TZASC分区您的内存系统,您将需要分离所有内容。

TZ需要大量的配置,而不是简单地通过设置/取消设置NS位处理。对于Exynos 4412,许多TZ控制寄存器必须正确设置才能在NW中执行。不幸的是,用户指南的公开版本中没有包含这些信息。您需要完整版本才能获得在此处理器上实际运行SW和NW内核所需的所有值和地址。

相关问题