Android-Dateisystem

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.

VerzeichnisNameBeschreibung
/binBinariesEnthält ausführbare Binärdateien (Binary), die von allen Benutzern verwendet werden können.
/sbinSystem BinariesÄhnlich wie /bin, aber für Binärdateien, die nur von Systemadministratoren oder root-Benutzern verwendet werden sollen.
/devDevicesEnthält Gerätedateien, die das Betriebssystem verwendet, um auf Hardwaregeräte zuzugreifen.
/dataDataEnthält benutzerspezifische Daten, die von Anwendungen und Benutzern erstellt oder gespeichert werden.
/libLibraryEnthält Bibliotheksdateien, die von Programmen für die Laufzeit verwendet werden.
/mntMountEin Verzeichnis, das als Mount-Punkt für temporäre Dateisysteme oder externe Geräte dient.
/etceditable text configurationEnthält Konfigurationsdateien für das Betriebssystem und verschiedene Anwendungen.
/rootDaten von RootDaten des Systemverwalters.
/procProcessEin 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.

InhaltBeschreibung
/dev/nullWenn 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/ttyDies bezieht sich auf das Standard-Terminalgerät.
/dev/ttyGS0Serielle Schnittstellen (Serial General Purpose) für die Kommunikation über USB.
/dev/ttySAC0Weitere seriell Schnittstelle.
/dev/zeroQuelle für binäre Nullen
/dev/randomQuelle 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.  

ToolBeschreibung
GrepSucht nach Zeichenfolgen in Dateien.
GunzipEntpackt komprimierte Dateien im Gzip-Format.
IfconfigZeigt Informationen über Netzwerk-Schnittstellen an.
HostnameZeigt den Hostnamen des Geräts an.
DdKopiert und konvertiert Dateien.
FindSucht nach Dateien in einem Verzeichnisbaum.
AwkEine Textverarbeitungstool.
BugreportErstellt einen Fehlerbericht.
ChmodÄndert Berechtigungen von Dateien und Verzeichnissen.
CutExtrahiert Einträge aus Textdateien.
DateZeigt das aktuelle Datum an.
EchoGibt Text aus.
IpZeigt und konfiguriert Netzwerk-Interfaces und Routing.
IptablesKonfiguriert IPv4-Packet-Filterregeln.
LogcatZeigt Logmeldungen des Android-Geräts an.
MkdirErstellt ein Verzeichnis.
MvVerschiebt Dateien oder Verzeichnisse.
NetstatZeigt Netzwerk-Verbindungen, Routing-Tabellen usw. an.
PsZeigt laufende Prozesse an.
RmLöscht Dateien.
RmdirLöscht Verzeichnisse.
CatGibt u.a. den Inhalt von Dateien aus.
TailGibt 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:

NameBeschreibung
attr/Verzeichnis, das Attribute des aktuellen Prozesses enthält.
auxvInformationen über die Ausführungsumgebung des aktuellen Prozesses.
cgroupInformationen über die Kontrollgruppen des aktuellen Prozesses.
cmdlineDatei, die die Befehlszeile enthält, die zum Starten des aktuellen Prozesses verwendet wurde.
commBefehl, der den aktuellen Prozess ausführt.
coredump_filterSpezifikationen für Core-Dump.
cpusetInformationen über die CPU-Zugehörigkeit des aktuellen Prozesses.
environUmgebungsvariablen des aktuellen Prozesses.
exeSymbolischer 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.
ioInformationen über die Ein-/Ausgabestatistik des aktuellen Prozesses.
limitsRessourcenlimitierungen des aktuellen Prozesses.
loginuidBenutzer-ID für den aktuellen Prozesses.
map_files/Enthält Informationen über Datei-Maps des aktuellen Prozesses.
mapsInformationen über den virtuellen Adressraum des aktuellen Prozesses.
mountinfoInformationen über die gemounteten Dateisysteme des aktuellen Prozesses.
mountsGemounteten Dateisysteme des aktuellen Prozesses.
net/Verzeichnis, das Informationen über Netzwerkverbindungen des aktuellen Prozesses enthält.
ns/Enthält den Namespaces des aktuellen Prozesses.
rootLink, der auf das Wurzelverzeichnis des Prozesses zeigt.
schedDatei, die Informationen über die Scheduling-Prioritäten des aktuellen Prozesses enthält.
sessionidSession-ID des aktuellen Prozesses.
smapsInformationen über den Speicherverbrauch des aktuellen Prozesses (erweitert).
stackEnthält Stack des aktuellen Prozesses.
statusStatus des aktuellen Prozesses.
syscallLetzter Systemaufruf des aktuellen Prozesses.
task/Tasks des aktuellen Prozesses.
timerslack_nsTimer Slack des Kernels in Nanosekunden.
wchanInformationen ü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.