Android Safety 系列专题【篇七:Android AVF机制】

如上邮件,google要求所有A15以上的设备都必须支持AVF,并且AOSP在A15的分区表中新增了pvmfw,并且在XTS中引入了对AVF的一些列兼容性测试。

因此本篇就是关于这一政策引起的几个问题进行解读。

一、AVF概念理解

1、什么是AVF?

|---------------------|-------------------------------------------------------------------------------------------|
| AVF | Android Virtualization Framework,Android虚拟化框架,Android 13引入的系统级框架,允许在Android设备上创建和运行隔离的虚拟机 |
| Virtual Machine | 虚拟机,通过软件模拟的完整计算机系统,拥有独立的操作系统和资源 |
| Hypervisor | 虚拟机管理器,负责创建、管理和调度虚拟机的软件层 |
| Protected VM | 受保护虚拟机,内存被硬件隔离,宿主系统无法访问,用于安全敏感场景 |
| Microdroid | AVF提供的轻量级Android虚拟机镜像,专为虚拟化场景优化 |

AVF全称Android Virtualization Framework,翻译过来就是Android虚拟化框架。那么google为什么要推行AVF呢?

  • 在引进AVF之前:
  • 在引进AVF之后:

AVF就是如上接受保护的Protected VM,因为AVF具有隔离环境的作用,因此当即使android是root的,至少VM也是安全的。

Protected VM依赖多层硬件机制实现隔离,相比传统式Non-protected VM有如下优势:

|----------|-----------------|--------------|
| 内存隔离 | 软件隔离(Stage-2页表) | 硬件隔离 + 加密 |
| Host可访问性 | ⚠️ 可以访问 | ✅ 无法访问 |
| 安全级别 | 功能隔离级别 | 安全隔离级别 |
| 性能开销 | 较低 | 较高 |
| 用途 | 兼容性测试、功能隔离 | 密钥管理、支付处理 |
| 硬件要求 | KVM即可 | 需要TEE/内存加密支持 |

2、AVF技术架构

AVF技术还是非常复杂的,设计到上下底层,这里就提供一张AI画的图:

整个架构设计到如下模块:

  • 系统Feature声明

android.software.virtualization.framework

android.hardware.virtualization.vcpu

android.hardware.virtualization.protected_vm

  • HAL接口 (AIDL)
java 复制代码
│  │  ┌─────────────────────────────────────────────────┐    │   │
│  │  │  hardware/interfaces/virtualization/             │    │   │
│  │  │  ├── IVirtualizationService.aidl                │    │   │
│  │  │  ├── IVirtualMachine.aidl                       │    │   │
│  │  │  ├── IGlobalVmCallback.aidl                     │    │   │
│  │  │  └── types.aidl (Capability枚举)                │    │   │
│  │  └─────────────────────────────────────────────────┘    │   │
  • 框架API
java 复制代码
│  │  ┌─────────────────────────────────────────────────┐    │   │
│  │  │  android.os.VirtualizationManager               │    │   │
│  │  │  • createVirtualMachine()                       │    │   │
│  │  │  • getVirtualMachine()                          │    │   │
│  │  │  • getSupportedCapabilities()                   │    │   │
│  │  │                                                 │    │   │
│  │  │  android.system.virtualmachine.VirtualMachine   │    │   │
│  │  │  • start() / stop()                             │    │   │
│  │  │  • connect()                                    │    │   │
│  │  └─────────────────────────────────────────────────┘    │   │
  • Microdroid镜像
java 复制代码
│  │  ┌─────────────────────────────────────────────────┐    │   │
│  │  │  /apex/com.android.virt/bin/microdroid          │    │   │
│  │  │  ├── microdroid.img (系统镜像)                  │    │   │
│  │  │  ├── microdroid_kernel (内核镜像)               │    │   │
│  │  │  └── microdroid_initrd.img (initrd)             │    │   │
│  │  └─────────────────────────────────────────────────┘    │   │
  • 内核配置

CONFIG_KVM=y

CONFIG_KVM_ARM_HOST=y

CONFIG_VIRTUALIZATION=y

CONFIG_VHOST_VSOCK=y

  • 设备节点
