如何确定 ARM 处理器是运行在通常的锁定“世界”中还是运行在 Secore“世界”中?

2023-12-10

例如,virt-what显示您是否在硬件虚拟化“沙箱”内运行。

如何检测您是否在 ARM“TrustZone”沙箱中运行?


信任区也许与你想象的不同。有一系列模式。从“可信功能的简单 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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何确定 ARM 处理器是运行在通常的锁定“世界”中还是运行在 Secore“世界”中? 的相关文章

  • 将 ZeroMQ 交叉编译为 ARM,以便在 MonoTouch iPhone 应用程序配置设置中使用

    我正在尝试在使用 MonoTouch 用 C 开发的 iPhone 应用程序中使用 ZeroMQ 库 我几乎解决了所有的问题 却在最后一道坎倒下了 我正在使用 ZeroMQ 2 1 10 和 C CLR 绑定 包装器 并在 Mac OS X
  • arm64 汇编:LDP 与 LD4 执行时间

    假设我想用连续内存位置的值加载四个连续的 aarch64 向量寄存器 一种方法是 ldp q0 q1 x0 ldp q2 q3 x0 32 根据ARM优化指南 https static docs arm com uan0016 a cort
  • 将结构体偏移属性赋予汇编器

    如何将 C 结构体的偏移量发送到汇编代码 例如 在我的 C 代码中 typedef struct unsigned int a unsigned int b CMyStruct 我向 ASM 函数发送一个 CMyStruct 结构的指针 假
  • ARM 汇编分支到寄存器或内存内部的地址

    我想知道在 ARM 汇编中我可以使用哪条指令分支到存储在某个内存地址中的地址或标签 例如 我们可以使用B LABEL来跳转到LABEL 但现在目的地只能在运行时知道 并且它存储在某个已知的内存位置 是否有类似 B 地址 的东西 Thanks
  • 将 GCC 内联汇编与采用立即值的指令结合使用

    问题 我正在为 ARM Cortex M3 处理器开发定制操作系统 为了与我的内核交互 用户线程必须生成 SuperVisor Call SVC 指令 以前称为 SWI 用于软件中断 该指令在ARM ARM中的定义是 这意味着该指令需要即时
  • ARM Cortex A8 PMNC 读取在启用后也给出 0.. 有什么想法/建议吗?

    MODULE LICENSE GPL MODULE DESCRIPTION user mode access to performance registers int init arm init void unsigned int valu
  • 在嵌入式设备上使用new或malloc引起的段错误[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我正在尝试
  • 如何在 Android 设备上运行 VS Code [重复]

    这个问题在这里已经有答案了 我有 Galaxy Tab S6 它具有替代笔记本电脑的很酷的功能 例如连接鼠标和键盘 但不幸的是它运行 Android 操作系统 并且没有很多开发应用程序可用于 Android 所以我想是否有一个选项可以在至少
  • 在linux x86平台上学习ARM所需的工具[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有一个 x86 linux 机器 在阅读一些关于 ARM 的各种信息时 我很好奇 现在我想花一些时间学
  • 基于 Windows 8 ARM 的平板电脑上的 VB6

    随着 Windows 8 将支持 VB6 我的问题是 Microsoft 是否在任何地方表示 是或否 VB6 应用程序将在基于 ARM 的平板电脑上运行 如果没有 是否有任何 ARM 模拟器 以便我们可以在 Windows 8 ARM 平板
  • 在 Intel 机器上构建 Apple Silicon 二进制文件

    如何在 macOS 11 Intel 上编译 C 项目以在 Silicon 上运行 我当前的构建脚本很简单 configure make sudo make install 我尝试过使用 host and target标志与aarch64
  • Beaglebone Black 的 U-boot 无法构建 - 目标 CPU 不支持 THUMB 指令

    我正在尝试按照 Chris Simmonds 的 掌握嵌入式 Linux 编程 中的说明为 Beagle Bone Black 构建 u boot 我已经构建了交叉工具链 现在正在尝试使用该工具链构建 Das U boot 但由于不支持 T
  • DS-5:什么是 FVP、RTSM、基础模型、AEM 模型、快速模型、CADI?

    DS 5 模拟器使用了很多术语 如 FVP RTSM 快速模型 基础模型 AEM 模型 CADI Arm的文档中提供的解释不是很清楚 这些术语的含义是什么 作为 DS 5 的最终用户我应该关心哪些术语 Model 软件模拟的行业术语 就 A
  • Qemu flash 启动不起作用

    我有一本相当旧的 2009 年出版 嵌入式 ARM Linux 书 其中使用u boot and qemu 的用法qemu与u boot书中对二进制的解释如下 qemu system arm M connex pflash u boot b
  • iPhone 3GS 上的 ARM 与 Thumb 性能比较,非浮点代码

    我想知道是否有人有关于 iPhone 3GS 上 ARM 与 Thumb 代码性能的硬性数据 特别是对于非浮点 VFP 或 NEON 代码 我知道 Thumb 模式下的浮点性能问题 更大的 ARM 指令的额外代码大小是否会在某个时刻成为性能
  • 架构armv7的重复符号

    尝试在我现有的应用程序中使用 Layar SDK 时出现以下错误 我该如何解决这个问题 Ld Users pnawale Library Developer Xcode DerivedData hub afxxzaqisdfliwbzxbi
  • arm64和armhf有什么区别?

    Raspberry Pi Type 3 具有 64 位 CPU 但其架构不是arm64 but armhf 有什么区别arm64 and armhf armhf代表 arm hard float 是给定的名称Debian 端口 https
  • 英特尔的最后分支记录功能是英特尔处理器独有的吗?

    最后分支记录是指存储与最近执行的分支相关的源地址和目标地址的寄存器对 MSR 的集合 它们受英特尔酷睿 2 英特尔至强和英特尔凌动处理器系列的支持 http css csail mit edu 6 858 2012 readings ia3
  • 为arm构建WebRTC

    我想为我的带有arm926ej s处理器的小机器构建webrtc 安装 depot tools 后 我执行了以下步骤 gclient config http webrtc googlecode com svn trunk gclient s
  • ARM Cortex-M3 启动代码

    我试图了解 STM32 微控制器的 Keil realview v4 附带的初始化代码是如何工作的 具体来说 我试图了解堆栈是如何初始化的 In the 文档 http infocenter arm com help index jsp t

随机推荐

  • 在 Windows 上通过 putty 通过 ssh 编写脚本

    我需要编写从 Windows 机器恢复 Linux 机器的 mysql 脚本 我有 putty 并且我知道它有 ssh 功能 这是我所拥有的 C Progra 1 Putty putty exe ssh root 10 1 2 3 mysq
  • 在移动设备上进行离线反向地理编码的技术?

    我正在开发一个移动地图应用程序 目前是 iOS 最终是 Android 我正在努力解决如何在不使用在线服务的情况下最好地支持从纬度 经度到国家 州的反向地理编码 Apple 的反向地理编码 API 依赖于 Google 作为后端 并且在连接
  • 在商店后使用启动器时如何防止应用程序重新启动?

    在我使用应用程序商店启动它后 使用启动器启动它时 我的 Android 应用程序正在重新启动 反之亦然 有什么办法可以防止这种情况发生吗 重新启动是指活动堆栈丢失 这很重要 因为我们的用户会在一个小时左右的时间内间歇性地设置并返回应用程序中
  • 如何正确重写 Viewgroup 类中的 onLayout 方法

    我有一个从视图组类扩展的类 现在我知道在 onLayout 中你必须调用每个孩子的布局方法 这里的问题是应该将什么值传递给子布局 在我看来 我膨胀了一个 xml 并将其附加到此类 宽度和高度在 xml 中定义 在 onlayout 中 我得
  • 在 python watchdog 中并行处理多个 onCreated 事件

    我正在尝试检测目录上是否创建了任何新文件 如果创建 我想处理它 需要 10 分钟才能给出输出 同时其他新文件也会在该文件夹中创建 我如何使用多进程注册看门狗的 oncreated 以便每次创建文件时都会生成一个新进程 而不是等待一个文件完成
  • 使用 Guzzle PHP 将文件分块上传到 URL 端点

    我想使用 guzzle 将文件分块上传到 URL 端点 我应该能够提供 Content Range 和 Content Length 标头 使用 php 我知道我可以使用 define CHUNK SIZE 1024 1024 Size i
  • XSLT 转换为 xml,按键分组

    我在编写 xsl 将 xml 转换为 raport 版本时遇到问题 看起来像这样
  • 使用反射将属性动态转换为其实际类型(其中实际类型是通用的)

    这是一个略有不同的问题here 我将相同的代码修改为我的需要 如下所示 using System using System Collections Generic using System Linq using System Reflect
  • 由于类型转换而未使用索引?

    由于对特定表进行全表扫描 我有一个进程表现不佳 我计算了统计数据 重建了现有索引并尝试为此表添加新索引 但这并没有解决问题 隐式类型转换可以停止使用索引吗 其他原因又如何呢 全表扫描的成本比索引查找的成本大约高 1000 EDIT SQL语
  • 从 parse.com 检索图像

    我不知道这是否可能 但我认为这是可能的 但我不知道该怎么做 我只是想从 parse com 加载图像 就像从 parse com 检索对象一样 我应该像从 parse com 获取字符串一样进行操作吗 我刚刚找到了如何在解析时保存图像 但没
  • 如何制作输出目录选择面板?

    您好 我正在尝试制作一个窗格 在我的计算机中显示类似 Windows 资源管理器的内容 当用户完成操作后 当他想要将编辑后的图像保存在磁盘上的特定位置时 他可以轻松地从该窗格中选择目录 我想设计这样的东西 可以做类似的事情吗 我的图片编辑器
  • pandas pytables 附加:性能和文件大小的增加

    我有500多个PyTables每个存储大约包含 300Mb 的数据 我想使用 pandas 将这些文件合并到一个大商店中append如下面的代码所示 def merge hdfs file list merged store for fil
  • 如何将 ruby​​gem 条件要求添加到 gem 规范中?

    仅当用户使用特定版本的 ruby 时才可以添加 gem 依赖项吗 背景 我正在研究一个项目的分支使用 Test Unit Autorunner 等 它们是 ruby 1 8 中标准库的一部分 但不是 1 9 1 中标准库的一部分 而是位于
  • python 列表,向列表添加一些内容会改变整个内容?

    所以我试图在Python中实现选择排序 并且我将每次迭代的结果附加到一个列表中以在最后打印 我的代码正确地对数字列表进行排序 但是当我将它附加到最后的同一个列表中时更改所有其他列表 def s sort numbers alist do a
  • 计算出勤时间差

    我有一个包含以下示例输出的表格 UserID Checktime CheckStatus 3175 2013 12 22 07 02 10 000 I 3175 2013 12 22 13 01 01 000 O 3175 2013 12
  • 针对特定图像的 CSS

    我正在寻找一种使用 CSS 定位特定图像的方法 如果可能的话 我正在运行一个 CMS 用户可以在其中上传图像并将其放在他们的页面上 我想要一种定位具有特定尺寸的图像的方法 所以问题是 你可以让 css 行针对具有特定尺寸规格的图像或对象吗
  • 使用 LocalStorage 保存和加载购物车

    我有以下代码 inames iqtyp iprice function bestel inames push document getElementById artikel innerHTML iqtyp push parseInt doc
  • C - strtok(...) 上出现意外的分段错误

    我正在使用库的 strtok 它似乎工作正常 直到结束条件 它导致分段错误和程序崩溃 API 声称 当找不到更多标记时 strtok 将输出 NULL 这意味着 我认为 您必须捕获此 NULL 才能终止使用 strtok 运行的任何循环 我
  • Android 来电事件

    我想创建一个 onCall 事件 我已经知道没有这样的方法 但基本上我想做的是 当接到来电时 弹出 Toast 或其他任何内容 任何类型的教程或示例代码都会有帮助 多谢 Use PhoneStateListener它已经重写了方法onCal
  • 如何确定 ARM 处理器是运行在通常的锁定“世界”中还是运行在 Secore“世界”中?

    例如 virt what显示您是否在硬件虚拟化 沙箱 内运行 如何检测您是否在 ARM TrustZone 沙箱中运行 信任区也许与你想象的不同 有一系列模式 从 可信功能的简单 API 到在每个世界中运行的 双操作系统 如果该问题有更多背