Dinge, die waren, und Dinge, die sind und Dinge, die noch sein mögen - ALEX ist nun verfügbar!

Braucht es wirklich noch ein Tool, das ADB-Befehle im eine grafische Oberfläche verpackt?
Mit Magnet Acquire, Avilla Forensics, android_triage, Arsenic und einigen weiteren Vertretern gibt es bereits kostenfreie Tools, die über ADB Extraktionen von Android Geräten erlauben.
Ich habe mich trotzdem für die Erstellung eines eigenen Tools entschieden. Die Entwicklung von UFADE im Rahmen meiner Masterarbeit hat zwar einiges an Zeit gekostet, aber auch eine Menge Spaß gemacht. Da ich eine ähnlichen Funktionsumfang und eine sehr ähnliche grafische Oberfläche für mein entsprechendes Android Tool vorgesehen habe, konnte ich einige Teile des Codes mit kleinen Anpassungen direkt wiederverwenden. Im Ergebnis sollte ein Open Source Tool entstehen, dass auf Windows, Linux und macOS lauffähig ist und sich dabei quasi genau wie UFADE bedienen lässt - ich präsentiere: ALEX.
Der Android Logical Extractor kann kostenfrei über GitHub bezogen werden und ist als Ergänzung zu kommerziellen Anwendungen gedacht.
Noch befindet sich alles in einem sehr frühen Stadium und wahrscheinlich wird es noch zu einigen Fehlern kommen. Hier benötige ich definitiv Hilfe von der DFIR Community. Sei es durch Tests mit einer breiten Palette an Testgeräten oder durch eigene Beiträge zum Code.
Zu gegebener Zeit soll natürlich auch eine Dokumentation für ALEX auf dieser Website zu finden sein. Bis dahin sind hoffentlich noch einige Features hinzugekommen.
Hier soll nur ein kurzer Abriss der aktuellen Features erfolgen:
Für Android und WearOS-Geräte (auch FireOS und andere Android-Derivate) werden die meisten Features angeboten.

Reporting Options
... bieten wie auch bei UFADE die Möglichkeit, die angezeigten Geräteinformationen zusammen mit einer Liste der installierten Apps im Text- oder PDF Format auszugeben. Neben der Bundle-Bezeichnung und der Version wird hierbei auch die Installationsquelle ausgegeben. So ist direkt ersichtlich, ob eine App über den Play-Store oder einen anderen Installer bezogen wurde. Bei Ubuntu Touch Geräten werden ebenfalls installierte Apps und die jeweilige Version ausgegeben.
Acquisition Options (Android, WearOS, FireOS)

Pull "sdcard"
... erlaubt die Extraktion des internen Speichers des Nutzers unabhängig davon, ob USB-MTP aktiviert wurde oder nicht. Der Name dieser Funktion kann eventuell etwas verwirrend sein. Unter "/sdcard" ist für gewöhnlich ein Softlink auf die frei einsehbaren Nutzerdaten zu finden, auch wenn das Verzeichnis eigentlich unter "/storage/emulated/0" gemounted wurde. In dieser Sicherung sind überwiegend Medien enthalten.
ADB Backup
Zwar verliert das Backup über ADB immer mehr an Bedeutung, einige Informationen wie gespeicherte WLAN Passwörter können aber auch bei der Extraktion neuerer Geräte enthalten sein. ALEX bietet die Möglichkeit die Backup-Optionen über Checkboxen zu modifizieren. Ist "shared" aktiviert, werden auch hierbei die Nutzerdaten aus "sdcard" gesichert. Dies kann bei der Analyse mit Forensik-Tools vorteilhaft sein, da die einzelnen Dateien nicht im Dateisystem zwischengespeichert werden und so keine Modifikation der Zeitstempel erfolgt.
Logical+ (UFED Style)
Diese Form des Backups versucht die essentiellen Bestandteile der erweiterten logischen Extraktion der Software UFED4PC nachzubilden. Es beinhaltet:
- das "sdcard" Verzeichnis (in einem Zip-Archiv)
- ein ADB Backup - ohne sdcard (im Zip-Archiv)
- eine Report.xml mit den live abgefragten Inhalten: Anrufe, Kontakte, SMS, Kalender (im Zip-Archiv)
- eine "InstalledAppsList.txt" mit einer Liste aller Anwendungen
- eine ufd-Datei für den Reibungslosen Import in Cellebrite Physical Analyzer ©
UFED4PC © nutzt für die logische Extraktion einen Agenten (also eine zu installierende APK). ALEX versucht hingegen, die Informationen über Abfragen der Content-Provider zu rekonstruieren.
Dies kann Vorteilhaft sein, wenn die Installation des Agents auf dem Endgerät nicht möglich ist. Die Datenextraktion über einen Agent erlaubt jedoch einen direkteren Zugriff auf die abzufragenden Informationen.
Das folgende Bild zeigt eine Logical+ Sicherung, die über den Physical Analyzer eingelesen wurde:

Partially Reconstructed Filesystem Backup
Genau wie bei UFADE Versuche ich hier das Dateisystem möglichst so zu rekonstruieren, wie es auf dem Gerät tatsächlich vorliegt. Aktuell beinhaltet dies:
- das sdcard Verzeichnis
- "system" Verzeichnisse, für die der Shell User die Berechtigung hat
- Apps des "system" Users und das "/data/system" Verzeichnis bei Geräten, die für CVE-2024-31317 anfällig sind (einige Android 9-11 Geräte)
- Rekonstruierte Datenbanken und Dateien (calendar2.db, calllog.db, contacts2.db, mmssms.db und packages.list)
- eine "device_info_alex.json" mit extrahierten Geräteinformationen
Diese Optionen sind einzeln wählbar. Bei den rekonstruieren Datenbanken ist zu beachten, dass diese inhaltlich nicht identisch mit den Dateien sind, die bei einer Full Filesystem Extraktion vorliegen würden. Die Datenbanken werden über Content-Provider Abfragen nachgebaut und stammen damit von einer API, die Inhalte der tatsächlichen Datenbanken ausgibt. Die Rekonstruktion im Sqlite Format dient der besseren Kompatibilität mit verschiedenen Analysetools, die diese Dateien erwarten. Übrigens verfolgt auch Magnet Acquire diesen Ansatz.
Zukünftig soll hier ebenfalls ein ADB-Backup erstellt und entsprechend der ursprünglichen Dateipfade in die Sicherung integriert werden.
Das nachfolgende Bild zeigt eine PRFS-Sicherung, die über ALEAPP eingelesen wurde:
(Der Parser für die "device_info_alex.json" wurde bereits vom ALEAPP-Team übernommen und ist im nächsten Release enthalten.)

Acquisition Options (Ubuntu Touch, AsteroidOS)
Bei den alternativen Betriebssystemen Ubuntu Touch (Smartphones, Tablets) und AsteroidOS (Smartwatches) unterscheiden sich die angebotenen Extraktionsmöglichkeiten.

Pull "Home"
Nutzerdaten sind in klassischen Linux-Systemen überwiegend im "Home" Verzeichnis zu finden. Daher wird bei diesen Geräten statt "sdcard" das Home-Verzeichnis extrahiert.
Physical Acquisition
Sowohl Ubuntu Touch als auch AsteroidOS erlauben die Anmeldung als "root" User. Dieser hat Zugriff auf die Block-Devices und kann so eine Bit-für-Bit Kopie des Datenspeichers anstoßen. Bei Ubuntu Touch ist für diese Form der Sicherung das "sudo" Passwort erforderlich. Für gewöhnlich handelt es sich dabei um den Sperrcode des Geräts. Standardmäßig ist der Speicher dieser Systeme unverschlüsselt.


