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.
https://github.com/budtmo/docker-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:
X | Linux | Windows | OS X |
---|---|---|---|
Core for Emulator | Compatibilidad total | No se admite (todavía) | No se admite |
Core for Real Device | Compatibilidad total | Compatibilidad total | Solució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:
- 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
- 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:
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:
Componente | Nombre de ENV | Valor por defecto | Descripción |
---|---|---|---|
Core | TARGET_PORT | 6080 | Puerto Websockify |
Core | CUSTOM_APP_DEFAULT_PORT | 4242 | Puerto del backend de Node.js |
Core | DEVICEINFO | No está establecido, pero se comporta como true | Activa/desactiva la función de información del dispositivo |
Core | TERMINAL | No está establecido, pero se comporta como true | Activa/desactiva la función de terminal |
Core | APK | No está establecido, pero se comporta como true | Activa/desactiva la función de instalación del APK |
Core | FORWARD | No está establecido, pero se comporta como true | Activa/desactiva la función de reenvío de puertos |
Core | SMS | No está establecido, pero se comporta como true | Activa/desactiva la función de emulación de SMS |
Core | REBOOT | No está establecido, pero se comporta como true | Activa/desactiva la función de reinicio |
Core | INSTALL_ON_STARTUP | false | Activa/desactiva la función que permite instalar todos los apks colocados en la carpeta/root/dockerized-android/apk |
Core | ENABLE_UNKNOWN_SOURCES | false | Activa la instalación desde fuentes desconocidas |
Core | REAL_DEVICE_SERIAL | No está establecido | Si 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 Manager | DEFAULT_PORT | 7373 | Puerto 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 | # Puerto | Descripción |
---|---|---|
Core | 5555 | ADB port |
Core | 4242 | Node.js Backend |
Core | 6080 | Websockify (for noVNC) |
UI | 80 | Frontend |
Instance Manager | 7373 | REST API |
https://github.com/cybersecsi/dockerized-android