java 复制代码
│  │  ┌─────────────────────────────────────────────────┐    │   │
│  │  │  /dev/kvm          (KVM方案)                    │    │   │
│  │  │  /dev/gunyah       (Gunyah方案)                 │    │   │
│  │  │  /dev/vhost-vsock  (VM通信)                     │    │   │
│  │  └─────────────────────────────────────────────────┘    │   │

3、AVF技术总结

  • 定义:Android Virtualization Framework , Android官方虚拟化框架,让Android能创建和管理隔离虚拟机的系统级解决方案。
  • 核心价值:硬件级安全隔离 → 即使Android被攻破,敏感数据仍安全 ; 独立执行环境 → 敏感操作在隔离VM中完成 ; 统一API → 开发者无需关心底层Hypervisor差异 。
  • 技术栈: 应用API → Framework → HAL → Kernel → Hypervisor → Hardware
  • 必要条件: CPU支持虚拟化扩展(ARMv8-A EL2); 内核启用KVM/Gunyah ;实现IVirtualizationService HAL ;系统Feature声明

二、XTS案例

1、MicrodroidTestApp.VTS

问题链接:https://jira.tinno.com/browse/PAAM-1344

失败日志:arm64-v8a MicrodroidTestApp.VTS com.android.microdroid.test.MicrodroidCapabilitiesTest#avfIsRequired fail
Device doesn't support AVF

用例分析:根据关键日志Device doesn't support AVF搜索如下代码

如上代码逻辑,如果ro.board.api_level小于202404,就不需要测试这一条,跳过下一步测试,此条PASS

如果大于202404,且没有配置FEATURE_VIRTUALIZATION_FRAMEWORK就直接报Device doesnt support AVF。因此此问题原因是我们没有配置如下feature:

在packages/modules/Virtualization/build/apex/product_packages.mk文件中有如下配置:

XML 复制代码
<permissions>
       <feature name="android.software.virtualization_framework" />
</permissions>

2、MicrodroidTestApp.CTS

问题链接:https://jira.tinno.com/browse/PAAM-1817

失败日志:arm64-v8a MicrodroidTestApp.CTS com.android.microdroid.test.MicrodroidCapabilitiesTest#supportForProtectedOrNonProtectedVms fail
A device that has FEATURE_VIRTUALIZATION_FRAMEWORK must support at least one of protected or non-protected VMs

测试用例:

根据报告日志可以看出来这里的getVirtualMachineManager().getCapabilities()获取出来的结果是0,表示都不支持

如上流程逻辑链表示当前基线根本就不支持AVF。因此最后此题需要提case到高通,因为这个芯片可能就不支持,我们是升级项目,因此最后向google申请豁免。

解决方案:最后意外之喜,正好遇上高通基线升级,升级patch有如下修改

  • 声明android.software.virtualization_framework特征能力
  • 配置hypervisor支持protected VM能力

3、Google pvmfw.img

报错日志:

解决方案:如上两个问题最后解决方式在测试之前"fastboot flash pvmfw pvmfw.img"替换pvmfw镜像,由此证明此项还和pvmfw分区有关系

相关推荐
Fᴏʀ ʏ꯭ᴏ꯭ᴜ꯭.2 小时前
MySQL 主从架构中的使用技巧及优化
android·mysql·架构
羊小蜜.2 小时前
Mysql 11: 存储过程全解——从创建到使用
android·数据库·mysql·存储过程
zh_xuan2 小时前
Android compose和传统view混用
android
大黄说说2 小时前
MySQL索引失效的常见场景有哪些?如何通过EXPLAIN分析查询性能?
android·adb
冰糖葫芦三剑客2 小时前
华为 Android APP 应用内生成合成内容的文件元数据中添加隐式标识的截图 开发要怎么生成?
android·华为
羊小蜜.2 小时前
Mysql 12: 视图全解——从创建到使用
android·数据库·mysql·视图
zh_xuan4 小时前
Android 传统view嵌入compose
android
ZHANG13HAO6 小时前
Android 13 AOSP 内置 NekoTTS 中文免费商用 TTS 完整流程
android
许杰小刀11 小时前
ctfshow-web文件包含(web78-web86)
android·前端·android studio