探索Android虚拟化框架(AVF):为移动设备打造坚不可摧的盾牌

科技   2024-10-30 15:44   浙江  

探索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平台上一个强大的工具。

    AVF 应用加载和通信

深入Android虚拟化框架(AVF)架构

Android虚拟化框架(AVF)的架构设计是其提供强大安全保障的核心。这一架构不仅确保了虚拟机的隔离性,还为管理这些虚拟机提供了一套完整的机制。让我们进一步探索AVF的架构细节,了解它是如何构建这个安全的虚拟化环境的。

  1. 1. ARM架构和异常级别

  • • ARM架构支持最多4个异常级别,EL0到EL3,其中EL0权限最小,EL3权限最大。

  • • Android主要在EL0运行,而Linux内核在EL1运行。

  • • Hypervisor运行在EL2,提供隔离环境。

    pKVM 启动过程
  • 2. Hypervisor

    • • pKVM基于Linux KVM Hypervisor构建,扩展了对“受保护”客户机虚拟机的访问限制。

    • • KVM/arm64支持不同执行模式,取决于CPU的虚拟化主机扩展(VHE)的可用性。

    • • Hypervisor负责在多个EL1之间切换,并保护客户机的内存和资源。

  • 3. pKVM供应商模块

    • • 包含特定硬件专用的功能,如IOMMU驱动程序。

    • • 模块可移植到pKVM,需要EL2访问权限。

    CPU 内存访问保护
    1. 1. 启动过程

    • • 引导加载程序以EL2启动通用内核,然后内核权限下调至EL1。

    • • pKVM及其模块以EL2运行,并处理第2阶段页面表格。

  • 2. CPU内存访问保护

    • • 使用两阶段MMU进行地址转换和访问权限控制。

    • • Hypervisor使用第2阶段MMU控制内存访问。

  • 3. 直接内存访问(DMA)保护

    • • 防止DMA设备访问客户机内存,需要IOMMU硬件支持。

    • • IOMMU硬件提供页面粒度的访问权限控制。

      DMA 内存访问保护
  • 4. 内存所有权

    • • Hypervisor跟踪内存页面的所有权和共享状态。

    • • 客户机可以通过hypercall与主机共享或交还内存。

  • 5. 中断处理和计时器

    • • KVM模型将所有虚拟中断管理委托给EL1的主机。

    • • 提供GICv3模拟,处理计时器和IPI。

  • 6. 客户机接口

    • • 使用hypercall和内存访问与受保护的客户机通信。

    • • 提供了PSCI和TRNG等hypercall。

  • 7. 虚拟I/O设备(virtio)

    • • 使用Virtio标准实现半虚拟化设备。

    • • Virtio设备由VMM在主机用户空间中实现。

  • 8. 与TrustZone互动

    • • 客户机无法直接与TrustZone互动,但主机可以向安全域发出SMC调用。

  • 9. 虚拟机监控器

    • • crosvm作为VMM,通过KVM接口运行虚拟机,注重安全性。

  • 10. pVM固件(pvmfw)

    • • pVM执行的第一个代码,负责引导安全启动并派生pVM的唯一密钥。

    • • 存储在刷写分区中,并通过OTA更新。

  • 11. 设备启动和pVM启动

    • • 添加了设备启动过程中的步骤,包括加载和验证pvmfw。

    • • Hypervisor将控制权移交给pvmfw,然后分支到载荷的入口点。

    Microdroid的安全特性

    Microdroid 实例的安全启动流程

    Microdroid是专为pVM设计的迷你版Android操作系统,它提供了一个精简而强大的环境,用于运行那些需要更高安全保障的应用程序。Microdroid的核心在于其安全性,它通过一系列精心设计的安全措施来保护运行在pVM中的应用程序。

    Microdroid的安全性体现在以下几个方面:

    • • 启动验证:Microdroid在启动时会进行严格的验证,确保只有经过验证的系统映像才能启动。这一过程涉及到对boot.imgsuper.imgvbmeta.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安全要点

    1. 1. 分层安全方法

    • • AVF采用分层安全方法,每一层都提供额外的强制执行功能,以防止在pVM中运行任意载荷。

  • 2. 安全层

    • • Android系统:确保只有具有pVM权限的应用才能创建或检查pVM。

    • • 引导加载程序:确保只有由Google或设备供应商签名的pVM映像才能启动。

    • • pVM:为运行在pVM中的载荷提供纵深防御,例如使用SELinux,防止数据映射为可执行文件,并确保W^X适用于所有类型的文件。

  • 3. 安全模型

    • • 包括机密性、完整性和可用性(CIA),旨在提供信息安全政策指南。

  • 4. 机密性和完整性

    • • 机密性源自pKVM Hypervisor强制执行的内存隔离属性。

    • • 完整性适用于内存和计算中的数据,确保pVM无法未经同意修改彼此的内存或影响CPU状态。

  • 5. Hypervisor

    • • pKVM基于KVM Hypervisor,用于将pVM和Android隔离到互不信任的执行环境中。

  • 6. 客户机OS

    • • Microdroid作为在pVM中运行的OS示例,由引导加载程序、GKI、Android用户空间和载荷启动器组成。

  • 7. Android主机

    • • 维护客户机pVM无法与其他pVM直接交互的属性,只有主机pVM中的VirtualizationService才能建立与另一pVM的通信通道。

  • 8. 可用性

    • • 指主机为客户机分配足够的资源以执行其任务。pKVM将工作负载调度工作委托给主机内核。

  • 9. 安全启动

    • • 确保对实例数据的访问可控制,通过随机生成秘密信息盐和提取加载映像中的详细信息来验证pVM实例的后续启动。

  • 10. 已解锁的设备

    • • 使用fastboot oem unlock解锁设备时,会擦除用户数据和pVM的专用数据,使得已解锁设备上的pKVM不可信。

    这些要点概述了AVF如何通过多层次的安全措施来保护虚拟机的机密性、完整性和可用性,以及如何通过安全启动和设备锁定状态管理来增强安全性。

    AVF应用场景

    Android虚拟化框架(AVF)的应用场景广泛,它可以为多种用例提供安全、隔离的执行环境。以下是一些主要的应用场景:

    1. 1. 应用隔离

    • • 在需要隔离敏感应用或多用户环境中,AVF可以用来隔离运行特定应用的实例,以保护用户数据和提高安全性。

  • 2. 多用户环境

    • • 在共享设备或企业环境中,AVF可以为不同的用户或用户组创建隔离的虚拟环境,确保数据隔离和安全性。

  • 3. 安全支付处理

    • • 对于需要处理敏感支付信息的应用,AVF可以提供一个安全的执行环境,减少恶意软件和攻击者窃取数据的风险。

  • 4. 企业安全

    • • 企业可以使用AVF来隔离工作和个人数据,或者为特定的企业应用创建安全的执行环境。

  • 5. 开发和测试

    • • 开发者可以利用AVF进行应用的测试和调试,无需担心影响设备上其他应用或系统的正常运行。

  • 6. 教育用途

    • • 在教育领域,AVF可以为学生提供隔离的学习环境,同时允许教师监控和控制学生的学习进度。

  • 7. 安全研究和逆向工程

    • • 安全研究人员可以使用AVF来隔离和分析恶意软件,避免对主系统造成损害。

  • 8. 游戏和多媒体内容

    • • 对于需要高安全性的版权保护游戏和多媒体内容,AVF可以提供一个受控的执行环境,防止盗版和非法分发。

  • 9. 物联网(IoT)设备管理

    • • 在IoT场景中,AVF可以用于隔离运行在设备上的不同服务和应用,提高设备的整体安全性。

  • 10. 车载系统(IVI)

    • • 在车载信息娱乐系统中,AVF可以用于隔离不同的系统组件,如导航、娱乐和车辆控制,以确保关键系统的安全性。

  • 11. 远程桌面和虚拟工作站

    • • AVF可以用于提供远程桌面服务或虚拟工作站,使用户能够安全地访问企业资源。

  • 12. 应急响应和数字取证

    • • 在应急响应和数字取证中,AVF可以用于隔离可疑的文件和系统,进行安全分析。

  • 13. 合规性和审计

    • • 对于需要满足特定合规性要求的应用,AVF可以提供一个受控的环境,以便于审计和合规性检查。

  • 14. 云服务和服务器虚拟化

    • • 虽然AVF主要用于移动设备,但其核心虚拟化技术也可以应用于服务器和云服务,提供隔离的虚拟环境。

    AVF通过提供一个灵活、安全的虚拟化解决方案,满足了现代移动设备对于安全性和隔离性的多样化需求。随着技术的发展,AVF的应用场景将继续扩展,为更多领域提供支持。

    10. 结语

    AVF的安全特性为移动设备提供了强大的保护。通过其分层安全方法、机密性、完整性和可用性的维护,以及Hypervisor和客户机OS的安全特性,AVF确保了移动设备在面对日益复杂的威胁时,能够保持安全和可靠。随着技术的不断进步,我们期待AVF能够继续为移动设备的安全性提供更多的创新和改进。

    虎哥Lovedroid
    Android技术达人 近10年一线开发经验 关注并分享Android、Kotlin新技术,新框架 多年Android底层框架修改经验,对Framework、Server、Binder等架构有深入理解
     最新文章