虚拟化环境中的精简版 Android 操作系统 Microdroid

随着移动设备的普及和应用场景的多样化,安全性和隐私保护成为了移动操作系统的重要课题。Google推出的Microdroid,是一个专为虚拟化环境设计的精简版Android操作系统,旨在提供一个安全、隔离的执行环境。本文将详细介绍Microdroid的架构、功能、使用方法及其目标。

Microdroid项目介绍

Microdroid是一个极简版的Android操作系统,专为在受保护的虚拟机(pVM)中运行而设计。它基于Android的源代码构建,但去除了系统服务器、硬件抽象层(HAL)、图形用户界面(GUI)等组件,仅保留了必要的核心功能。Microdroid的目标是为需要高安全性和隔离性的应用提供一个轻量级的运行环境。

在Android虚拟化框架(AVF)中,pVM(Protected Virtual Machine,受保护的虚拟机)是一个关键概念。pVM是一种虚拟机,它在硬件和软件层面上提供了更高的安全性和隔离性,确保在虚拟机中运行的应用程序和数据不会受到外部环境的干扰或攻击。
pVM,即Protected Virtual Machine,是一种受保护的虚拟机,旨在提供一个高度隔离和安全的运行环境。与传统的虚拟机不同,pVM通过硬件支持的虚拟化技术(如ARM的TrustZone或Intel的SGX)以及软件层面的安全措施,确保虚拟机内的应用程序和数据的完整性和保密性。

功能特色

  1. 精简设计
    Microdroid去除了大部分不必要的组件,仅保留核心功能,使其在资源消耗和启动时间上具有显著优势。

  2. 高安全性
    通过在pVM中运行,Microdroid提供了一个高度隔离的环境,确保应用程序和数据的安全性和完整性。

  3. 支持NDK API
    Microdroid支持部分NDK API,包括用于实现libc和Bionic的所有API,方便开发者进行原生代码开发。

  4. 调试功能
    提供了adb、logcat、tombstone和gdb等调试工具,方便开发者进行调试和问题排查。

  5. 启动时验证和SELinux
    Microdroid在启动时进行验证,并使用SELinux进行安全策略管理,进一步提升系统安全性。

  6. Binder RPC支持
    通过vsock支持Binder RPC,实现主机与pVM之间的高效通信。

不支持的功能

  • android.\* 文件包中的 Android Java API,java.\* 文件包中的 Core Java API 属于支持的功能,但需要在虚拟机中激活 ART APEX。
  • SystemServer 和 Zygote
  • 图形/界面
  • HAL

Microdroid架构

Microdroid的架构与Cuttlefish类似,包含以下分区映像,这些映像在一个复合磁盘映像中进行了分组:

  • bootloader:验证并启动内核。
  • boot.img:包含内核和init ramdisk。
  • vendor_boot.img:包含虚拟机专用的内核模块,例如virtio。
  • super.img:包含系统和供应商逻辑分区。
  • vbmeta.img:包含经过验证的启动元数据。

这些分区映像整合在一个虚拟化APEX中,并通过VirtualizationService打包成一个复合磁盘映像。此外,VirtualizationService还负责创建以下分区:

  • payload:由Android的APEX和APK支持的分区。
  • instance:用于按实例持久保留启动时验证数据的加密分区。

启动序列

Microdroid 启动序列在设备启动后触发。关于设备启动的具体内容,在架构文档的 pVM 固件部分中有详细的讨论。图 1 显示了 Microdroid 启动序列过程中的具体步骤:
在这里插入图片描述