Derzeit ist mir keine andere Software bekannt, die Extraktionsmöglichkeiten für Ubuntu Touch anbietet.
Logging Options

Diese Optionen werden für Android, WearOS und FireOS angeboten.
Nähere Informationen zu den einzelnen Logging-Systemen (und anderen Artefakten) können im Blog von Mattia Epifani gefunden werden.
Advanced Options

Take Screenshots
Wie der Name es vermuten lässt, kann hier der aktuelle Bildschirminhalt des Geräts als Screenshot erfasst werden. Neben dem eigentlichen Bild im PNG-Format wird auch eine Textdatei erstellt, die den Hash (Sha256) der PNG enthält. Außerdem wird eine PDF generiert, die einige Geräteinformationen zusätzlich zum Screenshot ausgibt.
Das Vorgehen bei der Erstellung hängt auch hier vom angeschlossenen System ab. Bei aktuellen Android-Systemen wird das Bild ohne Umwege über ADB ausgegeben. Ältere Systeme (z.B. Android 6) erfordern die Erstellung einer temporären Bilddatei auf dem Gerät. Ähnlich verhält es sich bei AsteroidOS. Ubuntu Touch macht aktuell die größten Schwierigkeiten in Bezug auf Screenshots - Hier kann auf älteren Systemen der Framebuffer angesprochen werden um Inhalte von Apps (nicht den gesamten Bildschirm) auszugeben. Ich werde hier bei Gelegenheit ein wenig Arbeit investieren um zuverlässig Screenshots zu erstellen ohne zusätzliche Software zu installieren. Bis dahin können Screenshots auf dem Gerät auch über laut und leise erzeugt werden.





Chat Capture
Die Screenshot-Funktion wird hier um die Möglichkeit erweitert, ganze Chats automatisiert zu erfassen. Zwischen den einzelnen Aufnahmen werden Swipe-Bewegungen simuliert die je nach gewählter Erfassungsrichtung von der Mitte aus nach oben oder unten ausgeführt werden. So verschiebt sich die aktuelle Ansicht jeweils um einen halben Bildschirminhalt. Es könnten andere Ausgangspunkte gewählt werden, um größere Sprünge (also einen ganzen Bildschirminhalt) zu erlauben. Der Ansatz, von der Mitte aus einen Swipe auszuführen funktionierte bei den bisher getesteten Apps jedoch am zuverlässigsten. Bislang ist dieses Feature für Android, WearOS und FireOS verfügbar.
Query Content Providers
Für dieses Feature habe ich mich zu einem großen Teil bei Mattia Epifanis android_triage bedient.
In seinem Skript werden bereits zahlreiche Anfragen gelistet. Diese habe ich nur um einige wenige erweitert. Außerdem habe ich die Anfragen in eine JSON-Datei ausgelagert. So kann nach Belieben mit neuen Anfragen experimentiert werden, ohne Veränderungen am Code von ALEX vornehmen zu müssen.
Auch wird dem Nutzer die Wahl gelassen, ob die Informationen im Textformat (Wie sie von der Konsole zurückgegeben werden) oder als JSON ausgegeben werden sollen.


Einige Beispiele für mögliche Inhalte:
- SMS
- MMS
- Anrufliste
- Kontaktliste
- Kalendereinträge
- Geräteeinstellungen
- Medieninformationen (mit Zeitstempeln)
Aktuell versucht ALEX eine Verbindung mit dem ersten Gerät in der "devices" Liste aufzubauen. So kann auch eine Verbindung über WiFi hergestellt werden und im Anschluss ALEX für die Extraktion genutzt werden. Ich denke es wird zukünftig auch möglich sein, eine WiFi-Verbindung direkt über die ALEX-Oberfläche aufzubauen.
Ideen für neue Features gibt es definitiv genug. Dennoch freue ich mich immer über Anregungen und Erfolgsmeldungen!
