
Ein containerbasiertes Framework zur Ermöglichung der Integration mobiler Komponenten in Sicherheitsschulungsplattformen
Dockerized Android ist ein containerbasiertes Framework, das es ermöglicht, einen Android-Emulator in Docker auszuführen und über einen Browser zu steuern. Dieses Projekt wurde entwickelt, um einen Ausgangspunkt für die Integration mobiler Sicherheitskomponenten in Cyber Ranges zu bieten, kann aber für jeden Zweck verwendet werden. Für Entwicklungs- und Testzwecke wird jedoch das Projekt docker-android empfohlen.
Wie in der kurzen Beschreibung oben erwähnt, wurde dieses Projekt erstellt, um einen Ausgangspunkt für die Einführung mobiler Sicherheitskomponenten in Cyber Ranges zu bieten. Aus diesem Grund helfen die bereits entwickelten Funktionen sowie die zukünftig hinzugefügten Funktionen dem Benutzer, eine realistische Simulation (z. B. für Sicherheitstrainings) einfacher einzurichten. Diese README ist ziemlich lang, vielleicht möchten Sie direkt zum Teil „So wird's ausgeführt“ springen.
Derzeit sind folgende Funktionen verfügbar:
| Ersteinrichtung | Instance Manager Einrichtung | Manuelle Einrichtung |
|---|---|---|
| initial-setup | instance-manager-setup | manual-setup |
| Toolbox-Funktionen | Instanzwechsel |
|---|---|
| toolbox | instance-switch |
Das Projekt besteht aus drei Hauptkomponenten:
Die Core-Komponente führt alle Prozesse aus, die zum Betreiben einer Android-Komponente (emuliert oder real) innerhalb eines Docker-Containers erforderlich sind, und stellt einige Funktionen nach außen zur Verfügung. Sie ist zweifellos der komplexeste Teil, da sie verschiedene Prozesse verwalten muss, um eine Reihe von Funktionen bereitzustellen. Die obige Abbildung zeigt eine klare Unterscheidung zwischen langlebigen Prozessen, Startprozessen und Hilfsskripten. Außerdem zeigt die Abbildung, dass es 6 langlebige Prozesse gibt – dies ist eine kleine Ungenauigkeit, die hinzugefügt wurde, um einen allgemeinen Überblick über die Core-Komponente zu geben. In Wirklichkeit gibt es zwei unterschiedliche Varianten der Core-Komponente:
Der Hauptarchitekturunterschied betrifft die langlebigen Prozesse: Der Core für Emulator führt den langlebigen Emulator-Prozess aus, während der Core für echtes Gerät den langlebigen scrcpy-Prozess ausführt, um das physische Gerät anzuzeigen und zu steuern. Die anderen Teile sind recht ähnlich, lediglich mit etwas Logik, um je nach Art der Core-Komponente ein anderes Verhalten zu ermöglichen.
Die UI-Komponente bietet eine einfache Möglichkeit, alle vom Backend bereitgestellten Funktionen zu nutzen und ermöglicht zudem die Anzeige und Steuerung des Geräts. Der Benutzer muss manuell die Adresse der Core-Komponente sowie die entsprechenden Ports eingeben (den vom Backend bereitgestellten Port und den von websockify bereitgestellten Port); durch diese manuelle Einrichtung können die Standardports (4242 für das Backend und 6080 für websockify) geändert werden.
Die Instance Manager-Komponente hat die Aufgabe, alle Informationen (d. h. Adressen und Ports) über die laufenden Cores über eine einzige REST-API bereitzustellen. Dies geschieht durch das Schreiben einer einfachen JSON-Konfigurationsdatei, die alle Informationen über die Cores enthält, die in der docker-compose vorhanden sind, um die mühsame manuelle Eingabe zu vermeiden. Die Struktur der JSON-Konfigurationsdatei ist wie folgt:
{
"instances": [
{
"name": [Generischer String zur Identifizierung des Geräts],
"address": [Adresse der Komponente],
"core_port": [Port des Backends],
"vnc_port": [Port von VNC]
}
]
}
Das Image secsi/dockerized-android-core-bare lädt kein System-Image herunter; Sie können das Verzeichnis auf Ihrem Host-Rechner einbinden, in dem sich alle SDK-Ordner befinden.
Ein vollständiges Beispiel zur Ausführung der Plattform finden Sie in der docker-compose-Datei im Verzeichnis examples. Dieses Verzeichnis enthält drei verschiedene Konfigurationen:
Sobald Sie verstanden haben, wie es funktioniert, können Sie es nach Ihren Bedürfnissen anpassen.
Docker und Docker Compose müssen auf Ihrem Rechner installiert sein.
Diese Plattform verhält sich je nach Host-Betriebssystem unterschiedlich. Hier eine Tabelle, die die aktuelle Kompatibilität zusammenfasst:
| Linux | Windows | OS X | |
|---|---|---|---|
| Core für Emulator | Volle Kompatibilität | Nicht unterstützt (noch) | Nicht unterstützt |
| Core für echtes Gerät | Volle Kompatibilität | Volle Kompatibilität | Workaround |
Für Windows und OS X müssen Sie eine Linux-VM mit verschachtelter Virtualisierung verwenden.
Um zu überprüfen, ob Ihr Linux-Rechner verschachtelte Virtualisierung unterstützt, können Sie die folgenden Befehle ausführen:
sudo apt install cpu-checker
kvm-ok
Um den Core für echtes Gerät unter OS X zu verwenden, können Sie:
Für die drahtlose Verbindung stellt Google ein einfaches Tutorial zur Verfügung. Um eine Verbindung zur Host-ADB aus dem Container herzustellen, müssen Sie manuell in den Container gehen und Folgendes ausführen:
adb -H host.docker.internal devices
Die Befehle zum Starten des Frameworks lauten wie folgt:
cp ./examples/docker-compose-core.yml docker-compose.yml
docker-compose up
Noch einfacher können Sie auch den Befehl verwenden:
docker-compose -f ./examples/docker-compose-core.yml up
Jetzt müssen Sie nur noch über einen Browser zur folgenden Adresse navigieren: http://127.0.0.1:8080 und die aktuelle Konfiguration einstellen:
Wenn der Instance Manager nicht verwendet wurde, klicken Sie auf Manuelle Einrichtung und geben Sie die folgenden Informationen ein:
Wenn der Instance Manager verwendet wird, klicken Sie auf „Instance Manager“ und geben Sie einfach die IP-Adresse und die Portnummer ein (z. B. 193.21.1.100:7373).
Das war's! Sie können das Framework im Browser nutzen.
Sie können die Images auch selbst mit den Skripten im Ordner utils erstellen.
Sie können einige Funktionen über Umgebungsvariablen anpassen. Die folgende Tabelle listet alle auf:
Die Variable REAL_DEVICE_SERIAL ist entscheidend, wenn mehr als ein physisches Gerät angeschlossen ist, da bei Fehlen nichts funktioniert. Abschließend eine Liste der von jeder Komponente bereitgestellten Ports:
Dockerized Android ist eine Open-Source- und kostenlose Software, die unter der MIT-Lizenz veröffentlicht wurde.
Wenn Sie diesen Code in Ihrer Forschung nützlich finden, zitieren Sie bitte unsere Arbeit:
@inproceedings{Capone2022,
doi = {10.1109/icecet55527.2022.9872834},
url = {https://doi.org/10.1109/icecet55527.2022.9872834},
year = {2022},
month = jul,
publisher = {{IEEE}},
author = {Daniele Capone and Francesco Caturano and Angelo Delicato and Gaetano Perrone and Simon Pietro Romano},
title = {Dockerized Android: a container-based platform to build mobile Android scenarios for Cyber Ranges},
booktitle = {2022 International Conference on Electrical, Computer and Energy Technologies ({ICECET})}
}
Dieses Projekt stellt unsere Masterarbeit im Fach Computertechnik an der Universität Federico II von Neapel dar. Besonderer Dank gilt Professor Simon Pietro Romano und Ingenieur Francesco Caturano, die Quellen der Inspiration für diese Arbeit waren.
| Android-Version | API | Image |
|---|
| 5.0.1 | 21 | secsi/dockerized-android-core-emulator-5.0.1 |
| 5.1.1 | 22 | secsi/dockerized-android-core-emulator-5.1.1 |
| 6.0 | 23 | secsi/dockerized-android-core-emulator-6.0 |
| 7.0 | 24 | secsi/dockerized-android-core-emulator-7.0 |
| 7.1.1 | 25 | secsi/dockerized-android-core-emulator-7.1.1 |
| 8.0 | 26 | secsi/dockerized-android-core-emulator-8.0 |
| 8.1 | 27 | secsi/dockerized-android-core-emulator-8.1 |
| 9.0 | 28 | secsi/dockerized-android-core-emulator-9.0 |
| 10.0 | 29 | secsi/dockerized-android-core-emulator-10.0 |
| 11.0 | 30 | secsi/dockerized-android-core-emulator-11.0 |
| - | - | secsi/dockerized-android-core-bare |
| - | - | secsi/docker-android-core-real-device |
| Komponente | ENV-Name | Standardwert | Beschreibung |
|---|
| Core | TARGET_PORT | 6080 | Websockify-Port |
| Core | CUSTOM_APP_DEFAULT_PORT | 4242 | Node.js-Backend-Port |
| Core | DEVICEINFO | Nicht gesetzt, verhält sich wie true | Aktiviert/Deaktiviert die Geräteinformationsfunktion |
| Core | TERMINAL | Nicht gesetzt, verhält sich wie true | Aktiviert/Deaktiviert die Terminalfunktion |
| Core | APK | Nicht gesetzt, verhält sich wie true | Aktiviert/Deaktiviert die Funktion zum Installieren von APKs |
| Core | FORWARD | Nicht gesetzt, verhält sich wie true | Aktiviert/Deaktiviert die Portweiterleitungsfunktion |
| Core | SMS | Nicht gesetzt, verhält sich wie true | Aktiviert/Deaktiviert die SMS-Emulationsfunktion |
| Core | REBOOT | Nicht gesetzt, verhält sich wie true | Aktiviert/Deaktiviert die Neustartfunktion |
| Core | INSTALL_ON_STARTUP | false | Aktiviert/Deaktiviert die Funktion, die alle APKs im Ordner /root/dockerized-android/apk installiert |
| Core | ENABLE_UNKNOWN_SOURCES | false | Aktiviert die Installation aus unbekannten Quellen |
| Core | REAL_DEVICE_SERIAL | nicht gesetzt | Wenn mehr als ein physisches Gerät verbunden ist, muss dieser Wert auf die Seriennummer des zu steuernden Geräts gesetzt werden, da sonst alle anderen Funktionen nicht funktionieren |
| Instance Manager | DEFAULT_PORT | 7373 | Port der REST-API |
| Komponente | Port # | Beschreibung |
|---|
| Core | 5555 | ADB-Port |
| Core | 4242 | Node.js-Backend |
| Core | 6080 | Websockify (für noVNC) |
| UI | 80 | Frontend |
| Instance Manager | 7373 | REST-API |