Fragiles Sicherheitskonzept

Androiden unter Beschuss

13.10.2011
Von Ronny Sackmann

Spezialfall SD-Karten

Eine weitere Besonderheit unter Android bilden externe Speichermedien wie beispielsweise SD-Karten. Legen Applikationen Daten auf einem externen Speichermedium ab, sind diese für alle Applikationen lesbar. Ursache hierfür ist das File Allocation Table (FAT) Dateisystem, mit dem die externen Datenträger in der Regel formatiert sind. Die Berechtigungen für diesen Datenspeicher legt das Betriebssystem mit Hilfe von Mount-Optionen beim Einbinden des Datenträgers global fest. Listing 4 zeigt die Ausgabe von mount auf einem Android-Gerät. Die Mount-Optionen fmask und dmask bestimmen dabei die Zugriffsrechte für alle Dateien und Verzeichnisse der SD-Karte. Standardmäßig sind diese so konfiguriert, dass alle Applikationen Zugriff auf die gespeicherten Daten der SD-Karte haben. Mitglieder der Gruppe sdcard_rw können zudem alle Daten des externen Datenträgers verändern (Listing 4).

root@android # mount
/dev/block//vold/179:1 /sdcard vfat rw,dirsync,nosuid,nodev,noexec,uid=1000,gid=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 0
# ls /sdcard
d---rwxr-x system sdcard_rw 2011-04-08 13:22 LOST.DIR
d---rwxr-x system sdcard_rw 2011-04-21 10:42 DCIM
d---rwxr-x system sdcard_rw 2011-07-13 13:49 Android
d---rwxr-x system sdcard_rw 2011-07-19 16:26 download
----rwxr-x system sdcard_rw 302325 2011-05-16 17:01 GingerBreak-v1.20.apk

Listing 4: Zugriffsberechtigungen von externen Speichermedien

Applikationen wollen aber nicht nur Daten lokal auf einem Gerät ablegen, sondern häufig auch auf Ressourcen wie beispielsweise das Netzwerk zugreifen oder Informationen mit anderen Applikationen austauschen. Mit dem Konzept der Content Provider stellt Android eine elegante Lösung für den Datenaustausch bereit. Content Provider erlauben eine Zugriffskontrolle anhand eines granularen Rechtemodells, den sogenannten Android-Permissions. Mit Hilfe von Android-Permissions deklariert ein Entwickler, welche Berechtigungen seine Applikationen zum Durchführen ihrer Aktionen benötigt. Dem Entwickler steht hierfür eine Reihe an Standardberechtigungen zur Verfügung. Beispiel für eine Zugriffsberechtigung auf einen von Android ausgelieferten Content Provider ist die Berechtigung READ_CONTACTS. Diese erlaubt einer Anwendung den Zugriff auf das Adressbuch des Benutzers. Weitere Beispiele für Standardberechtigungen sind der Zugriff auf die Telefonfunktion (CALL_PHONE) oder die Verwendung des Netzwerks (INTERNET). Die erforderlichen Berechtigungen einer Anwendung gibt der Entwickler im Manifest der Applikation an (Listing 5).

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android=http://schemas.android.com/apk/res/android package="de.cirosec" android:versionCode="1" android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name="de.cirosec.Cirosec" android:label="@string/app_name"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<intent-filter>
</activity>
</application>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
</manifest>

Listing 5: Manifest einer Android-Applikation