
Un marco basado en contenedores para permitir la integración de componentes móviles en plataformas de formación en seguridad
Dockerized Android es un marco basado en contenedores que permite ejecutar un Emulador de Android dentro de Docker y controlarlo a través de un navegador. Este proyecto se ha desarrollado con el fin de proporcionar un punto de partida para integrar componentes de seguridad móvil en Cyber Ranges, pero se puede utilizar para cualquier propósito. De todos modos, para fines de desarrollo y pruebas, el proyecto sugerido es docker-android.
Como se indicó en la breve descripción anterior, este proyecto se ha creado con el fin de proporcionar un punto de partida para la introducción de componentes de seguridad móvil en Cyber Ranges. Por esta razón, las características ya desarrolladas y las que se agregarán en el futuro ayudarán al usuario a facilitar la configuración de una simulación realista (por ejemplo, para capacitación en seguridad). Este README es bastante largo, quizás quieras saltar directamente a la parte "Cómo ejecutar".
Las siguientes características están disponibles actualmente:
| Configuración inicial | Configuración del Instance Manager | Configuración manual |
|---|---|---|
| initial-setup | instance-manager-setup | manual-setup |
| Funciones del toolbox | Cambio de instancia |
|---|---|
| toolbox | instance-switch |
El proyecto está compuesto por tres piezas principales:
El componente Core es el que ejecuta todos los procesos necesarios para ejecutar un Componente Android (Emulado o Real) dentro de un contenedor Docker, exponiendo también algunas funcionalidades hacia el exterior. Sin duda es la parte más compleja porque tiene que gestionar diferentes procesos para proporcionar un conjunto de características. La figura anterior muestra una clara distinción entre procesos de larga duración, procesos de inicio y scripts de utilidades. Además, esta figura muestra que hay 6 procesos de larga duración; esto es una pequeña inexactitud añadida para proporcionar una visión general del componente Core. En realidad, existen dos variantes diferentes del componente Core:
La principal diferencia arquitectónica es la relacionada con los procesos de larga duración: el Core para Emulador ejecuta el proceso de larga duración emulador, mientras que el Core para Dispositivo Real ejecuta el proceso de larga duración scrcpy para mostrar y controlar el dispositivo físico. Las otras partes son bastante similares, con solo algo de lógica para seguir un comportamiento diferente según el tipo de componente Core.
El componente UI proporciona una forma sencilla de utilizar todas las funciones expuestas por el backend y también añade la capacidad de mostrar y controlar el dispositivo. El usuario debe insertar manualmente la dirección del componente Core y los puertos correspondientes (el puerto expuesto por el backend y el puerto expuesto por websockify); mediante esta configuración manual es posible cambiar los puertos predeterminados (que son 4242 para el backend y 6080 para websockify).
El componente Instance Manager tiene la función de proporcionar toda la información (es decir, direcciones y puertos) sobre los Cores en ejecución a través de una única API REST. Esto se hace escribiendo un archivo de configuración JSON simple que contiene toda la información sobre los Cores que están presentes en el docker-compose, con el fin de evitar la tediosa tarea de agregarlos manualmente uno por uno. La estructura del archivo de configuración JSON es la siguiente:
{
"instances": [
{
"name": [Cadena genérica para identificar el dispositivo],
"address": [Dirección del componente],
"core_port": [Puerto del backend],
"vnc_port": [Puerto de VNC]
}
]
}