En este documento, se incluyen casos de uso comunes de AVF.
Compilación aislada
Como enclave seguro de software, una VM protegida proporciona un entorno seguro para compilar código sensible a la seguridad. Este entorno permite mover la compilación de bootclasspath
y los archivos JAR del servidor del sistema (activados por una actualización de APEX) del inicio anticipado al inicio antes del reinicio y reduce significativamente el tiempo de inicio posterior a la actualización de APEX.
La implementación se encuentra en el APEX com.android.compos
. Este componente es opcional y se puede incluir con un archivo make.
El objetivo de seguridad es compilar de forma veraz la entrada verificada y producir el resultado en aislamiento. Android, como cliente no confiable, no puede alterar el resultado de la compilación de ninguna manera, excepto por causar que falle (cuando Android recurre a la compilación del tiempo de inicio).
El servicio de compilación en la VM genera una firma solo si no hay errores durante toda la compilación. Android puede recuperar la clave pública de la VM para la verificación de firmas.
La clave de la VM se genera a partir del perfil DICE de la VM, definido por los APEX y los APKs montados en la VM, además de otros parámetros de la VM, como la depurabilidad.
Para determinar si la clave pública no proviene de una VM inesperada, Android inicia la VM para determinar si la clave es correcta. La VM se inicia en el inicio anticipado después de cada actualización de APEX.
Con el inicio verificado de la VM protegida, el servicio de compilación solo ejecuta código verificado. Por lo tanto, el código puede determinar aceptar solo entradas que satisfagan ciertas condiciones, por ejemplo, aceptar un archivo de entrada solo cuando su nombre y el resumen fs-verity
se definan en una lista de entidades permitidas.
Todas las APIs expuestas de la VM son superficies de ataque. Se supone que todos los archivos de entrada y parámetros provienen de un cliente no confiable y deben verificarse y aprobarse antes de procesarlos.
La VM verifica la integridad de los archivos de entrada y salida, con los archivos almacenados en Android como un servidor de archivos no confiable, de la siguiente manera:
- El contenido de un archivo de entrada se debe verificar antes de usarlo con el algoritmo
fs-verity
. Para que un archivo de entrada esté disponible en la VM, su hash raíz se debe proporcionar en un contenedor (APK) que contribuya al perfil de DICE de la VM. Con el hash raíz de confianza, un atacante no puede manipular la entrada sin ser detectado. - La integridad del archivo de salida se debe mantener en la VM. Incluso si un archivo de salida se almacena en Android, durante la generación, la integridad se mantiene con el mismo formato de árbol
fs-verity
, pero se puede actualizar de forma dinámica. El archivo de salida final se puede identificar con el hash raíz, que está aislado en la VM. El servicio en la VM protege los archivos de salida con una firma.