一文带你全面了解Android 虚拟化框架(AVF)
探索Android虚拟化框架(AVF):为移动设备打造坚不可摧的盾牌
在这个数字化时代,移动设备的安全性变得尤为重要。随着个人和企业数据越来越多地在移动设备上处理和存储,保护这些设备免受恶意软件和攻击者的威胁成为了一个重要议题。Android虚拟化框架(AVF)正是为了应对这一挑战而生。今天,我们将深入探讨AVF如何通过其先进的安全模型,为移动设备提供坚不可摧的保护。
AVF安全模型概览
AVF提供了一个安全且私密的执行环境,用于执行代码。它适用于需要比传统Android应用沙盒更高安全保障的场景,甚至可以提供经过正式验证的隔离保证。
AVF的架构包括多个组件,如apexd、zipfuse、authfs、binder、crosvm、通用内核映像(GKI)、Hypervisor、Java API、Microdroid、Microdroid 管理器、原生API、pKVM、pVM 固件(pvmfw)和受保护的虚拟机(pVM)。
- apexd 和 zipfuse:安全地装载从主机导入的APEX和APK文件。
- authfs:一个融合文件系统,用于在Android和pVM之间安全地共享文件。
- binder:虚拟机间通信的主要方式。
- crosvm:一个用Rust编写的虚拟机监视器,负责分配虚拟机内存、创建虚拟CPU线程和实现虚拟设备的后端。
- 通用内核映像 (GKI):一个经过Google认证的启动映像,基于Android通用内核(ACK)构建。
- Hypervisor:AVF使用的虚拟化技术,也称为pKVM,即使主机Android或任何其他pVM遭到入侵,也能保持代码的完整性和pVM资源的机密性。
- Java API:VirtualizationService Java API,提供对AVF功能的访问。
- Microdroid:在pVM中运行的迷你版Android OS,提供更丰富的环境。
- Microdroid 管理器:管理pVM的生命周期和实例磁盘。
- 原生API:Android原生开发者套件(NDK)的子集。
- pKVM:基于内核的受保护虚拟机,由Hypervisor管理。
- pVM 固件 (pvmfw):在pVM上运行的第一个代码,负责验证载荷并推导每个虚拟机的Secret。
- 受保护的虚拟机 (pVM):一种与主Android操作系统并行运行的隔离执行环境,由pKVM管理。
目前,AVF仅支持ARM64设备,Google提供了实现AVF所需的所有组件的参考实现。与现有的可信执行环境(TEE)相比,pVM提供了一个更丰富的环境,并且可以动态使用。它还提供了一组标准API,供所有支持它的设备使用。
VirtualizationService是一个Android服务,负责管理pVM的生命周期。
AVF的设计重点在于安全性,提供了隔离的执行环境,以防止潜在的安全威胁。
综上所述,AVF是一个为Android设备提供的高级虚拟化框架,它通过创建隔离的执行环境来增强安全性和私密性,特别适合于需要高安全保障的应用场景。AVF的架构设计考虑了安全性、私密性和灵活性,使其成为Android平台上一个强大的工具。
深入Android虚拟化框架(AVF)架构
Android虚拟化框架(AVF)的架构设计是其提供强大安全保障的核心。这一架构不仅确保了虚拟机的隔离性,还为管理这些虚拟机提供了一套完整的机制。让我们进一步探索AVF的架构细节,了解它是如何构建这个安全的虚拟化环境的。
-
ARM架构和异常级别:
- ARM架构支持最多4个异常级别,EL0到EL3,其中EL0权限最小,EL3权限最大。
- Android主要在EL0运行,而Linux内核在EL1运行。
- Hypervisor运行在EL2,提供隔离环境。
-
Hypervisor:
- pKVM基于Linux KVM Hypervisor构建,扩展了对“受保护”客户机虚拟机的访问限制。
- KVM/arm64支持不同执行模式,取决于CPU的虚拟化主机扩展(VHE)的可用性。
- Hypervisor负责在多个EL1之间切换,并保护客户机的内存和资源。
-
pKVM供应商模块:
- 包含特定硬件专用的功能,如IOMMU驱动程序。
- 模块可移植到pKVM,需要EL2访问权限。
-
启动过程:
- 引导加载程序以EL2启动通用内核,然后内核权限下调至EL1。
- pKVM及其模块以EL2运行,并处理第2阶段页面表格。
-
CPU内存访问保护:
- 使用两阶段MMU进行地址转换和访问权限控制。
- Hypervisor使用第2阶段MMU控制内存访问。
-
直接内存访问(DMA)保护:
- 防止DMA设备访问客户机内存,需要IOMMU硬件支持。
- IOMMU硬件提供页面粒度的访问权限控制。
-
内存所有权:
- Hypervisor跟踪内存页面的所有权和共享状态。
- 客户机可以通过hypercall与主机共享或交还内存。
-
中断处理和计时器:
- KVM模型将所有虚拟中断管理委托给EL1的主机。
- 提供GICv3模拟,处理计时器和IPI。
-
客户机接口:
- 使用hypercall和内存访问与受保护的客户机通信。
- 提供了PSCI和TRNG等hypercall。
-
虚拟I/O设备(virtio):
- 使用Virtio标准实现半虚拟化设备。
- Virtio设备由VMM在主机用户空间中实现。
-
与TrustZone互动:
- 客户机无法直接与TrustZone互动,但主机可以向安全域发出SMC调用。
-
虚拟机监控器:
- crosvm作为VMM,通过KVM接口运行虚拟机,注重安全性。
-
pVM固件(pvmfw):
- pVM执行的第一个代码,负责引导安全启动并派生pVM的唯一密钥。
- 存储在刷写分区中,并通过OTA更新。
-
设备启动和pVM启动:
- 添加了设备启动过程中的步骤,包括加载和验证pvmfw。
- Hypervisor将控制权移交给pvmfw,然后分支到载荷的入口点。
Microdroid的安全特性
Microdroid是专为pVM设计的迷你版Android操作系统,它提供了一个精简而强大的环境,用于运行那些需要更高安全保障的应用程序。Microdroid的核心在于其安全性,它通过一系列精心设计的安全措施来保护运行在pVM中的应用程序。
Microdroid的安全性体现在以下几个方面:
-
启动验证:Microdroid在启动时会进行严格的验证,确保只有经过验证的系统映像才能启动。这一过程涉及到对
boot.img
、super.img
、vbmeta.img
等关键分区的验证,确保它们没有被篡改。 -
应用安全:Microdroid不会启动任何未经验证的APK。它通过检查APK的签名来确保应用的安全性,防止恶意软件的运行。
-
数据完整性:Microdroid确保了系统数据的完整性。任何对
instance.img
的未授权修改都会导致系统无法启动,或者在启动时处于一个干净的初始状态。 -
加密存储:Microdroid支持加密存储,保护写入到存储卷的数据不被未授权访问。虽然在加密块粒度级别不提供回滚保护,但任何对数据块的篡改都会导致数据对Microdroid不可读。
-
DICE证书链:Microdroid使用DICE证书链和复合设备标识符(CDI)来确保每个pVM实例的唯一性和安全性。这些证书和标识符只能由特定的实例衍生,为每个pVM提供了一个独特的安全身份。
Microdroid的设计哲学是“安全优先”,它通过简化的操作系统环境减少了潜在的攻击面,同时提供了必要的Android系统服务和API,使得开发者可以更容易地将应用迁移到这个安全的执行环境中。这种设计不仅提高了应用程序的安全性,也为整个Android生态系统的安全做出了贡献。随着移动设备在现代社会中扮演的角色越来越重要,Microdroid及其背后的安全机制将成为保护用户数据和隐私的关键。
VirtualizationService
它负责管理在Android系统上运行的多个客户机虚拟机(无论是否受保护)的crosvm实例。
提供了一个公开的AIDL API,允许系统服务或应用启动、监控和停止虚拟机。
虚拟机生命周期
- 虚拟机的生命周期由
IVirtualMachine
对象的引用跟踪。 - 如果所有
IVirtualMachine
对象的引用都被丢弃,VirtualizationService
将自动停止虚拟机。 - 每个虚拟机由自己的crosvm实例管理,
VirtualizationService
代表客户端管理这些实例。
虚拟机打包
- crosvm支持通过提供内核和initrd或引导加载程序来启动虚拟机。
- 支持添加任意数量的磁盘映像,可以是原始映像或分区组合。
VirtualizationService
按需构建复合磁盘映像,以确保crosvm可以访问分区映像文件。
虚拟机套接字(vsock)
- pVM之间的通信主要通过vsock进行,它是一个标准的Virtio套接字接口。
- 每个虚拟机由一个唯一的32位上下文标识符(CID)标识。
- CID在虚拟机运行时唯一,但可以在虚拟机终止后被回收。
调试界面
- 提供了
vm
命令,允许开发者从shell启动、查看日志和终止虚拟机。 - 虚拟机可以在可调试(FULL)或不可调试(NONE)模式下启动。
- 可调试的虚拟机允许查看操作系统级日志、访问adb shell,以及捕获崩溃转储或应用载荷。
VirtualizationService
的设计旨在为Android上的虚拟机提供全面的生命周期管理,同时为开发者提供灵活的调试选项。通过这个服务,应用和服务能够有效地与虚拟机交互,无论是在开发、测试还是生产环境中。
AVF安全要点
-
分层安全方法:
- AVF采用分层安全方法,每一层都提供额外的强制执行功能,以防止在pVM中运行任意载荷。
-
安全层:
- Android系统:确保只有具有pVM权限的应用才能创建或检查pVM。
- 引导加载程序:确保只有由Google或设备供应商签名的pVM映像才能启动。
- pVM:为运行在pVM中的载荷提供纵深防御,例如使用SELinux,防止数据映射为可执行文件,并确保W^X适用于所有类型的文件。
-
安全模型:
- 包括机密性、完整性和可用性(CIA),旨在提供信息安全政策指南。
-
机密性和完整性:
- 机密性源自pKVM Hypervisor强制执行的内存隔离属性。
- 完整性适用于内存和计算中的数据,确保pVM无法未经同意修改彼此的内存或影响CPU状态。
-
Hypervisor:
- pKVM基于KVM Hypervisor,用于将pVM和Android隔离到互不信任的执行环境中。
-
客户机OS:
- Microdroid作为在pVM中运行的OS示例,由引导加载程序、GKI、Android用户空间和载荷启动器组成。
-
Android主机:
- 维护客户机pVM无法与其他pVM直接交互的属性,只有主机pVM中的
VirtualizationService
才能建立与另一pVM的通信通道。
- 维护客户机pVM无法与其他pVM直接交互的属性,只有主机pVM中的
-
可用性:
- 指主机为客户机分配足够的资源以执行其任务。pKVM将工作负载调度工作委托给主机内核。
-
安全启动:
- 确保对实例数据的访问可控制,通过随机生成秘密信息盐和提取加载映像中的详细信息来验证pVM实例的后续启动。
-
已解锁的设备:
- 使用
fastboot oem unlock
解锁设备时,会擦除用户数据和pVM的专用数据,使得已解锁设备上的pKVM不可信。
- 使用
这些要点概述了AVF如何通过多层次的安全措施来保护虚拟机的机密性、完整性和可用性,以及如何通过安全启动和设备锁定状态管理来增强安全性。
AVF应用场景
Android虚拟化框架(AVF)的应用场景广泛,它可以为多种用例提供安全、隔离的执行环境。以下是一些主要的应用场景:
-
应用隔离:
- 在需要隔离敏感应用或多用户环境中,AVF可以用来隔离运行特定应用的实例,以保护用户数据和提高安全性。
-
多用户环境:
- 在共享设备或企业环境中,AVF可以为不同的用户或用户组创建隔离的虚拟环境,确保数据隔离和安全性。
-
安全支付处理:
- 对于需要处理敏感支付信息的应用,AVF可以提供一个安全的执行环境,减少恶意软件和攻击者窃取数据的风险。
-
企业安全:
- 企业可以使用AVF来隔离工作和个人数据,或者为特定的企业应用创建安全的执行环境。
-
开发和测试:
- 开发者可以利用AVF进行应用的测试和调试,无需担心影响设备上其他应用或系统的正常运行。
-
教育用途:
- 在教育领域,AVF可以为学生提供隔离的学习环境,同时允许教师监控和控制学生的学习进度。
-
安全研究和逆向工程:
- 安全研究人员可以使用AVF来隔离和分析恶意软件,避免对主系统造成损害。
-
游戏和多媒体内容:
- 对于需要高安全性的版权保护游戏和多媒体内容,AVF可以提供一个受控的执行环境,防止盗版和非法分发。
-
物联网(IoT)设备管理:
- 在IoT场景中,AVF可以用于隔离运行在设备上的不同服务和应用,提高设备的整体安全性。
-
车载系统(IVI):
- 在车载信息娱乐系统中,AVF可以用于隔离不同的系统组件,如导航、娱乐和车辆控制,以确保关键系统的安全性。
-
远程桌面和虚拟工作站:
- AVF可以用于提供远程桌面服务或虚拟工作站,使用户能够安全地访问企业资源。
-
应急响应和数字取证:
- 在应急响应和数字取证中,AVF可以用于隔离可疑的文件和系统,进行安全分析。
-
合规性和审计:
- 对于需要满足特定合规性要求的应用,AVF可以提供一个受控的环境,以便于审计和合规性检查。
-
云服务和服务器虚拟化:
- 虽然AVF主要用于移动设备,但其核心虚拟化技术也可以应用于服务器和云服务,提供隔离的虚拟环境。
AVF通过提供一个灵活、安全的虚拟化解决方案,满足了现代移动设备对于安全性和隔离性的多样化需求。随着技术的发展,AVF的应用场景将继续扩展,为更多领域提供支持。
10. 结语
AVF的安全特性为移动设备提供了强大的保护。通过其分层安全方法、机密性、完整性和可用性的维护,以及Hypervisor和客户机OS的安全特性,AVF确保了移动设备在面对日益复杂的威胁时,能够保持安全和可靠。随着技术的不断进步,我们期待AVF能够继续为移动设备的安全性提供更多的创新和改进。
这篇文章是一个技术博客,旨在向读者介绍Android虚拟化框架(AVF)的安全特性。文章通过生动具体的语言,详细解释了AVF如何通过其分层安全方法保护移动设备免受攻击。希望这篇文章能够帮助读者更好地理解AVF的重要性和其在移动安全领域的作用。