tee漏洞学习-翻译-1:从任何上下文中获取 TrustZone 内核中的任意代码执行

原文:http://bits-please.blogspot.com/2015/03/getting-arbitrary-code-execution-in.html

目标是什么?

这将是一系列博客文章,详细介绍我发现的一系列漏洞,这些漏洞将使我们能够将任何用户的权限提升到所有用户的最高权限 - 在 TrustZone 本身内执行我们的代码。

由于我只有个人 Android 设备(搭载 Snapdragon 800 SoC 的 Nexus 5),因此我将重点关注我设备上的 TrustZone 平台 - 高通的 TrustZone 实现。

应该指出的是,高通的 TrustZone 平台存在于所有采用高通 SoC 的设备上,但是,它们也允许 OEM 对该平台进行修改和添加,我将在后面的博客文章中更详细地介绍这一点。

Android & Security

多年来,Android 中添加了许多安全机制,并且现有的安全机制也得到了改进。

虽然底层安全架构没有改变,但现代设备上的防御措施已经变得相当强大,以至于获得高权限可能成为一项相当困难的任务,很多时候需要多个漏洞。

如果您还没有阅读过,我建议您阅读 Google 的“Android 安全概述”,其中解释了安全架构并列出了当前正在使用的大部分安全机制。

在这里插入图片描述

什么是 TrustZone?

根据 ARM Ltd. 的说法,TrustZone 是:
“…针对各种客户端和服务器计算平台(包括手机、平板电脑、可穿戴设备和企业系统)的全系统安全方法。该技术支持的应用程序极其多样化,但包括支付保护技术、数字版权管理、BYOD 以及一系列安全的企业解决方案。”

简而言之,这意味着 TrustZone 是一个旨在在目标设备上启用“安全执行”的系统。

为了执行安全的 TrustZone 代码,需要指定一个特定的处理器。该处理器可以执行非安全代码(在“正常世界”中)和安全代码(在“安全世界”中)。所有其他处理器仅限于“正常世界”。

TrustZone 在 Android 设备上有多种用途,例如:

  • Verifying kernel integrity (TIMA)
  • Using the Hardware Credential Storage (used by “keystore”, “dm-verity”)
  • Secure Element Emulation for Mobile Payments
  • Implementing and managing Secure Boot
  • DRM (e.g. PlayReady)
  • Accessing platform hardware features (e.g. hardware entropy)

为了保护整个系统,系统总线上的特定位在进入“安全世界”时被设置,并在返回“正常世界”时取消设置。

外设能够访问这些位的状态,因此可以推断出我们当前是否在安全世界中运行。

TrustZone 的安全模型如何运作?

ARM 还对 TrustZone 安全模型的工作原理进行了简短的技术概述,值得一读。

为了实现安全执行,必须定义 TrustZone 和非 TrustZone 代码之间的边界。这是通过定义两个“世界”来实现的——“安全世界”(TrustZone) 和“正常世界”(在我们的例子中是 Android)。

如您所知,在“正常世界”中,在“用户模式”下运行的代码和在“主管模式”(内核模式)下运行的代码之间存在安全边界。

不同模式之间的区别由当前程序状态寄存器 (CPSR) 管理:
在这里插入图片描述

五个模式位(上图中用“M”标记)控制当前的执行模式。对于 Linux 内核,用户模式 ​​(b10000) 用于常规用户代码,而管理员模式 (b10011) 用于内核代码。

然而,这里缺少一些东西——没有任何信息来表明当前活跃的“世界”是什么。这是因为有一个单独的寄存器用于此目的 - 安全配置寄存器 (SCR)

在这里插入图片描述

该寄存器是一个协处理器寄存器,位于 CP15 c1 中,这意味着它可以使用 MRC/MCR 操作码进行访问。

与CPSR寄存器一样,“正常世界”无法直接修改SCR寄存器。但是,它可以执行 SMC 操作码,这相当于常规管理程序模式调用的 SWI。 SMC 是 Supervisor Mode Call 的缩写,是可用于直接向 TrustZone 内核发出请求的操作码。

