问题标签 [trust-zone]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1600 浏览

linux - 安全模式如何可以访问安全/非安全内存?

根据 CortexA prog 指南

TrustZone 硬件还有效地提供了两个虚拟 MMU,每个虚拟处理器一个。这使每个世界都可以拥有一组本地转换表,其中安全世界映射对普通世界隐藏并受到保护。

页表描述包括一个 NS 位,用于确定是否对安全或非安全物理地址空间进行访问。

虽然页表条目位仍然存在,但普通虚拟处理器硬件不使用该字段,并且内存访问总是在 NS = 1 时进行。因此,安全虚拟处理器可以访问安全或普通内存。高速缓存和 TLB 硬件允许正常和安全条目共存。

因此,如果要编写代码(以安全模式运行)以访问地址 0xA0000000 [NS] 和 0xA0000000[S],它将如何编码?

0 投票
3 回答
4310 浏览

linux-kernel - Linux 内核能否作为 ARM TrustZone 安全操作系统运行?

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

我购买了基于Xv6的可运行安全操作系统的开发板,正常操作系统是Android(android版本4.2.2,内核版本3.0.15)。我试过用android Linux内核替换简单的安全操作系统,也就是前面加一点汇编代码,比如清除SCR寄存器的NS位,直接调用Linux内核入口(传入必要的内核标记列表) .

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

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

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

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

0 投票
1 回答
701 浏览

security - 从 Cortex A8/DM3730 上的特权上下文访问安全 (TrustZone) 指令的最简单方法

我有一件非常奇怪的事情需要做:访问一些“安全”指令,以处理那些实际上不需要在安全上下文中完成的事情。简而言之:我需要进入安全模式,但不是因为我想要硬件 TPM 功能或任何东西。我只需要访问某些我不会拥有的指令。

我们在 Gumstix Overo FireSTORM COM 上执行此操作。我的理解是这些安全启动,但是在某个地方(MLO?u-boot?)他们切换到非安全模式,但我可能是错的。关键是我们肯定是从非安全(但特权,见下文)模式执行此操作的。

(我撰写了这个问题,关于直接访问 A8 分支预测器的 GHB/BTB,如果您对我想要做什么感到好奇:直接写入分支预测器中的全局历史缓冲区 (GHB) 或 BTB ARM Cortex A8?

现在,所有这些都将通过 u-boot 完成(我们有 Overo FireSTORM COM),所以幸运的是我有“特权”执行。那里不用担心。而且我查看了其他 StackOverflow 问题,但似乎没有关于如何进入安全模式的任何内容。我真正想做的就是访问一些 CP15 寄存器,然后返回非安全模式(并可能重复该过程)。

我已经查看了 SMC 指令,但我找不到任何关于如何适当地捕获呼叫/呼叫去往/如何设置等的文档。

这些信息在任何地方吗?

回顾一下,这就是我想做的事情:

任何帮助都将不胜感激!

感谢@artlessnoise,我在 u-boot 源中找到了这个文件:/u-boot/arch/arm/cpu/armv7/nonsec_virt.S。

它包含以下代码:

大概如果我修改了 mcr p15 指令的掩码,我可以简单地“关闭”移动到非安全模式。但是,这可能会杀死 u-boot。

那么问题来了:如何设置适当的向量,以便在进行 SMC 调用时,我跳回安全模式,并且能够进行 GHB/BTB 修补?

任何其他帮助表示赞赏!

0 投票
1 回答
1110 浏览

security - ARM 信任区使用情况

我想问一些关于 ARM trustzone 的问题。

1.)谁能给我一个具体的例子:何时需要信任区以及它如何帮助解决安全问题?

2.) 我听说 FIQ 可以配置为“安全中断”。这是否意味着我的 FIQ 处理程序将位于安全的世界中?

3.) 何时完成此 FIQ 安全/非安全配置?我认为答案在 GIC 寄存器中的某个地方。我可以阅读这些寄存器以确定安全/非安全 FIQ 配置吗?

