Android Virtualization Framework (AVF) fornisce ambienti di esecuzione sicuri e privati per l'esecuzione del codice. 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. Al momento, AVF è supportato solo su dispositivi ARM64. La Figura 1 mostra l'architettura di 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 virtualizzata (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 è adatta per essere trasferita nella 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 che viene 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 tra pari 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 l'articolo Perché AVF?.
- Per scoprire come AVF può essere utilizzato per la compilazione isolata, consulta la sezione Casi d'uso.
- Per una spiegazione più approfondita dell'architettura dell'implementazione di riferimento AVF, consulta la sezione 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