Dockerized Android Ejecutar un Emulador de Android dentro de Docker
Dockerized Android Ejecutar un Emulador de Android dentro de Docker

Dockerized Android: Ejecutar un Emulador de Android dentro de Docker

Dockerized Android es un framework basado en contenedores que permite ejecutar un emulador de Android dentro de Docker y controlarlo a través de un navegador.

Este proyecto ha sido desarrollado con el fin de proporcionar un punto de partida para la integración de componentes de seguridad móvil en Cyber Ranges, pero puede ser utilizado para cualquier propósito. De todos modos, para propósitos de desarrollo y pruebas el proyecto sugerido es docker-android.

Presentación de Dockerized Android
Presentación de Dockerized Android

Introducción

Como se ha indicado 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 añadirán en la función ayudarán al usuario a facilitar la configuración de una simulación realista (por ejemplo, para la formación en seguridad).

Características

Actualmente están disponibles las siguientes funciones:

  • Ejecutar un emulador de Android en Docker
  • Controlar el dispositivo a través del navegador web
  • Instalar aplicaciones
  • Habilitar el reenvío de puertos
  • Reiniciar el dispositivo
  • Emular SMS
  • Utilizar el terminal desde el navegador web
  • Adjuntar también un dispositivo físico
  • Personalizar el comportamiento de arranque
  • Gestionar fácilmente varias instancias

Cómo se Ejecuta

Para ver un ejemplo completo de cómo ejecutar la plataforma puedes ver el docker-compose disponible en el directorio de examples. Este directorio contiene tres configuraciones diferentes:

  • docker-compose-core: configuración con un núcleo para un dispositivo real;
  • docker-compose-emulator: configuración con un núcleo para un emulador;
  • docker-compose-instance-manager: configuración con dos núcleos diferentes y también el componente opcional Instance Manager.

Una vez que hayas entendido cómo funciona, puedes cambiarlo para satisfacer cualquier necesidad que tengas.

Requisitos previos

Docker y Docker Compose tienen que estar instalados en tu máquina.

Compatibilidad con el sistema operativo

Esta plataforma se comporta de diferentes maneras en función del sistema operativo host, aquí hay una tabla que resume la compatibilidad actual:

XLinuxWindowsOS X
Core for EmulatorCompatibilidad totalNo se admite (todavía)No se admite
Core for Real DeviceCompatibilidad totalCompatibilidad totalSolución alterna

Para Windows y OS X tienes que usar una VM Linux con virtualización anidada.

Para comprobar si tu máquina Linux soporta la virtualización anidada puedes ejecutar los siguientes comandos:

sudo apt install cpu-checker
kvm-ok

Solución de OS X para Real Device

Para utilizar el Core for Real Device en OS X puedes:

Utilizar el adb del host
Utilizar la conexión inalámbrica

Para la conexión inalámbrica, Google proporciona un sencillo tutorial. Para conectarse al adb del host desde el contenedor hay que entrar manualmente dentro del contenedor y ejecutar:

adb -H host.docker.internal devices

Ejecutar

Los comandos para empezar a utilizar el framework son los siguientes:

  1. En primer lugar, elige una configuración que se encuentre en la carpeta de examples. Por ejemplo:
cp ./examples/docker-compose-core.yml docker-compose.yml
  1. Ejecutar con docker-compose:
docker-compose up

De forma más sencilla, también puedes utilizar el comando

docker-compose -f ./examples/docker-compose-core.yml up

Sólo queda navegar a través de un navegador en la siguiente dirección http://127.0.0.1:8080 y establecer la configuración actual:

Configuración inicial de Dockerized Android
Configuración inicial de Dockerized Android

Si no se ha utilizado el Instance Manager, haz clic en Manual Setup e introduce la siguiente información:

  • Un nombre de tu elección para la instancia;
  • Dirección IP del núcleo del componente declarado en docker-compose;
  • Número de puerto del núcleo (4242 por defecto);
  • Número de puerto VNC (6080 por defecto).

Si se utiliza el Instance Manager, haz clic en “Instance Manager” y sólo introduce la dirección IP y su número de puerto (por ejemplo, 193.21.1.100:7373).

Y ya está. Ya puedes utilizar el framework dentro del navegador.

Construir

También puedes construir las imágenes tú mismo a través de los scripts colocados en la carpeta utils

Configuración

Puedes configurar algunas características para personalizar la configuración a través de variables ENV, la siguiente tabla proporciona una lista de todas ellas:

ComponenteNombre de ENVValor por defectoDescripción
CoreTARGET_PORT6080Puerto Websockify
CoreCUSTOM_APP_DEFAULT_PORT4242Puerto del backend de Node.js
CoreDEVICEINFONo está establecido, pero se comporta como trueActiva/desactiva la función de información del dispositivo
CoreTERMINALNo está establecido, pero se comporta como trueActiva/desactiva la función de terminal
CoreAPKNo está establecido, pero se comporta como trueActiva/desactiva la función de instalación del APK
CoreFORWARDNo está establecido, pero se comporta como trueActiva/desactiva la función de reenvío de puertos
CoreSMSNo está establecido, pero se comporta como trueActiva/desactiva la función de emulación de SMS
CoreREBOOTNo está establecido, pero se comporta como trueActiva/desactiva la función de reinicio
CoreINSTALL_ON_STARTUPfalseActiva/desactiva la función que permite instalar todos los apks colocados en la carpeta/root/dockerized-android/apk
CoreENABLE_UNKNOWN_SOURCESfalseActiva la instalación desde fuentes desconocidas
CoreREAL_DEVICE_SERIALNo está establecidoSi hay más de un dispositivo físico conectado, este valor debe establecerse en el serial del dispositivo que tiene que ser controlado, de lo contrario todas las demás características no funcionarán
Instance ManagerDEFAULT_PORT7373Puerto de la API REST

La variable REAL_DEVICE_SERIAL es fundamental si hay más de un dispositivo físico conectado porque si falta no funcionará nada. Finalmente hay una lista de puertos expuestos por cada componente:

Componente# PuertoDescripción
Core5555ADB port
Core4242Node.js Backend
Core6080Websockify (for noVNC)
UI80Frontend
Instance Manager7373REST API
Dark Mode

dockerized-android (este enlace se abre en una nueva ventana) por cybersecsi (este enlace se abre en una nueva ventana)

A container-based framework to enable the integration of mobile components in security training platforms

Mi Carro Close (×)

Tu carrito está vacío
Ver tienda