谢谢。

0 投票
2 回答
329 浏览

scheduling - TrustZone:从两个世界调度流程

如果我在启用 TZ 的设备上有一个单核 CPU,并且有两个进程在运行:一个在安全世界中,一个在非安全世界中,是否可以让调度程序以先发制人的方式管理它们,这样每个进程都被分配了一定的时间片?

0 投票
1 回答
876 浏览

assembly - Raspberry Pi 上的信任区意外行为?

我正在研究具有 ARM1176JZF-S 处理器的树莓派 B+ 上的信任区扩展。根据 arm11 上的给定文档,安全世界、非安全(NS)世界和监控模式分别有 3 个异常向量表。c12 寄存器将保存安全和 NS 世界异常向量表基地址的基地址。

我将这两个地址都添加到了相应世界(安全/NS)中的 c12 寄存器中。我在两个世界中都尝试了 SWI (svc)。我发现它在安全世界中运行良好,但在 NS 世界中,控件转到 SWI 的 NS 重置处理程序而不是 SWI 处理程序。我使用了以下命令:

这是我的代码:https ://github.com/avk7vk/arm_bare_metal/tree/master/trustzone-smc

请让我知道这里的问题。

0 投票
1 回答
994 浏览

assembly - smc 调用的立即值存储在哪里?

我正在研究具有 ARM1176JZF-S 处理器的树莓派 B+ 上的信任区扩展。

用于在世界之间切换的 smc(安全监视器调用)指令的形式为:

"SMC #imm4" eg : smc #0

我正在尝试从 smc 异常处理程序中检索此值。我最初的假设是这可能存储在 R0 寄存器中。但我得到的价值与我通过的不同。那么这个值存储在哪里?

0 投票
2 回答
2611 浏览

security - ARM TrustZone 的安全/普通世界与操作系统的内核/用户模式还是 x86 的 Ring0/1/2/3?

我阅读了类似TrustZone Security Whitepaper的文档。

它描述了所有资源,如 CPU、内存等,都被Secure WorldNormal World划分。Normal World 中的程序无法访问 Secure World 中的资源。你必须调用一个特殊的委托 SMC 从正常世界切换到安全世界(通过监控模式)。

据我所知,像 Linux 这样的现代操作系统提供了Kernel ModeUser Mode。用户进程不能访问位于内核空间的资源,但可以调用系统调用。

我也知道 x86 的Ring0/1/2/3可以保护资源免受来自较低权限级别进程的无效访问。

我的问题是 ARM TrustZone 的Secure/Normal Worldkernel/user mode有什么区别。或者 TrustZone 和 x86 的 ring0/1/2/3 有什么区别?

谢谢

编辑问题:在我的问题中用Ring0/1/2/3替换保护模式。


谢谢你的帮助。我花了一些时间来理解和阅读更多的文件。总结,TZ 通过总线、外设和 CPU 上的 NS 位标志提供资源隔离。

0 投票
2 回答
297 浏览

arm - 哪个板用于使用 TrustZone 扩展

我正在尝试找到一个基于 ARM 的单核板,在该板上启用了 TrustZone 技术,以实现双执行环境(在将成为我的 TEE 的 TrustZone 中运行的微内核旁边的丰富操作系统)。当我在互联网上搜索时,我发现在 ARM Cortex A8、A9、A15 上启用了 TrustZone 扩展。但在大多数使用这些处理器的板上,此扩展未启用。我可以知道启用了 TrustZone 的板的名称吗?

0 投票
2 回答
3154 浏览

android - 如何在 QEMU 中模拟 TrustZone?

我正在尝试在 Qemu 中模拟 TrustZone 功能。我找到了两个似乎可以解释这个过程的链接。

第一个参考没有附加支持 TrustZone 的图像内核(我在哪里可以找到它?)

第二个参考解释了如何编译内核,但它不是从第一个网站中编写的命令行开始的,如下所示

是否有其他方法可以运行 TrustZone 模拟器?