信任区也许与你想象的不同。有一系列模式。从“可信功能的简单 API”到在每个世界中运行的“双操作系统”。
如果该问题有更多背景信息,将会有所帮助。这是为了以编程方式确定还是为了逆向工程考虑因素?对于当前的 Linux 用户空间,答案是no.
Summary
- 无电流用户空间公用事业。
- 基于时间的分析。
- 基于代码的分析。
- CPU排除和
SCR
.
-
ID_PRF1
位[7:4]。
virt-what并不是一种万无一失的方法来发现您是否在虚拟机管理程序下运行。这是一个为Linux用户空间。大多数情况下,这些是外壳脚本其中检查/proc/cpuinfo
, etc. procfs是一个伪文件系统,它在内核上下文中运行代码并向用户空间。没有这样的检测信任区 in the 主线ARM Linux。通过设计,ARM使得检测变得困难。设计意图是将代码放在正常世界不加修改地运行。
代码分析
为了与安全世界对话,正常世界需要SMC
指示。如果您的用户空间可以访问内核代码或vmlinux图片,您可以尝试分析代码部分SMC操作说明。但是,此代码可能存在于图像中,但从未激活。至少这说明了是否Linux内核有一些支持信任区。您可以编写一个内核模块来捕获任何执行SMC
指导,但可能有更好的解决方案。
时序分析
如果操作系统正在运行安全世界,一些时间分析会显示一些 CPU 周期已被窃取,如果频率缩放不活跃。我认为这不是本着原始问题精神的答案。这依赖于知道安全世界是一个带有计时器(或至少是可抢占中断)的成熟操作系统。
CPU排除和SCR
The SCR
(安全配置寄存器)在以下情况下不可用normal世界。来自 ARM Cortex-A5 MPcore 手册(第 4-46 页),
使用限制SCR 为:
• 只能在特权模式下访问
• 只能在安全状态下访问。
尝试从安全特权以外的任何状态访问 SCR
导致未定义的指令异常。
ID_PRF1
位[7:4]。
On some Cortex-A系列、说明、
mrc p15, 0, r0, c0, c1, 1
将得到一个值,其中位[7:4]指示CPU是否支持安全扩展,也称为信任区。非零值表示受支持。许多早期的CPU可能不支持这个CP15寄存器。所以,它很像SCR
并处理未定义指令。另外,它并没有告诉你代码是active in the 信任区 mode.
Summary
你可以写一个内核模块它将尝试这个指令并处理未定义的异常。这将检测到normal versus secure世界。但是,您必须排除没有的 CPU信任区 at all.
如果设备不是 ARMv6 或更好的设备,则信任区是不可能的。大量的Cortex-A设备有信任区在 CPU 中,但它不处于活动状态。
合并后的SMC
测试和CPU id,仍然不够。一些引导装载程序运行在安全世界然后过渡到正常世界. So secure仅在启动期间有效。
Theoretically, it is possible to know, especially with more knowledge of the system. There maybe many signs, such as spurious interrupts from the GIC, etc. However, I don't believe that any user space linux tool exists as of Jan 2014. This is a typical war of escalation between virus/rootkit writers and malware detection software.TZ Rootkits