以下是对这些步骤的说明:

  1. crosvm 将引导加载程序加载到内存,pvmfw 开始执行。在跳转到引导加载程序之前,pvmfw 会执行两项任务:

    • 验证引导加载程序,检查其是否来自可信来源(Google 或 OEM)。
    • 确保同一 pVM 在使用同一实例映像进行多次启动的过程中,会始终如一地使用相同的引导加载程序。具体而言,pVM 最初会使用空白的实例映像进行启动。pvmfw 会存储该实例映像中的引导加载程序的身份信息,并对其进行加密。当 pVM 下次使用同一实例映像启动时,pvmfw 会解密已保存的该实例映像的身份信息,并验证当前的身份信息是否与先前保存的信息完全相同。如果身份信息不同,pvmfw 将拒绝启动。

    引导加载程序启动 Microdroid。

  2. 引导加载程序访问实例磁盘。与 pvmfw 类似,引导加载程序会在一个实例磁盘中存储同一实例上次启动时使用的分区映像的相关信息,包括公钥信息。

  3. 引导加载程序验证 vbmeta 和链式分区(例如 bootsuper)。如果验证成功,则会推导出下一阶段的 pVM Secret。然后,Microdroid 会将控制权移交给内核。

  4. 由于引导加载程序已经在第 3 步验证了 super 分区,所以内核会无条件地安装 super 分区。与完整版 Android 一样,super 分区包含了多个通过 dm-verity 安装的逻辑分区。随后,控制权将移交给 init 进程,该进程会启动各种原生服务。init.rc 脚本也与完整版 Android 中的十分相似,只不过针对 Microdroid 的需求进行了一些调整。

  5. init 进程启动 Microdroid 管理器,该管理器会访问实例映像。Microdroid 管理器服务使用前一阶段传递的密钥解密映像,并读取该 pVM 信任的客户端 APK 和 APEX 的公钥及回滚计数器信息。这些信息稍后会在安装客户端 APK 和请求的 APEX 时,分别用于 zipfuseapexd

  6. Microdroid 管理器服务启动 apexd

  7. apexd/apex/<name> 目录下安装 APEX。在 APEX 的安装方式上,Android 与 Microdroid 只有一个差别:在 Microdroid 中,APEX 文件来自虚拟块设备(例如 /dev/vdc1),而非来自常规文件 (/system/apex/*.apex)。

  8. zipfuse 是 Microdroid 的 FUSE 文件系统。zipfuse 会将客户端 APK(基本上是一个 Zip 文件)作为文件系统进行安装。在底层,pVM 会将 APK 文件作为一个虚拟块设备通过 dm-verity 进行传递,就像 APEX 一样。APK 中包含一个配置文件,其中包括了应用开发者针对该 pVM 实例请求的 APEX 的列表。在激活 APEX 时,该列表会被 apexd 使用。

  9. 启动流程返回到 Microdroid 管理器服务。然后,管理器服务会使用 Binder RPC 与 Android 的 VirtualizationService 进行通信,以便能够报告崩溃或关闭等重要事件,并接受诸如终止 pVM 之类的请求。管理器服务还会从 APK 的配置文件中读取主二进制文件的位置,并加以执行。

文件交换 (AuthFS)

Android 组件使用文件进行输入、输出和状态记录,并将这些文件作为由 Android 内核控制访问的文件描述符(AIDL 中的 ParcelFileDescriptor 类型)进行传递,是十分常见的。AuthFS 就提供了这样的功能,以便能够跨 pVM 边界在互不信任的端点之间交换文件。

基本而言,AuthFS 是一个远程文件系统,它会对每次访问操作进行透明的完整性检查,类似于 fs-verity。这些检查使前端(例如 pVM 中运行的文件读取程序)能够检测不受信任的后端(通常为 Android)是否包含经过篡改的文件内容。

要进行文件交换,后端 (fd\_server) 会在通信开始时提供每个文件的配置,以表明它是输入(只读)还是输出(读写)。如果是输入,前端会强制要求相关内容与 Merkle 树顶层的已知哈希完全匹配,以实现访问时验证。如果是输出,AuthFS 会在内部将相关内容的哈希树保存为写入操作的观察结果,并在回读数据时强制执行完整性检查。

目前,底层传输是基于 Binder RPC 进行的。但是为了优化性能,此机制今后可能会有所变化。

密钥管理

pVM 具有一个稳定的密封密钥和一个认证密钥,前者非常适合用于受保护的持久性数据,后者非常适合用于生成由 pVM 验证生成的签名。

Binder RPC

大多数 Android 接口都用 AIDL 表示,而 AIDL 是基于 Binder Linux 内核驱动程序构建的。为了在 pVM 之间提供接口支持,Binder 协议经过重写,以便能够通过套接字使用(对于 pVM,该套接字为 vsock)。通过这种方式,Android 现有的 AIDL 接口就能在 pVM 这个新环境中使用。

要设置连接,终端(例如 pVM 载荷)需要创建一个 RpcServer 对象、注册一个 root 对象,并进入监听新连接的状态。要连接到该服务器,客户端需要使用 RpcSession 对象并获取 Binder 对象,然后像在 Binder 内核驱动程序中使用 Binder 对象一样使用该对象。

Microdroid的目标

Microdroid的主要目标是提供一个安全、隔离的运行环境,以比常规Android环境更高的机密性和完整性运行应用的某一部分。

  • Microdroid的目标之一是支持在各种设备上运行,类似于云游戏串流的方式,用户可以在云端运行应用,并将其串流到本地设备上使用。
  • Microdroid利用Linux KVM(Kernel-based Virtual Machine)虚拟化技术,可以在虚拟机中运行,提供高效的虚拟化支持,使得Microdroid可以在不同的硬件平台上运行。

通过在pVM中运行,Microdroid能够有效地隔离应用程序和数据,防止数据泄露和未授权访问。

总结

Microdroid作为一个精简版的Android操作系统,通过在受保护的虚拟机(pVM)中运行,为需要高安全性和隔离性的应用提供了一个轻量级的运行环境。通过本文的介绍和示例代码,希望能够帮助开发者更好地理解和使用Microdroid,开发出更加安全和稳定的应用程序。

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

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

相关文章

【Docker系列】指定系统平台拉取 openjdk:8 镜像

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

(七)Python运算符和优先级

一、算数运算符 算数运算符&#xff0c;如下表所示&#xff1a; x1 y2 z3 # 加法运算 axy print(a,a) # 减法运算 by-x print(b,b) # 乘法运算 cy*z print(c,c) # 除法运算 dz/y print(d,d) # 取模运算 ez%y print(e,e) # 幂运算 fy**z print(f,f) 输出结果&#xff1a; 二…

Linux中使用NGINX

NGINX简介 Nginx&#xff08;engine x&#xff09;是俄罗斯人编写的十分轻量级的HTTP服务器是一个高性能的HTTP和反向代理服务器&#xff0c;同时也是一个IMAP/POP3/SMTP代理服务器官方网站&#xff1a;http://nginx.org/ NGINX概述 Nginx默认配置文件&#xff1a;/etc/ngin…

数据结构之线段树

线段树 线段树&#xff08;Segment Tree&#xff09;是一种高效的数据结构&#xff0c;广泛应用于计算机科学和算法中&#xff0c;特别是在处理区间查询和更新问题时表现出色。以下是对线段树的详细解释&#xff1a; 一、基本概念 线段树是一种二叉搜索树&#xff0c;是算法竞…

【C++】继承的理解

1.继承的概念和定义 1.1继承的概念 继承 (inheritance) 机制是面向对象程序设计 使代码可以复用 的最重要的手段&#xff0c;它允许程序员在 保 持原有类特性的基础上进行扩展 &#xff0c;增加功能&#xff0c;这样产生新的类&#xff0c;称派生类。继承 呈现了面向对象 程序…

C++ 详细讲解 洛谷P1428 小鱼比可爱

&#xff08;其实这道题难度不高&#xff0c;但是博主正在适应c语言加上这道题目太可爱了所以忍不住发发~&#xff09; 目录 1.题目要求 2.题目解读 3.代码实现 1.题目要求 2.题目解读 这道题需要使用c中的容器储存小鱼的可爱程度和不如自己可爱的小鱼的数目&#xff0c;…

Android亮屏Job的功耗优化方案

摘要: Job运行时会带来持锁的现象,目前灭屏放电Job的锁托管已经有doze和绿盟标准监管,但是亮屏时仍旧存在过长的持锁现象,故为了优化功耗和不影响用户体验下,新增亮屏放电下如果满足冻结和已运行过一次Job,则进行job限制,当非冻结时恢复的策略 1.现象: (gms_schedu…

Spring1(初始Spring 解耦实现 SpringIOC SpringDI Spring常见面试题)

Spring1 创建项目集成maven创建一个Maven项目实现&#xff1a; 初识SpringSpring简介Spring的发展历史Spring之父体系结构生态系统官方文档解耦实现JDBCSpringBoot整合MyBatis和lombok&#xff0c;开启驼峰映射三层思想 SpringIOC实现 SpringDIset注入全部代码&#xff1a;实现…

服务器新建用户

文章目录 前言一、步骤二、问题三、赋予管理员权限总结 前言 环境&#xff1a; 一、步骤 创建用户需要管理员权限sudo sudo useradd tang为用户设置密码 sudo passwd tang设置密码后&#xff0c;可以尝试使用 su 切换到 tang 用户&#xff0c;确保该用户可以正常使用&#…

leetcode-88-合并两个有序数组

题解&#xff1a; 解法一&#xff1a;从后向前同时遍历两个数组&#xff0c;因为nums1后面是0&#xff0c;从后遍历节省空间。 1、定义三个指针&#xff0c;分别为&#xff1a;len1m-1指向nums1的最后一个非0数字&#xff1b;len2n-1指向nums2的最后一个数字&#xff1b;len3…

操作系统(10) (并发(2)------基于软件/硬件/操作系统层面解决两个进程之间的临界区问题/抢占式/非抢占式内核)

目录 1. 基于软件层面(Petersons Solution) Petersons Solution 满足三个要求: 好处: 缺点 2. 基于硬件层面 1. Disabling Interrupts (禁用中断) 概念解释&#xff1a; 代码框架&#xff1a; 要求&#xff1a; 禁用中断的好处与问题&#xff1a; 2. Test and Set Lock (…

Java | Leetcode Java题解之第526题优美的排列

题目&#xff1a; 题解&#xff1a; class Solution {public int countArrangement(int n) {int[] f new int[1 << n];f[0] 1;for (int mask 1; mask < (1 << n); mask) {int num Integer.bitCount(mask);for (int i 0; i < n; i) {if ((mask & (1…

2024年大厂AI大模型面试题精选与答案解析

前言 随着AI市场&#xff0c;人工智能的爆火&#xff0c;在接下来的金九银十招聘高峰期&#xff0c;各大科技巨头和国有企业将会对AGI人才的争夺展开一场大战&#xff0c;为求职市场注入了新的活力。 为了助力求职者在面试中展现最佳状态&#xff0c;深入理解行业巨头的选拔标…

智能网联汽车:人工智能与汽车行业的深度融合

内容概要 在这个快速发展的时代&#xff0c;智能网联汽车已经不再是科幻电影的专利&#xff0c;它正在悄然走进我们的日常生活。如今&#xff0c;人工智能&#xff08;AI&#xff09;技术与汽车行业的结合犹如一场科技盛宴&#xff0c;让我们看到了未来出行的新方向。通过自动…

AI大模型重塑软件开发:从代码自动生成到智能测试

随着AI技术的不断发展&#xff0c;AI大模型在软件开发领域的应用日益广泛。从代码自动生成到智能测试&#xff0c;AI大模型正在深刻改变着软件开发的各个环节&#xff0c;重塑着整个开发流程。本文将探讨AI大模型的定义、应用场景、优势以及挑战&#xff0c;并展望未来的发展趋…

【基础】os模块

前言 1、os是operation system&#xff08;操作系统&#xff09;的缩写&#xff1b;os模块就是python对操作系统操作接口的封装。os模块提供了多数操作系统的功能接口函数。&#xff08;OS模块提供了与操作系统进行交互的函数&#xff09; 2、操作系统属于Python的标准实用程…

算法学习027 c++蛇形三角形填充 二维数组常规应用 中小学算法思维学习 比赛算法题解 信奥算法解析

目录 C蛇形三角形填充 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、运行结果 五、考点分析 六、推荐资料 C蛇形三角形填充 一、题目要求 1、编程实现 输入一个正整数N&#xff0c;输出N行的蛇形数字三角形&#xff08;见输出样例&#xf…

[vulnhub]DC: 1

https://www.vulnhub.com/entry/dc-1,292/ 主机发现端口扫描 使用nmap扫描网段类存活主机 因为靶机是我最后添加的&#xff0c;所以靶机IP是156 nmap -sP 192.168.75.0/24 // Starting Nmap 7.93 ( https://nmap.org ) at 2024-09-28 12:48 CST Nmap scan rep…

PyQt5的安装与简介

目录 一、介绍 二、PyQt5的安装 1、安装PyQt5 2、安装Qt的工具包 三、配置Qt工具 1、配置Designer &#xff08;1)、打开pycharm&#xff0c;找到设置选项 &#xff08;2&#xff09;、找到工具-->外部工具 &#xff08;3&#xff09;、点击号&#xff0c;创建外部工…

「Qt Widget中文示例指南」如何实现窗口嵌入?

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写&#xff0c;所有平台无差别运行&#xff0c;更提供了几乎所有开发过程中需要用到的工具。如今&#xff0c;Qt已被运用于超过70个行业、数千家企业&#xff0c;支持数百万设备及应用。 本文中的示例主要演…