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分区有关系

相关推荐
千里马学框架1 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台1 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone1 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc1 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo1 天前
Kotlin 协程中的 Job 结构化并发与取消
android
sun0077001 天前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
其实防守也摸鱼2 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
AFinalStone2 天前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui
JMchen2 天前
属性动画原理与高级动画实现
android·kotlin·canvas
AFinalStone2 天前
Android7 SystemUI 源码解析(二)启动流程深度解析
android·systemui