另外,应该注意的是,SMC 操作码只能从管理程序上下文中调用(内核模式),这意味着常规用户代码无法使用 SMC 操作码。

为了实际调用 TrustZone 相关功能,管理程序代码(在我们的例子中为 Linux 内核)必须注册某种服务,该服务可用于在需要时调用相关的 SMC 调用。

对于高通来说,这是通过名为“qseecom”的设备驱动程序来实现的——“qseecom”是高通安全执行环境通信的缩写。我们将在后面的博客文章中详细讨论该驱动程序,所以请耐心等待。

把它们放在一起

因此,前面的路还很长——为了在没有权限的情况下从用户模式 ​​Android 应用程序执行 TrustZone 代码,我们需要以下权限提升漏洞:

  • 从没有权限的 Android 应用程序升级到特权 Android 用户。
  • 从特权 Android 用户升级到 Linux 内核中的代码执行。
  • 从 Linux 内核升级到 TrustZone 内核中的代码执行。

因此,如果您对此感兴趣,请继续阅读!

在下一篇博文中,我将介绍有关 Qualcomm TrustZone 实现以及我在其内核中发现和利用的漏洞的更多详细信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/648231.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

POLYGON Military - Low Poly 3D Art by Synty

这是一个非常全面的资产包,可满足您的所有军事需求。一个绝对庞大的低多边形资产包,用于构建您的梦想游戏! 模块化部分易于以各种组合方式拼接在一起。 此包中包含 1500 多个详细的预制件。 主要特征 - 完全模块化武器系统 - 超级可定制的角色 -沙漠主题建筑和环境 - 建筑物…

day16打卡

day16打卡 104. 二叉树的最大深度 递归法时间复杂度:O(N),空间复杂度:O(N) class Solution { public:int maxDepth(TreeNode* root) {if(root nullptr) return 0;return 1 max(maxDepth(root->left), maxDepth(root->right));} };…

springboot-mybatis项目

一、后端开发环境搭建 1、File->New->Projet 2选择 Spring Initializr ,然后选择默认的 url 点击next 3勾选Spring Web、SQL模板,next 4点击finish,搭建完成 二 数据库 1 新建数据库 2 执行sql建表 SET NAMES utf8mb4; SET FOREIGN…

C语言练习题110例(十)

91.杨辉三角 题目描述: KK知道什么叫杨辉三角之后对杨辉三角产生了浓厚的兴趣,他想知道杨辉三角的前n行,请编程帮他 解答。杨辉三角,本质上是二项式(ab)的n次方展开后各项的系数排成的三角形。其性质包括:每行的端点数为1&…

安利一款抢票软件堪称“业界良心”,全网好评!

马上就到了春运了,有不少网友反映12306买票太难了。 有粉丝在后台留言问有没有抢票软件? 知名公司开发的抢票软件,需要助力、需要用钱买加速包,这对于需要白嫖的朋友来说无疑是“雪上加霜”! 这里从解决实际问题的角度…

[漏洞复现]Redis 沙盒逃逸漏洞(CVE-2022-0543)

一、漏洞情况分析 Redis 存在代码注入漏洞,攻击者可利用该漏洞远程执行代码。 二、漏洞复现 春秋云境.com 进入靶场 开始复现 三、漏洞处置建议 把靶场关了,跟漏洞说“白白吧

星环科技基于第五代英特尔®至强®可扩展处理器的分布式向量数据库解决方案重磅发布

12月15日,2023 英特尔新品发布会暨 AI 技术创新派对上,星环科技基于第五代英特尔至强可扩展处理器的Transwarp Hippo分布式向量数据库解决方案重磅发布。该方案利用第五代英特尔至强可扩展处理器带来的强大算力,实现了约 2 倍的代际性能提升&…

如何在外远程访问家中本地威联通QNAP NAS

文章目录 前言1. 威联通安装cpolar内网穿透2. 内网穿透2.1 创建隧道2.2 测试公网远程访问 3. 配置固定二级子域名3.1 保留二级子域名3.2 配置二级子域名 4. 使用固定二级子域名远程访问 前言 购入威联通NAS后,很多用户对于如何在外在公网环境下的远程访问威联通NAS…

