Fragiles Sicherheitskonzept

Androiden unter Beschuss

13.10.2011
Von Ronny Sackmann

Kein Zugriff auf fremde Verzeichnisse

Zygote startet Applikationen im Kontext der in dieser Datei festgelegten Benutzeridentität. Die Abschirmung der einzelnen Applikationen untereinander übernimmt die Prozessisolation des Linux-Kernels.

Im Normalfall laufen alle Android-Anwendungen isoliert ab.
Im Normalfall laufen alle Android-Anwendungen isoliert ab.
Foto: VikaSuh/Shutterstock, Buchstabensuppe

Dieser Sandboxmechanismus greift nicht nur auf Prozess-, sondern auch auf Dateisystemebene. Neben einer eindeutigen Benutzeridentität weist der Paketmanager bei der Installation jeder Applikation ein eigenes abgeschlossenes Heimatverzeichnis unterhalb von /data/data/ zu, in welchem die Applikationen ihre Daten ablegen können. Andere Applikationen oder Prozesse haben auf Daten in diesem Verzeichnis standardmäßig keinen Zugriff. Die Zugriffskontrolle erfolgt auf Basis der klassischen UNIX Discretionary Access Control (DAC). Bei diesem Sicherheitskonzept weist das Betriebssystem jeder Datei und jedem Verzeichnis einen Besitzer zu und vergibt jeweils für den Besitzer (UID), die Gruppe (GID) und alle anderen Lese-, Schreib-, und Ausführungsberechtigungen. Die Entscheidung, ob eine Anwendung auf eine Datei oder ein Verzeichnis zugreifen darf, trifft das Betriebssystem auf Basis der Benutzeridentität. Listing 2 zeigt das Datenverzeichnis der Android-Applikationen "Twitter" inklusive Zugriffsberechtigungen.

root@android # ls -R -l /data/data/com.twitter.android
.:
drwxr-xr-x app_65 app_65 2011-08-08 17:01 com.twitter.android
/data/data/com.twitter.android:
drwxrwx--x app_65 app_65 2011-08-08 17:01 shared_prefs
drwxrwx--x app_65 app_65 2011-08-08 17:01 databases
drwxr-xr-x system system 2011-08-08 17:01 lib
/data/data/com.twitter.android/shared_prefs:
-rw-rw---- app_65 app_65 173 2011-08-08 17:04 HomeTabActivity.xml
-rw-rw---- app_65 app_65 154 2011-08-08 17:04 TimelineActivity.xml
-rw-rw---- app_65 app_65 388 2011-08-08 17:04 com.twitter.android_preferences.xml
-rw-rw---- app_65 app_65 113 2011-08-08 17:02 search_prefs.xml
/data/data/com.twitter.android/databases:
-rw-rw---- app_65 app_65 35840 2011-08-08 17:04 236877107.db
-rw-rw---- app_65 app_65 14336 2011-08-08 17:04 global.db
-rw-rw---- app_65 app_65 37888 2011-08-08 17:02 0.db

Listing 2: Zugriffsberechtigungen auf das Datenverzeichnis einer Applikation

Da das Betriebssystem jede Applikation unter einer eindeutigen Benutzeridentität ausführt, ist der Zugriff auf Daten anderer Applikationen nur möglich, wenn Leseberechtigungen für "alle" gesetzt sind. Diese Leseberechtigung können Entwickler beim Anlegen einer Datei auf dem internen Speicher durch explizites Setzen des Flags MODE_WORLD_READABLE angeben (Listing 3). Sollen Daten nur der eigenen Applikation zugänglich sein, muss man beim Speichern das Flag MODE_PRIVATE setzen.

FileOutputStream fos = openFileOutput(FILENAME, Context.MODE_WORLD_READABLE);
fos.write(string.getBytes());
fos.close();

Listing 3: Setzen der Zugriffsberechtigung beim Anlegen einer Datei

Eine Ausnahme bilden Applikationen, denen der Paketmanager bei der Installation dieselbe Benutzeridentität zugewiesen hat. Dies ist möglich, wenn Applikationen dieselbe Signatur aufweisen - d.h. wenn Sie vom selben Entwickler stammen. Derartige Applikationen besitzen eine sogenannte SharedUserId (vgl. Listing 1). Mit derselben Benutzeridentität ausgestattet, können die Applikationen gegenseitig auf die lokal gespeicherten Daten zugreifen.