Casos de uso

En esta página, se incluyen casos de uso comunes de AVF.

Compilación aislada

Como enclave seguro de software, una máquina virtual (VM) protegida proporciona un entorno seguro para compilar código sensible a la seguridad. Este entorno permite trasladar la compilación de bootclasspath y los archivos JAR del servidor del sistema (que se activan con 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 se encuentra en el APEX com.android.compos. Este componente es opcional y se puede incluir con un archivo makefile.

Compilación aislada

Figura 1: Compilación de archivos JAR en actualizaciones de Mainline Compilación de archivos JAR en actualizaciones de Mainline

El objetivo de seguridad es compilar de forma veraz la entrada verificada y producir el resultado de forma aislada. Android, como cliente no confiable, no puede alterar el resultado de la compilación de ninguna manera, excepto provocar que falle (cuando Android recurre a la compilación en tiempo de inicio).

El servicio de compilación de 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 verificar la firma.

La clave de la VM se genera a partir del perfil de DICE de la VM, que se define por los APEX y los APK que se activan 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 VM se inicia en el inicio temprano después de cada actualización de APEX.

Con el inicio verificado de las VMs protegidas, el servicio de compilación solo ejecuta código verificado. Como resultado, el código puede determinar que solo se acepten las entradas que satisfagan ciertas condiciones, por ejemplo, aceptar un archivo de entrada solo cuando su nombre y el resumen de fs-verity se definan en una lista de entidades permitidas.

Las APIs expuestas desde la VM son superficies de ataque. Se supone que todos los archivos y parámetros de entrada provienen de un cliente no confiable, y deben verificarse y aprobarse antes del procesamiento.

La VM verifica la integridad de los archivos de entrada y salida, y los archivos se almacenan 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 debe proporcionarse 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 una firma.

Entorno de desarrollo de Linux

Tradicionalmente, Android fue el único sistema operativo importante que no permitía a los usuarios desarrollar apps en la plataforma. Con la introducción del entorno de desarrollo de Linux, nuestro objetivo es proporcionar un entorno de desarrollo basado en Linux a los usuarios de Android que son desarrolladores. En el futuro, planeamos expandir esta iniciativa para que nuestros socios puedan implementar casos de uso innovadores de VMs, como ejecutar apps con interfaces gráficas de usuario y hasta juegos.

El entorno de desarrollo de Linux está disponible en dispositivos seleccionados y se ejecuta en una máquina virtual no protegida.

Caso de uso del entorno de desarrollo de Linux

Figura 2: Caso de uso del entorno de desarrollo de Linux.

Los componentes de alto nivel de la VM de Linux son los siguientes:

  • App de terminal: Es una aplicación para Android que proporciona una interfaz de terminal. Usa un WebView para conectarse a un servicio web que se ejecuta en la VM para la interacción. Esta app está inhabilitada de forma predeterminada. Actívala en Configuración para desarrolladores.
  • Android Virtualization Framework (AVF): Es el subsistema existente de Android para la creación y administración de VMs. Requiere una modificación mínima para admitir imágenes de SO personalizadas para esta función.
  • Máquina virtual: Es una VM que genera AVF. Aloja el servicio de terminal y AVF lo crea específicamente para la funcionalidad de la app de Terminal.
  • Imagen del SO: Es una imagen del SO basada en Debian y ligeramente modificada a partir de la imagen de Debian upstream. La app de Terminal descarga esta imagen desde un servidor externo de Google. Sirve como base para el funcionamiento de la VM.
  • Agente de invitado: Software nuevo en la VM. Informa el estado del SO a AVF y proporciona control de la máquina virtual.
  • ttyd: Es un software de código abierto que se ejecuta en la VM y que implementa la emulación de terminal a través de HTTP. La WebView de la app de Terminal se conecta a él.
  • Tethering Manager: Es un subsistema de Android existente. Proporciona acceso a la red a la máquina virtual vinculándola al dispositivo con Android.