Casos prácticos

Este documento contiene casos de uso comunes para AVF.

compilación aislada

Como enclave seguro de software, una máquina virtual protegida proporciona un entorno seguro para compilar código sensible a la seguridad. Este entorno permite mover la compilación de los archivos JAR del servidor de sistema y bootclasspath (activados por una actualización de APEX) desde el inicio temprano hasta antes del reinicio, y reduce significativamente el tiempo de inicio posterior a la actualización de APEX.

La implementación está en com.android.compos APEX. Este componente es opcional y se puede incluir mediante un archivo MAKE .

compilación aislada

Figura 1. Compilación de archivos JAR en actualizaciones principales

El objetivo de seguridad es compilar verazmente las entradas verificadas y producir la salida de forma aislada; Android, como cliente que no es de confianza, no puede alterar el resultado de la compilación de ninguna otra manera que no sea provocar que falle (cuando Android vuelve a la compilación en el momento de inicio).

El servicio de compilación en la VM genera una firma solo si no hay ningún error durante toda la compilación. Android puede recuperar la clave pública de la VM para verificar la firma.

La clave de la VM se genera a partir del perfil DICE de la VM, definido por los APEX y APK montados en la VM, 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 máquina virtual se inicia temprano después de cada actualización de APEX.

Con el arranque verificado de la máquina virtual protegida, el servicio de compilación ejecuta solo código verificado. Por lo tanto, el código puede determinar aceptar solo entradas que cumplan ciertas condiciones, por ejemplo, aceptar un archivo de entrada solo donde su nombre y el resumen fs-verity estén definidos en una lista de permitidos.

Cualquier API expuesta de la VM es una superficie de ataque. Se supone que todos los archivos y parámetros de entrada provienen de un cliente que no es de confianza y deben verificarse y examinarse antes de procesarlos.

La máquina virtual verifica la integridad de los archivos de entrada/salida, y los archivos se almacenan en Android como un servidor de archivos que no es de confianza, de la siguiente manera:

  • El contenido de un archivo de entrada debe verificarse antes de su uso utilizando el algoritmo fs-verity . Para que un archivo de entrada esté disponible en la VM, su hash raíz debe proporcionarse en un contenedor (APK) que contribuya al perfil DICE de la VM. Con el hash raíz confiable, un atacante no puede alterar la entrada sin ser detectado.
  • La integridad del archivo de salida debe mantenerse 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 dinámicamente. 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 mediante firma.