【Python爬虫入门到精通】小白也能看懂的知识要点与学习路线

文章目录 1. 写在前面2. 爬虫行业情况3. 学习路线 【作者主页】:吴秋霖 【作者介绍】:Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作! 【作者推荐】:对JS逆向感兴趣的朋友可以关…

记一次 .NET某工控自动化系统 崩溃分析

一:背景 1. 讲故事 前些天微信上有位朋友找到我,说他的程序偶发崩溃,分析了个把星期也没找到问题,耗费了不少人力物力,让我能不能帮他看一下,给我申请了经费,哈哈,遇到这样的朋友就…

Python之数据可视化基础

目录 一 JSON数据格式转换 二 pyecharts模块 三 Pyecharts入门 四 数据可视化之疫情折线图 一 JSON数据格式转换 什么是JSON? JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它以易于阅读和编写的方式来表示结构化数据。JSO…

机器学习的精髓-梯度下降算法

目 1. 梯度下降算法2. 梯度下降求解3. 总结 1. 梯度下降算法 梯度下降算法是一种优化算法,用于最小化函数的数值方法。它通过沿着函数梯度的反方向来更新参数,以逐步减小函数值。这一过程重复进行直到达到收敛条件。梯度下降算法有多种变体,…

利用Maven获取jar包

我有一个习惯,就是程序不在线依赖网络的任何包。以前用C#时候虽然用Nuget找包,但是添加引用后又马上把Nuget引用删了,再把Nuget下载的dll拷贝到工程再引用dll。 这样做的好处是: 1.别人得到程序代码可以直接编译,不用…

《WebKit 技术内幕》学习之十四(2):调式机制

2 实践——基础和性能调试 Chromium开发者工具基本上沿用了Web Inspector的功能,所以这一节主要以该开发者工具作为介绍的对象,一起了解开发者工具提供的功能和一些基本的用法,有些用法其实在之前已经介绍过,这里可能为了系统性考…

数据类型(下)

数据类型(下) 1.集合(set)1.1 定义1.2 独有功能1.3 公共功能1.4 转换1.5 其他1.5.1 集合的存储原理1.5.2 元素必须可哈希1.5.3 查找速度特别快1.5.4 对比和嵌套 练习题 强插:None类型2.字典(dict)2.1 定义2…

银行数据仓库体系实践(6)--调度系统

调度系统是数据仓库的重要组成部分,也是每个银行或公司一个基础软件或服务,需要在全行或全公司层面进行规划,在全行层面统一调度工具和规范,由于数据类系统调度作业较多,交易类系统批量优先级高,为不互相影…

基于ssm+vue在线考试系统

摘要 在线考试系统是一种利用现代技术手段实现的教育评估工具,它为学生提供了更灵活、便捷的考试方式,同时为教育机构提供了高效管理和评估学生学业水平的手段。在这个背景下,基于SSM(SpringSpringMVCMyBatis)框架和Vu…

【OCC学习23】使用Draw探索OCC API 【完结】

对于OCC应用开发者来说,OCC的文档虽然不错,但针对具体的需求找到合适的API还是得不断摸索。我发现看Draw的代码是探索OCC API使用的最佳路径。掌握根据Draw命令查找对应代码就能高效找到解决方案。所以这是本系列的最后一篇分享了,个人感觉OC…

重塑网络安全格局:零信任安全架构的崛起与革新

零信任安全架构是一种现代安全模式,其设计原则是“绝不信任,始终验证”。它要求所有设备和用户,无论他们是在组织网络内部还是外部,都必须经过身份验证、授权和定期验证,才能被授予访问权限。简而言之,“零…

Dockerfile里ADD * 保留原来的目录结构

1、问题 给新模块写Dockerfile,很多静态资源分散在各个目录,于是Dockerfile里我直接一句: ADD ./* /dest/镜像出来后,启动容器,进入容器种后发现:文件拷贝成功,但原来的目录结构都不在了&…