Android SharedPreference-Sicherheit

118

Ich frage mich über die Sicherheit gemeinsamer Einstellungen.

Ist es möglich, auf gemeinsam genutzte Einstellungen zuzugreifen, selbst wenn diese in MODE_PRIV (0) erstellt wurden?
Ist es möglich, alle verfügbaren freigegebenen Einstellungen aufzulisten und dann alle Einstellungen von anderen Apps abzurufen?
Sind gemeinsam genutzte Einstellungen ein guter Ort, um vertrauliche Daten wie Kennwörter oder Authentifizierungstoken abzulegen?

Vielen Dank

Marek Sebera
quelle
Einen Blick wert, mit schönen Antworten. Gemeinsame Einstellungen sagen viel über den Programmierstil des Entwicklers aus.
Vishwa Ratna

Antworten:

232

Freigegebene Einstellungen werden als Datei im Dateisystem auf dem Gerät gespeichert. Sie werden standardmäßig im Datenverzeichnis der App mit festgelegten Dateisystemberechtigungen gespeichert, mit denen nur die UID, mit der die jeweilige Anwendung ausgeführt wird, auf sie zugreifen kann. Sie sind insofern privat, als Linux-Dateiberechtigungen den Zugriff auf sie einschränken, genau wie auf jedem Linux / Unix-System.

Jeder, der Zugriff auf das Gerät auf Root-Ebene hat, kann sie sehen, da Root Zugriff auf alles im Dateisystem hat. Außerdem kann jede Anwendung, die mit derselben UID wie die erstellende App ausgeführt wird, auf sie zugreifen (dies wird normalerweise nicht durchgeführt, und Sie müssen bestimmte Maßnahmen ergreifen, damit zwei Apps mit derselben UID ausgeführt werden. Dies ist also wahrscheinlich keine große Anwendung Besorgnis, Sorge). Wenn jemand das Dateisystem Ihres Geräts ohne Verwendung des installierten Android-Betriebssystems bereitstellen konnte, konnte er auch die Berechtigungen umgehen, die den Zugriff einschränken.

Wenn Sie über einen solchen Zugriff auf Ihre Einstellungen (oder auf von Ihrer Anwendung geschriebene Daten) besorgt sind, sollten Sie diese verschlüsseln. Wenn Sie so besorgt über sie sind, müssen Sie genau herausfinden, wie viel Schutz für das Risiko erforderlich ist, das Sie sehen. Es gibt eine sehr ausführliche Diskussion darüber in Application Security für die Android-Plattform , die gerade im Dezember 2011 veröffentlicht wurde (Haftungsausschluss: Ich bin der Autor dieses Buches).

Thamaraiselvam
quelle
2
Gibt es offizielle Unterlagen, die darüber sprechen? Haben Sie Referenzen?
Clu
26

SharedPreferences sind nichts anderes als XML-Dateien in Ihren Telefonen / Daten / Daten / Ordnern. Daher kann jede Anwendung oder jeder Benutzer mit Superuser-Berechtigungen auf einem gerooteten Gerät auf Ihre SharedPreferences zugreifen, selbst wenn sie mit MODE_PRIV erstellt wurden

Trotzdem gibt es eine Möglichkeit, es vor allen zu schützen ... Bitte überprüfen Sie diesen Link. Hier können Sie Daten in Pref mit Verschlüsselung speichern, die Klasse ist selbsterklärend und sehr einfach zu bedienen.

https://github.com/sveinungkb/encrypted-userprefs

Wie von anderen gesagt, kann jeder darauf zugreifen, aber in diesem Fall kann niemand Daten darin lesen, während sie verschlüsselt sind. So seine secure.For Utmost Sicherheit wird mein Vorschlag, den Schlüssel für die Verschlüsselung während der Laufzeit nicht schwer , es Codierung verwendet zu erzeugen. Dafür gibt es viele Möglichkeiten :)

Jazz Haque
quelle
8
Wie speichern Sie dann den generierten Schlüssel?
Olayinka
3
@Olayinka Es wäre sicherer, das mit einem weiteren Schlüssel zu verschlüsseln und in einem zu speichern SharedPref. Aber was tun mit dem anderen Schlüssel? Im Ernst, das beste Szenario wäre das Senden des verschlüsselten Schlüssels und einer Geräte-UID an einen Server unter Verwendung von SSL, um dort gespeichert und nach Bedarf abgerufen zu werden. Dies würde Konnektivität erfordern, aber es würde Ihnen ermöglichen, ein Gerät auf die schwarze Liste zu setzen und plötzlich alle Daten in den Papierkorb zu werfen. Ohne ständige Internetverbindung ist jeder Versuch, Daten zu verschlüsseln, nicht 100% sicher.
Paulo Avelar
Ich habe die obige Lösung verwendet ... es funktioniert 9 von 10 Mal ... aber ich erhalte die Fehlermeldung: 1e06b065: Verschlüsselungsfunktionen: EVP_DecryptFinal_ex: BAD_DECRYPT "manchmal ... Hat jemand eine Idee?
Raj Trivedi
3
@PauloAvelar Verwenden Sie den Android KeyStore zum langfristigen Speichern und Abrufen von kryptografischen Schlüsseln. Schlüssel werden nicht in einer Anwendung gespeichert, sodass sie nicht gefährdet werden können. Die bereitgestellte Bibliothek verwendet es nicht. Es speichert das Geheimnis im Code und ist daher nicht sicher.
Apex39
13

Normalerweise nein, sie können nicht von anderen Anwendungen zugegriffen werden kann, sollten Sie jedoch beachten , dass SharedPreferences als XML - Dateien in der gespeicherten /data/data/Verzeichnis, das im Wesentlichen bedeutet , dass jede Anwendung mit Superuser - Rechten auf einem verwurzelten Gerät kann Ihr Zugriff auf SharedPreferences, auch wenn sie hergestellt mitMODE_PRIV

aviraldg
quelle
3

Ist es möglich, auf gemeinsam genutzte Einstellungen zuzugreifen, selbst wenn diese in MODE_PRIV (0) erstellt wurden?

Nach Code-Nr. Sie können jedoch eine Anwendungsdatei abrufen, wenn Sie über Superbenutzerrechte verfügen.

Ist es möglich, alle verfügbaren freigegebenen Einstellungen aufzulisten und dann alle Einstellungen von anderen Apps abzurufen?

Wenn Sie ein Superuser (gerootete Geräte) sind, können Sie alle privaten Dateien der App abrufen.

Sind gemeinsam genutzte Einstellungen ein guter Ort, um vertrauliche Daten wie Kennwörter oder Authentifizierungstoken abzulegen?

Nein, es kann leicht gehackt werden. Wenn Sie vertrauliche Daten in eine gemeinsam genutzte Präferenzdatei einfügen möchten, können Sie die Daten verschlüsseln und speichern. Sie können Ihren Verschlüsselungsschlüssel in NDK / Server speichern.

Rajiv Ranjan
quelle
Wie kann es leicht gehackt werden?
John Sardinha
Ja, das Frageformular @Jo
Cuong Vo