Android Virtualization Framework (AVF) fornisce ambienti di esecuzione sicuri e privati per l'esecuzione del codice. L'AVF è ideale per i casi d'uso incentrati sulla sicurezza che richiedono garanzie di isolamento più stringenti, anche verificate formalmente, rispetto a quelle offerte dalla sandbox delle app di Android. Android fornisce un'implementazione di riferimento di tutti i componenti necessari per implementare AVF. AVF è supportato solo su dispositivi ARM64. La Figura 1 mostra l'architettura di AVF:
Figura 1. Architettura AVF.
Di seguito sono riportate le definizioni dei termini più importanti della figura 1:
- apexd e zipfuse
- Monta in modo sicuro gli APEX e gli APK importati dall'host.
- authfs
- Un file system Fuse per condividere in sicurezza più file tra Android e la VM paravirtualizzata (host e guest).
- binder
- Mezzo principale di comunicazione tra VM.
- crosvm
- Un monitor delle macchine virtuali scritto in Rust. crosvm alloca la memoria della VM, crea thread della CPU virtuale e implementa i back-end del dispositivo virtuale.
- Generic Kernel Image (GKI)
- Un'immagine di avvio certificata da Google che contiene un kernel GKI creato da un albero di origine Android Common Kernel (ACK) ed è idonea per essere trasferita alla partizione di avvio di un dispositivo Android. Per ulteriori informazioni, consulta la panoramica del kernel.
- hypervisor
- La tecnologia di virtualizzazione utilizzata da AVF, nota anche come pKVM. L'hypervisor mantiene l'integrità del codice eseguito e la riservatezza degli asset della VM privata, anche se Android host o una delle altre VM private sono compromessi.
- API Java
- Le API Java VirtualizationService, presenti solo sui dispositivi con supporto AVF. Queste API sono facoltative e non fanno parte di
thebootclasspath
. - Microdroid
- Un sistema operativo mini-Android fornito da Google che viene eseguito in una pVM.
- Microdroid Manager
- Gestisce il ciclo di vita della VM privata, all'interno della VM privata e del disco dell'istanza.
- API nativa
- Un sottoinsieme del Native Development Kit (NDK) per Android.
- Macchina virtuale basata su kernel protetta (pKVM)
- Consulta Hypervisor.
- Firmware della pVM (
pvmfw
) - Il primo codice eseguito su una pVM,
pvmfw
verifica il payload e ricava il segreto per VM. - macchina virtuale protetta (pVM)
Un ambiente di esecuzione isolato (guest) non attendibile reciprocamente che viene eseguito insieme al sistema operativo Android principale (host). Un aspetto importante della sicurezza delle pVM è che, anche se l'host è compromesso, non ha accesso alla memoria di una pVM. pKVM è l'hypervisor standard per l'esecuzione delle pVM.
Rispetto ai Trusted Execution Environment (TEE) esistenti, le pVM forniscono un ambiente più ricco, inclusa la possibilità di eseguire una distribuzione mini-Android chiamata Microdroid (anche se Microdroid può essere eseguito anche su una VM non protetta). Le pVM possono essere utilizzate in modo dinamico e forniscono un insieme standard di API in un ambiente attendibile disponibile su tutti i dispositivi che le supportano.
- VirtualizationService
Il servizio Android che gestisce il ciclo di vita delle pVM.
Passaggi successivi
- Per comprendere meglio la necessità di AVF, consulta Perché AVF?.
- Per scoprire come AVF può essere utilizzato per la compilazione isolata, consulta Casi d'uso.
- Per una spiegazione più approfondita dell'architettura dell'implementazione di riferimento AVF, consulta Architettura AVF.
- Per scoprire di più su Microdroid, consulta Microdroid.
- Se ti interessa sapere in che modo AVF gestisce la sicurezza, consulta la sezione Sicurezza.
- Per comprendere il ruolo del servizio di virtualizzazione, consulta VirtualizationService.
- Per il codice sorgente di AVF o una spiegazione approfondita dei singoli componenti, consulta il repository AOSP.