Eine Einführung in das Android-Dateisystem
Im Wurzelverzeichnis finden sich unter Android einige Dateien und Ordner, die viele Parallelen zum klassischen Linux-Betriebssystem aufweisen. Die folgende Abbildung gibt einen kurzen Überblick über einige der zentralen Verzeichnisse im Wurzelverzeichnis eines Android-Geräts.
Die meiner Meinung nach wichtigen Verzeichnisse wurden blau hervorgehoben. Zur allgemeinen Orientierung werden im Folgenden diese Verzeichnisse etwas genauer betrachtet. Diese Beschreibung soll einen Einblicke in die Funktionen und die darin enthaltenen Dateien der Verzeichnisse geben, um ein tieferes Verständnis für die Struktur und Organisation des Android-Dateisystems zu vermitteln.
Verzeichnis | Name | Beschreibung |
---|---|---|
/bin | Binaries | Enthält ausführbare Binärdateien (Binary), die von allen Benutzern verwendet werden können. |
/sbin | System Binaries | Ähnlich wie /bin, aber für Binärdateien, die nur von Systemadministratoren oder root-Benutzern verwendet werden sollen. |
/dev | Devices | Enthält Gerätedateien, die das Betriebssystem verwendet, um auf Hardwaregeräte zuzugreifen. |
/data | Data | Enthält benutzerspezifische Daten, die von Anwendungen und Benutzern erstellt oder gespeichert werden. |
/lib | Library | Enthält Bibliotheksdateien, die von Programmen für die Laufzeit verwendet werden. |
/mnt | Mount | Ein Verzeichnis, das als Mount-Punkt für temporäre Dateisysteme oder externe Geräte dient. |
/etc | editable text configuration | Enthält Konfigurationsdateien für das Betriebssystem und verschiedene Anwendungen. |
/root | Daten von Root | Daten des Systemverwalters. |
/proc | Process | Ein virtuelles Dateisystem, das Informationen über laufende Prozesse und das System bereitstellt. |
/dev
Aus Administrationssicht ist das /dev/ – Verzeichnis elementar. Es ist ein wesentlicher Bestandteil eines Linux-basierten Betriebssystems. Es steht für „Device“ und enthält eine Vielzahl von speziellen Dateien, die das Betriebssystem verwendet, um auf Hardwaregeräte und verschiedene virtuelle Schnittstellen zuzugreifen. Diese Dateien dienen als Schnittstelle zwischen der Software und der Hardware des Systems. Es enthält beispielsweise folgende Inhalte:
- Datenbusse (z.B. I2C)
- Industrial-Input-Output-Subsystem (IIO)
- /block/
- Serielle Terminals
- Videogeräte
- USB-Geräte
- Pseudoterminals
Die folgende Abbildung soll eine Übersicht über, zumindest meiner Meinung nach, alle zentralen Inhalte (grün) des /dev/ – Verzeichnisses geben.
Inhalt | Beschreibung |
---|---|
/dev/null | Wenn Daten an 2>/dev/null weitergeleitet werden, erfolgt die sofortige Löschung. Dabei werden die Daten nicht gespeichert. |
/dev/tty* | Bei den tty-Variationen handelt es sich um spezielle Geräte in einem Unix-basierten Betriebssystem, die auf die Terminal-Eingaben und -Ausgaben (Input/Output) verweisen. |
/dev/tty | Dies bezieht sich auf das Standard-Terminalgerät. |
/dev/ttyGS0 | Serielle Schnittstellen (Serial General Purpose) für die Kommunikation über USB. |
/dev/ttySAC0 | Weitere seriell Schnittstelle. |
/dev/zero | Quelle für binäre Nullen |
/dev/random | Quelle von Zufallszahlen (eher Pseudozufallszahlen) |
/dev/block/ | Verzeichnis, in dem sämtliche Blockgeräte wie sda und deren Partitionen wie sda1 enthalten sind. |
/dev/iio:device0 (Zahlen fortlaufend) | Dabei handelt es sich um ein Gerät, das ein Sensorgerät oder Sensorbus repräsentiert. |
/dev/block
An dieser Stelle möchte ich das Block-Verzeichnis nochmal aufgreifen und genauer betrachten. Es beinhaltet alle Blockgeräte des Android-Geräts. Somit sind darin alle Partitionen aufgeführt, die angelegt und vom System genutzt werden. Bei einer logischen oder physikalischen forensischen Sicherung kann dieses Verzeichnis als zentrale Anlaufstelle dienen. Die folgende Abbildung zeigt beispielhaft den Inhalt des /dev/block/ – Verzeichnisses bei einem Samsung Galaxy-Gerät.
Ab hier stellt sich die Frage – Welche Partition ist für was da? Um diese Frage zu beantworten kann der Ordner „by-name“ herangezogen werden. Darin finden sich zentrale Verlinkungen von Partitionen wieder. Die folgende Abbildung zeigt beispielhaft den Inhalt dieses Ordners:
/bin
Das Verzeichnis „Binaries“ enthält ausführbare Binärdateien, die von allen Benutzern verwendet werden können. Dabei handelt es sich speziell im Bereich der Live-Forensik von Android-Geräten um einen zentralen Ort, da sich darin die „Bordmittel“ des Geräts befinden. Möchte ein Nutzer ein Befehlszeilentool wie „logcat“ oder „find“ verwenden, muss dieses Tool zuerst auf dem Android-System vorhanden sein. Das /bin – Verzeichnis enthält dabei die benötigten Informationen, was für Tools auf dem Gerät verfügbar sind. Zusätzlich zu /bin muss auch noch /sbin betrachtet werden, da darin in vielen Fällen ebenfalls nochmal Binaries hinterlegt sind.
Um die Relevanz für die Live-Forensik nochmal zu unterstreichen, werden in der folgenden Tabelle einige Tools aufgeführt, die in meiner App „ErrorCode404“ eingesetzt werden. An dieser Stelle muss jedoch erwähnt werden, dass bei unterschiedlichen Android-Versionen manche Tools fehlen, oder zusätzliche Binaries vorhanden sind. Daher ist ein Blick in dieses Verzeichnis bei einer Nutzung bestimmter Bordmittel sehr zu empfehlen.
Tool | Beschreibung |
---|---|
Grep | Sucht nach Zeichenfolgen in Dateien. |
Gunzip | Entpackt komprimierte Dateien im Gzip-Format. |
Ifconfig | Zeigt Informationen über Netzwerk-Schnittstellen an. |
Hostname | Zeigt den Hostnamen des Geräts an. |
Dd | Kopiert und konvertiert Dateien. |
Find | Sucht nach Dateien in einem Verzeichnisbaum. |
Awk | Eine Textverarbeitungstool. |
Bugreport | Erstellt einen Fehlerbericht. |
Chmod | Ändert Berechtigungen von Dateien und Verzeichnissen. |
Cut | Extrahiert Einträge aus Textdateien. |
Date | Zeigt das aktuelle Datum an. |
Echo | Gibt Text aus. |
Ip | Zeigt und konfiguriert Netzwerk-Interfaces und Routing. |
Iptables | Konfiguriert IPv4-Packet-Filterregeln. |
Logcat | Zeigt Logmeldungen des Android-Geräts an. |
Mkdir | Erstellt ein Verzeichnis. |
Mv | Verschiebt Dateien oder Verzeichnisse. |
Netstat | Zeigt Netzwerk-Verbindungen, Routing-Tabellen usw. an. |
Ps | Zeigt laufende Prozesse an. |
Rm | Löscht Dateien. |
Rmdir | Löscht Verzeichnisse. |
Cat | Gibt u.a. den Inhalt von Dateien aus. |
Tail | Gibt die letzten Zeilen von Dateien aus. |
Touch | Ändert die Zugriffs- und/oder Änderungszeit einer Datei. |
Eine gute Beschreibung zu einigen der aufgeführten Tools kann der Webseite Ubuntuusers entnommen werden.
/sbin
Der Ordner /sbin ist ein Verzeichnis unter Android, das Systemprogramme enthält, die für das Booten, die Systemverwaltung und die Wartung des Betriebssystems nötig sind. Im Gegensatz zum allgemeinen bin-Verzeichnis, enthält /sbin Programme, die normalerweise von Systemadministratoren oder während des Systemstarts verwendet werden. Die folgende Abbildung zeigt den Inhalt des Ordners /sbin des Android-Geräts. Die Inhalte unterscheiden sich unter anderem in Abhängigkeit von der Android-Version oder auch dem angewendeten Rooting-Verfahren für das Gerät.
Dadurch, dass das hier genutzte Smartphone der Marke Samsung mit Magisk gerootet wurde, können in diesem Verzeichnis entsprechende Binaries gefunden werden. Ebenfalls fällt der Eintrag „knox_changer“ auf, der auf das Tool Samsung-Knox zurückführt. Dieses Tool ist war standartmäßig auf diesem Samsung-Gerät vorhanden und wurde nicht nachinstalliert.
/proc
Das Verzeichnis /proc stellt in gewissermaßen eine Schnittstelle zum Kernel dar. Unter Android-Geräten bietet dieses Verzeichnis eine Vielzahl von Informationen über den aktuellen Systemzustand wie unter anderem Prozessinformationen, Hardwarekonfigurationen und Netzwerkeinstellungen.
Da diese Thematik sehr umfangreich ist, möchte ich an dieser Stelle lediglich zwei zentrale Bereiche beleuchten. Zuerst werde ich diejenigen Prozesse betrachten, die als Prozess-IDs im Verzeichnis /proc/ dargestellt werden. Anschließend werden noch die Dateien behandelt, die Auskunft über aktuelle Hardware- und Softwareinformationen beinhalten.
Prozess-IDs
Wie schon erwähnt, werden Prozesse unter Android als numerischer Wert im Verzeichnis /proc/ angelegt. Die folgende Abbildung zeigt einen Teil der laufenden Prozesse auf dem Testgerät:
Prozesse mit numerischem Dateinamen
Was sind die zentralen Inhalte dieser Unterverzeichnisse? Für die folgende Auflistung wurde ein neuer Prozess mit der Nummer 26697 gestartet. Dieser ist nun für die App „ErrorCode 404“ reserviert. Das Verzeichnis 26697 beinhaltet insgesamt 43 Ordner/Dateien, auf die ich an dieser Stelle nicht in vollem Umfang eingehen werde. Jedoch soll die folgende Auflistung einen guten Überblick über die Inhalte geben:
Name | Beschreibung |
---|---|
attr/ | Verzeichnis, das Attribute des aktuellen Prozesses enthält. |
auxv | Informationen über die Ausführungsumgebung des aktuellen Prozesses. |
cgroup | Informationen über die Kontrollgruppen des aktuellen Prozesses. |
cmdline | Datei, die die Befehlszeile enthält, die zum Starten des aktuellen Prozesses verwendet wurde. |
comm | Befehl, der den aktuellen Prozess ausführt. |
coredump_filter | Spezifikationen für Core-Dump. |
cpuset | Informationen über die CPU-Zugehörigkeit des aktuellen Prozesses. |
environ | Umgebungsvariablen des aktuellen Prozesses. |
exe | Symbolischer Link, der auf das ausführbare Programm des Prozesses zeigt. |
fd/ | Beinhaltet Dateideskriptoren des aktuellen Prozesses. |
fdinfo/ | Enthält Informationen über Dateideskriptoren des aktuellen Prozesses. |
io | Informationen über die Ein-/Ausgabestatistik des aktuellen Prozesses. |
limits | Ressourcenlimitierungen des aktuellen Prozesses. |
loginuid | Benutzer-ID für den aktuellen Prozesses. |
map_files/ | Enthält Informationen über Datei-Maps des aktuellen Prozesses. |
maps | Informationen über den virtuellen Adressraum des aktuellen Prozesses. |
mountinfo | Informationen über die gemounteten Dateisysteme des aktuellen Prozesses. |
mounts | Gemounteten Dateisysteme des aktuellen Prozesses. |
net/ | Verzeichnis, das Informationen über Netzwerkverbindungen des aktuellen Prozesses enthält. |
ns/ | Enthält den Namespaces des aktuellen Prozesses. |
root | Link, der auf das Wurzelverzeichnis des Prozesses zeigt. |
sched | Datei, die Informationen über die Scheduling-Prioritäten des aktuellen Prozesses enthält. |
sessionid | Session-ID des aktuellen Prozesses. |
smaps | Informationen über den Speicherverbrauch des aktuellen Prozesses (erweitert). |
stack | Enthält Stack des aktuellen Prozesses. |
status | Status des aktuellen Prozesses. |
syscall | Letzter Systemaufruf des aktuellen Prozesses. |
task/ | Tasks des aktuellen Prozesses. |
timerslack_ns | Timer Slack des Kernels in Nanosekunden. |
wchan | Informationen über den „waiting channel“. |
Hardware- und Softwareinformationen
Zusätzlich zu den oben beschriebenen Prozessen finden sich im Verzeichnis /proc/ zusätzliche Informationen über die Hard- und Software. Auch an dieser Stelle können auf Grund des inhaltlichen Umfangs nicht alle Dateiinhalte dargestellt und detailliert erklärt werden. Jedoch möchte ich auf einige zentrale Dateien eingehen, die meiner Meinung nach wichtige Anlaufstellen darstellen. Die folgende Abbildung zeigt neben den Prozessen, in Form von Prozess-IDs, auch die erwähnten Dateien und Verzeichnisse:
Auf der weiterführenden Seite Hard- und Softwareinfos in /proc werden diese Inhalte näher beleuchtet.
/data
Das Verzeichnis /data ist ein zentraler Bestandteil des Android-Betriebssystems und spielt eine Schlüsselrolle bei der Verwaltung von Benutzerdaten, Systemeinstellungen und der Ausführung von Apps. Die nachfolgende Auflistung zeigt den Inhalt des /data – Verzeichnisses mit den jeweiligen Permissions:
drwxrwx--x ./
drwxrwxrwt ../
drwxrwx--x .cas/
-rw------- .cleanAPKs_version
srwx------ .diag_stream
srwx------ .diagsocket_stream
drwx------ .fido/
-rw------- .layout_version
srwx------ .socket_stream
srwxrwx--x .tcpdump_socket
drwxrwxr-x DownFilters/
drwx------ adb/
drwxrwxr-x anr/
drwxrwx--x app/
drwx------ app-asec/
drwxrwx--x app-ephemeral/
drwxrwx--x app-lib/
drwxrwx--x app-private/
drwxrwxr-x app_fonts/
drwx------ backup/
drwxrwxr-x binder/
drwxrwx--- bio/
drwxr-xr-x bootchart/
drwxrwx--- cache/
drwxrwxr-x clipboard/
drwx------ custom_image/
drwxrwx--x dalvik-cache/
drwxrwx--x data/
drwxrwx--- drm/
drwxrwx--x enc_user/
drwxrwx--- firmware/
drwxrwxr-x fota/
drwxrwx--- hostapd/
drwxrwx--x knox/
drwxr-x--x local/
drwxrwxr-x log/
drwxrwx--- lost+found/
drwxrwx--- lxd/
drwxrwx--- media/
drwxrwx--- mediadrm/
drwxrwx--t misc/
drwxrwx--t misc_ce/
drwxrwx--t misc_de/
drwxrwx--- mptcp/
drwxrwx--- nfc/
drwxr-x--- nfc_log/
drwxrwx--x ota/
drwxrwx--- ota_package/
drwxr--r-x overlays/
drwx------ property/
drwxrwx--x resource-cache/
drwxrwx--x sec/
drwx-----x security/
drwxr-xr-x snap/
drwxrwx--- snd/
drwx------ ss/
-rw------- ss_conn_daemon.pid
drwxrwxr-x system/
drwxrwx--- system_ce/
drwxrwx--- system_de/
drwxrwx--- tad/
drwxrwx--x tombstones/
drwx--x--x user/
drwx--x--x user_de/
drwxrwx--x vendor/
drwxrwx--x vendor_ce/
drwxrwx--x vendor_de/
drwxrwx--- wifi/
Speziell das Unterverzeichnis /data/data stellt an dieser Stelle für forensische Maßnahmen ein zentraler Ansatzpunkt dar. In /data/data werden unter Android sämtliche Dateien der installierten Apps gespeichert. Abgängig von der Applikation selbst könnten unter anderem die folgenden Inhalte zu finden sein:
- Benutzerdaten die eine App generiert oder vom Benutzer eigegeben wurden.
- Datenbanken mit Benutzer oder Entwicklerinformationen
- Cache-Daten von Apps
- Einstellungsdaten von Apps
- Logdateien
- Daten von Drittanbieter-Bibliotheken
Da der Fokus auf dieser Seite auf das Android-Dateisystem gerichtet ist, möchte ich für weitere Informationen gerne auf die Seite App-Informationen in /data/data verweisen.