问题标签 [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.
arm - FIQ 发生时从 el3 返回到 nwd 32 位进程时的分段错误
我使用信任区仿真运行 qemu。64 位 Linux 在普通世界 (NWD) EL1 中运行,一些专有代码在 EL3 和安全世界 (SWD) EL1 中运行。我也有这样的中断配置:1)为SWD分配了FIQ;2) 为 NWD 分配 IRQ。
还有三种情况 NWD 可以被 FIQ 中断:1)NWD 在内核模式(64 位 Linux)下执行 2)NWD 在 64 位用户模式下执行 3)NWD 在 32 位用户模式下执行
当 FIQ 发生时,它被 EL3 捕获。然后 NWD 上下文被 EL3 的代码保存,FIQ 的处理程序开始执行。从 el3 返回 NWD 1),2) 情况后一切正常 - 中断的过程继续工作。但是在案例 3 中从 el3 返回到 NWD 后,中断过程发生了分段错误。这也是从 el3 返回到 NWD EL0 - 0x600f0010 - 看起来没问题之前的 spsr_el3 寄存器的值。此外,我已经比较了案例 3 中保存和恢复的上下文,它看起来也不错。看起来这是 qemu 中的一些错误。有人知道是什么问题吗?
security - 是什么阻止任何恶意软件在 ARM TrustZone 中引发 SMC 异常?
我正在阅读有关 ARM TrustZone 的信息。我读到,当普通世界想要安全世界的功能时,他们会引发 SMC 异常,从而转移到安全世界。我不明白的是什么可以防止任何恶意代码引发 SMC 异常?如果任何未经授权的软件可以导致转移到安全世界,那么安全世界如何“安全”?
security - ARM TrustZone 安全操作系统如何安全?
我正在尝试阅读 TrustZone 白皮书,但很难理解一些基本内容。我对此有一些疑问。他们可能是简单的问题,但我是这个领域的初学者:
是什么让安全世界真正“安全”。我的意思是为什么正常世界可能会被篡改,而安全世界却不会?
谁可以更改安全操作系统?我的意思是添加“服务”?例如,移动支付应用程序的应用程序开发人员可以在安全操作系统中添加一项服务以使用他的应用程序吗?如果是,那么任何开发人员如何添加到安全操作系统并且它仍然是安全的?
什么可以防止恶意应用程序从正常操作系统引发 SMC 异常并转移到安全操作系统?,回答
caching - TrustZone 系统上的安全 DMA 和非安全 CPU 之间是否会发生一致性问题
我遇到了一些我认为与 DMA 和 CPU 之间的一致性有关的问题。这是简化的用例。
Cortex A5 CPU 在非安全状态下写入非安全内存。MMU开启,内存属性正常,可共享,可缓存。因此,根据以下参考资料,数据可能在所谓的非安全缓存中:
[1] DDI0434B_cortex_a5_mpcore_r0p1_trm中的“数据缓存标签数据格式”
[2] 安全模式下来自 artless noise 的回答可以如何访问安全/非安全内存?
[3] http://atmel.force.com/support/servlet/fileField?id=0BEG000000002Ur中的第 6 页
DMA 向该内存区域发出安全一致的读取。DMA 连接到 ACP。
SCU 只会尝试检查标记为安全的缓存。所以数据是根据 DDI0434B_cortex_a5_mpcore_r0p1_trm 中的“ACP requests”从主存返回的。
DMA 可能会得到陈旧的数据。
如果我的描述是正确的,这是我的第二个问题。哪个动作可以解决这个问题?
1) 在 DMA 读取之前显式清理缓存
2)将内存的属性改为普通、可共享和不可缓存。
TRM 还表示,在“总线接口单元和 SCU 接口”中的 SCU 接口上写出之前,有一个写入缓冲区用于保存来自缓存驱逐或不可缓存写入突发的数据。但是,找不到有关写入缓冲区的更多信息。我可以假设写缓冲区有一些魔力来确保一致性吗?如果有人能解释魔法,我将不胜感激。
考虑到更多的组合,我自己得到了这张桌子。
第一列显示 CPU 在哪个状态下写入内存。
第二列显示内存是否安全。这里的“安全”意味着如果 AxPROT[1] 为高电平,AXI 将拒绝访问。内存属性是正常的、可共享的和可缓存的。
第三列显示了访问 DMA 问题的种类。访问是连贯的。
第四列告诉我们会发生什么。
NG 意味着 DMA 可能会获得陈旧的数据。
NA 表示无法访问。
OK 表示 DMA 与 CPU 一致。
对吗?
我根据 Notlikethat 的回答添加了这部分。这在实践中可能是一场噩梦。但是我想知道理论上会发生什么。
- 假设物理地址 0x10 映射到两个虚拟地址 NS:0x110 和 S:0x210。
- 安全状态下的 CPU 将值 0x110 写入 NS:0x110,然后将值 0x210 写入 S:0x210。
所以两者可能同时在 L1 缓存中,对吧? - 然后 DMA1 对 PA 0x10 进行安全读取,可能会得到 0x210。DMA2 对 PA 0x10 进行非安全读取,可能会得到 0x110。
- 之后,无法预测最终哪个会在主存储器中。
请确认或更正我的理解。非常感谢。
arm - arm trustzone监控模式开关设计
基本的世界切换流程是:
将 FIQ 设置为监控模式
- 正常世界 -> FIQ 触发
- -> 进入监控模式(切换到安全世界,恢复安全世界上下文)
- -> 在安全世界系统模式下
- -> FIQ 不清楚,在 Secure world 中输入 FIQ 处理程序
step3和step4,我们恢复目标上下文后,arm会触发异常进入异常行为是否正确?(如果我们不在监控模式向量表中分支到 FIQ 句柄)
我们需要如下流程:(没有世界上下文切换的情况,只需进入监控模式检查是否需要世界切换,然后直接从监控模式进入irq异常。由于我们的硬件限制,我们需要这个,我们的芯片中只有IRQ )
将 IRQ 设置为监控模式
- 普通世界用户模式 -> IRQ 触发
- -> 进入monitor,做我们想hook的事情,检查是否需要上下文切换,为IRQ模式准备一些spsr/lr
- -> 进入普通世界IRQ模式,irq处理
- -> irq 完成,返回用户模式
对于non-world switch的情况,我们想让正常的world os不知道monitor mode,尽管他直接进入irq mode并从irq mode返回。对于世界开关盒,只需在监控模式下切换即可。
还是只是在监控模式下执行 irq_handle?
等式。
普通世界 OS usr 模式 -> irq -> usr 模式
普通世界 OS usr 模式 -> 监控到 irq 处理程序 -> usr 模式
流程是否可行且设计良好?
security - ARM TrustZone,连接外围设备?
我目前正在做一些关于 ARM 的 TrustZone 的研究,例如这里:ARM 信息中心。据我了解,使用 TrustZone 可以创建基于 AMBA AXI 总线的安全环境。
在ARM 网站上,它说:“这种安全和非安全世界的概念超越了处理器,涵盖了 SoC 中的内存、软件、总线事务、中断和外围设备。” 我读到外围设备可以通过 AMBA AXI 总线的N on Secure位连接到 TrustZone(额外的信号用于区分受信任和不受信任的请求)。
1) 除了 AMBA AXI 总线的额外引脚之外,具有 TrustZone 的 SoC 中的 TrustZone 特定硬件是什么?
2) 是否可以将外部非易失性存储器(例如闪存)或其中的一个分区连接到 TrustZone 以访问安全世界(通过外部存储器接口,然后是内部的 AXI 总线)?如果不是,如何存储秘密(作为密钥)以在安全世界中使用(借助保险丝??)?如果是,如何防止连接包含恶意代码的 Flash?
3) 作为芯片供应商(例如 TI 或 NXP)的客户,是否有可能在芯片出厂之前或之后为安全世界实施代码?
谢谢您的回答。
android - 如何检查Android手机是否有TEE
我的 Android 应用程序的某些功能取决于手机上存在的 TEE(可信执行环境/ARM TrustZone)。如何从我的 Java 应用程序中检测此手机是否安装了 TEE,如果是,它是哪个供应商的 TEE?谢谢!
arm - ARM TrustZone api 在哪里?
我阅读了 trustzone_security_whitepaper.pdf,第 5.5 章 TrustZone API,
和 5.5.1 API 可用性
我搜索了 arm 网站,但没有找到 TrustZone api 列表或手册的条目?
android - Android 硬件支持的凭据存储是否会在出厂重置时被擦除?
我有兴趣将数据存储在硬件支持的存储(在 TrustZone 中)中,如https://developer.android.com/about/versions/android-4.3.html中所述。
这些可以在出厂重置后存活吗?
谢谢。
android - Persistence of Android KeyStore and access permissions to key material
How persistent is the Android KeyStore, whether hardware-backed (via TrustZone) or not? Do the keys that are generated within the KeyStore get deleted after the creating app is uninstalled?
Do they also get deleted upon a factory reset? (especially hardware-backed ones, not sure if a factory reset also wipes TrustZone). Can other apps access the key material (use/read them) if they know the alias?