Das hört sich zunächst einmal kritisch an. Passwörter in Klartext abzulegen klingt nicht nur unsicher, sondern kann auch kritisch sein, sofern man nicht den Zugriff auf die Datei beschränkt, die das Passwort enthält. Im Android Issue-Tracker wird gerade diskutiert, inwiefern es sich bei diesem Vorgehen wirklich um ein Sicherheitsproblem handelt. Im Folgenden möchte ich einige Interessante Ansichten aufgreifen und kommentieren.
Problemstellung
The password for email accounts is stored into the SQLite DB which in turn stores it on the phone’s file system in plain text.
Encrypting or at least transforming the password would be desirable.Quelle: http://code.google.com/p/android/issues/detail?id=10809
An dieser Stelle stellt sich mir die Frage, ob das Unkenntlich-machen einen Sicherheitsgewinn darstellt und wie eine Verschlüsselung realisiert werden kann. Grundsätzlich ist auch die Frage: Wie geht man mit Passwörtern um?
Umgang mit Passwörtern
In den Kommentaren wird auf einen sehr interessanten Artikel der Pidgin-Entwickler verwiesen. In diesem werden vier grundsätzliche Herangehensweisen an die Problematik beschrieben:
- Passwort hinter einem Passwort abspeichern: Erst nachdem man ein “Master-Passwort” eingegeben hat, wird die eigentliche Passwort-Datei entschlüsselt und man kommt an das gewünschte Passwort ran.
Hier muss trotzdem ein Passwort eingegeben werden. Und dies führt, sofern man ein sicheres Passwort benutzen will, zu einer schlechten User Experience. Ein Passwort mit Ziffern, Buchstaben und Sonderzeichen auf einem mobilen Gerät einzugeben macht einfach keinen Spaß.
- Passwort verschleiern: Man kann das Passwort verschleiern, indem man beispielsweise base64 oder ähnliches anwendet. Oder mit einem festen Schlüssel ver- und entschlüsseln.
Das halte ich für bedenklich und gefährlich. Der Benutzer sieht im ersten Moment nicht immer, ob es sich bei den Daten um vertrauliche Daten handelt und wägt sich vielleicht in Sicherheit, während der Dateien mit vertraulichem Inhalt an jemand anders weitergibt.
- Passwort in Klartext ablegen und den Zugriff beschränken: Man legt das zu speichernde Passwort in Klartext ab. Es muss aber dafür gesorgt werden, dass der Zugriff auf diese sensiblen Daten eingeschränkt wird. Das kann beispielsweise mit Berechtigungen im Dateisystem geschehen.
Dies ist der Weg, den die Google-Entwickler derzeit bei der E-Mail App gewählt haben. Für mich hört sich das am “wenigsten schlimm” an. Zwar liegt das Passwort in Klartext vor, allerdings ist sich der Benutzer dann evtl. bewusst, dass es sich um sensible Informationen handelt. Gleichzeitig werden die Daten an einem Ort abgelegt, der nur durch die E-Mail App zugreifbar ist.
- Keine Passwörter speichern: Es werden schlicht und ergreifend keine Passwörter abgelegt.
Das ist zwar der sicherste Weg, hier stellt aber die Passwort-Eingabe, ebenfalls wie in Punkt 1, ein Problem für die User Experience dar.
Gibt es hier überhaupt ein Problem?
Die Passwörter werden also in Klartext in die Datenbank geschrieben. Diese Datenbank wird innerhalb einer Datei gespeichert, die im Dateisystem unter /data/data/* liegt. Dieser Ort wird durch Android geschützt. So besagt das Android-SDK:
Any data stored by an application will be assigned that application’s user ID, and not normally accessible to other packages.
Quelle: http://developer.android.com/guide/topics/security/security.html
Dies ist das Default-Verhalten von Android und kann, falls gewünscht, umgangen werden. Ich gehe davon aus, dass die Entwickler der E-Mail App die Restriktionen allerdings beibehalten haben, wodurch der Zugriff auf die Datenbank nicht möglich ist.
Um dem auf den Grund zu gehen, habe ich es selbst mal ausprobiert: Ich habe mein Desire HD im USB-Debugging Modus an meinen Computer angeschlossen und wollte auf das Dateisystem zugreifen. Es war mir allerdings nicht möglich auf das Verzeichnis /data zuzugreifen.
Dazu muss man erwähnen, dass ich mein Gerät nicht gerootet habe. Somit können alle Sicherheitsmechanismen von Android greifen und die Daten bleiben geschützt. Bei einem gerooteten Gerät besteht nämlich die Möglichkeit die Daten in /data/data zu lesen oder auch zu verändern, da die Dateisystem-Berechtigungen für den root-User nicht greifen. In diesem Fall kann man also auf das Klartext-Passwort zugreifen.
An dieser Stelle kommen wir zum ursprünglichen Problem:
**Bringt eine Verschleierung des Passworts etwas? **Nein! Denn wenn der Angreifer erstmal die SQLite Datenbank hat, kann er auch die Verschleierung umgehen. Das Verschlüsseln mit einem festen Wert oder das Encoding mit base64 etc. ist Augenwischerei.
Wir verschlüsseln die Datenbank mit einem Passwort! Das kann ein Mehr an Sicherheit bringen. Voraussetzung ist jedoch ein starkes Passwort, da man mit aktuellen Grafikkarten kurze und leichte Passwörter innerhalb absehbarer Zeit knacken kann. Sichere Passwörter lassen sich mit einem Smartphone aber alles andere als leicht eingeben! Somit leidet die User Experience.
Zusammenfassung
Die E-Mail App speichert die Zugangsdaten zu den Postfächern in Klartext in der eigenen SQLite Datenbank. Diese Datenbank ist bei nicht-gerooteten Geräten durch Android geschützt. Es ist also, sofern nicht eine Sicherheitslücke in Android ausgenutzt wird, für eine böse App nicht möglich eure E-Mail Zugangsdaten zu lesen. Hat man jedoch ein gerootetes Gerät, stellt dies ein Sicherheitsrisiko dar.
Falls ihr Euch jetzt in Sicherheit glaubt, da Euer Gerät über ein “geschütztes” Android verfügt, möchte ich euch auf folgendes hinweisen: Was passiert, wenn das Smartphone gestohlen wird und der Dieb es rootet? Er hat dann vollen Zugriff auf die gespeicherten Daten.
In diesem Sinne: lasst Euch nicht beklauen!