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, a menos que cause 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 APK activados en ella, además de otros parámetros de la VM, como la capacidad de depuración.
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 durante 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 el código verificado. Por lo tanto, el código puede determinar que solo acepte entradas que cumplan con ciertas condiciones, por ejemplo, aceptar un archivo de entrada solo en el que su nombre y el resumen fs-verity
estén definidos en una lista de entidades permitidas.
Cualquier API expuesta de la VM es una superficie 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 del archivo 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. - Se debe mantener la integridad del archivo de salida 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 firma.