Wie und wo wird das Google Mail-Passwort in Android gespeichert?

37

Ich habe mich umgesehen und keine Informationen gefunden, wie Android es schafft, Passwörter auf dem Gerät zu speichern. Insbesondere Google Mail-Passwörter. Ich möchte erfahren, wie Android Passwörter verschlüsselt und speichert. Welcher Schlüssel wird verwendet und wo wird dieser Schlüssel gespeichert und welcher Verschlüsselungsalgorithmus wird verwendet.

Asudhak
quelle
1
Warum sollte das gespeicherte Passwort mit einem Schlüssel verschlüsselt werden? Dies würde nur bedeuten, dass man den Schlüssel jedes Mal eingeben muss, wenn das Passwort benötigt wird, dann könnte man das Passwort einfach nicht speichern und jedes Mal eingeben.
Flow
Ähm, der Schlüssel könnte gerätespezifisch sein, von der IMEI des Telefons bezogen werden oder so. Das heißt, die Software kann den Schlüssel abrufen, ohne dass der Benutzer ihn jedes Mal eingeben muss.
Asudhak
1
Was verhindert, dass andere Softwarekomponenten auf dem Telefon ausgeführt werden, um den Schlüssel zu erhalten? Dieser Ansatz bietet keine zusätzliche Sicherheitsebene
Flow

Antworten:

36

Die offizielle Google Mail-App speichert kein Passwort auf Ihrem Gerät. Ihr Passwort ist 100% sicher, wenn Sie diese App verwenden.

So funktioniert es: Das Passwort wird NUR von den Authentifizierungsservern von Google zum ersten Mal verwendet. Nach der ersten erfolgreichen Authentifizierung wird ein Auth Tokenauf ein Gerät heruntergeladen, das accounts.dbals Klartext in einer Datei gespeichert ist . Für alle nachfolgenden Anmeldungen wird dies Auth Tokenverwendet, NICHT Ihr ursprüngliches Passwort.
Wenn also Ihr Gerät gestohlen wird, kann nur jemand etwas bekommen, Auth Tokendas ungültig wird, sobald Sie Ihr Passwort ändern. Sie haben also das ultimative Kommando.
Für die ultimative Sicherheit empfehle ich Ihnen 2-Factor Authentication, diese Funktion Device Specific Passwordfür Ihr Gerät zu aktivieren und zu erstellen . Nachdem Sie das Gerät verloren haben, müssen Sie es nur noch deaktivieren. Sie müssen nicht einmal das Hauptkennwort ändern.

Hinweis: Dies gilt nicht für E-Mail-Apps von Drittanbietern für Google Mail. Stock E-Mail-App, K-9 Mail usw. IMAP- oder POP-Protokoll benötigen ein Originalkennwort, um Benutzer jederzeit zu authentifizieren. Daher muss ein einfaches Kennwort für die E-Mail-App verfügbar sein, bevor es an den Server gesendet wird. Die meisten E-Mail-Apps speichern Kennwörter daher im Nur-Text-Format (Hashing / Verschlüsselung ist nutzlos, da Hashing / Verschlüsselungsschlüssel lokal gespeichert werden müssen). In diesem Fall empfehle ich Ihnen, die Funktion für Ihr Gerät zu aktivieren 2-Factor Authenticationund zu erstellen Device Specific Password. Nachdem Sie das Gerät verloren haben, müssen Sie es nur noch deaktivieren.

Update:
Technisch ist es möglich, Passwörter lokal in verschlüsselter / gehashter Form zu speichern, ohne den Verschlüsselungs- / Hashing-Schlüssel lokal im Klartext zu belassen. Vielen Dank an @JFSebastian für den Hinweis. Leider ist eine solche Implementierung für Android noch nicht verfügbar. Beim Starten von ICS stellt Android die KeyChain-API bereit, mit der eine App ein Kennwort lokal in sicherer Form speichern kann. Apps, die die KeyChain-API verwenden, sind selten, aber die Standard-E-Mail-App verwendet sie (Vielen Dank an @wawa für diese Informationen). So ist Ihr Passwort mit der Standard-E-Mail-App sicher, solange Ihr Bildschirm gesperrt ist. Denken Sie daran, dass KeyChain nicht sicher ist, wenn das Gerät gerootet ist und auf Geräten vor ICS nicht verfügbar ist.

Android Quesito
quelle
6
@JF Sebastian: Selbst wenn Sie dem Dritten, der Ihre Passwörter speichert, vollkommen vertrauen, waren diese nur unwesentlich sicherer als das einfache Speichern des Passworts im Gerät. Das Gerät muss weiterhin in der Lage sein, den Klartext des Kennworts aus dem Cloud-Speicher abzurufen, und das Kennwort muss weiterhin lokal zwischengespeichert werden, da Sie den Dongle nicht jedes Mal neu verbinden müssen, wenn Sie in einen Tunnel oder in Bereiche mit gelangen schwacher Empfang. Das Schlimmste, was bei der Sicherheit zu tun ist, ist, ein falsches Sicherheitsgefühl zu vermitteln.
Lie Ryan
4
@JFSebastian: Zusammenfassend lässt sich sagen, dass die einzig wirklich sichere Art der Authentifizierung darin besteht, das zu tun, was Google mit der Google Mail-App getan hat, dh ein nicht standardmäßiges Authentifizierungsschema mit Authentifizierungstoken zu verwenden. Selbst wenn es jemandem gelungen ist, Ihr Authentifizierungstoken zu stehlen, können Sie das Token aus der Ferne für ungültig erklären, und Sie müssen Ihr Kennwort nicht ändern, da der Kennwortklartext nie gefährdet wurde. Die andere sichere Möglichkeit besteht darin, den Dongle ohne Sitzungen zu verwenden. Nun, Sie wissen, was passiert, wenn Sie dies tun. Ihre Benutzer lassen den Dongle permanent angeschlossen.
Lie Ryan
5
@ JFSebastian: Ich denke, Sie verpassen den Punkt. Das Verschlüsseln des Passworts ist nicht sicherer als nur das Speichern im Klartext, nicht einmal ein Bit. Jeder Angreifer, der es schafft, die accounts.db zu kopieren, kann auch den Entschlüsselungsschlüssel mitkopieren. Das einzige, was die Verschlüsselung Ihnen gibt, ist ein falsches Sicherheitsgefühl , das schlimmer ist als keine Sicherheit. Ja, es gibt Lösungen, die viel besser sind als das Speichern von Klartextkennwörtern, aber alle erfordern Änderungen am E-Mail-Protokoll, sodass wir mit dem leben können, was wir derzeit haben. Oder machen Sie es auf eine nicht standardmäßige Art und Weise, wie es Gmail getan hat.
Lie Ryan
3
Der Schlüsselbunddienst von @JFSebastian Apples oder der vom Linux-Kernel bereitgestellte ist keine sicherere Option. Das Passwort hängt immer noch im Speicher und wenn der Schlüsselbund entsperrt ist, sogar unverschlüsselt. Daher ist es wahrscheinlich nur geringfügig schwieriger, als Root-Datei nur lesbare .db-Dateien zu erhalten. Google hat die bestmögliche praktikable Lösung implementiert, indem ein Authentifizierungstoken verwendet wurde, das bei einer Beschädigung des Geräts ungültig wird. Die nächste sicherere Möglichkeit wäre, das Passwort jedes Mal einzugeben oder einfach die Verwendung von E-Mails zu vermeiden.
Flow
4
@LieRyan Ab ICS verwendet die Standard-E-Mail-App die KeyStore-API und nicht den Nur-Text-Modus. android-developers.blogspot.com/2012/03/…
Wesley Wiser
12

Android-Passwörter, die mit der integrierten E-Mail-Anwendung verwendet werden, werden in einer SQLite-Datenbank im Klartext gespeichert. Dies steht im Gegensatz zu der Google Mail- Anwendung, die Authentifizierungstoken verwendet, wie in Sachin Sekhars Antwort beschrieben .

Für Jelly Bean lautet der Speicherort der Datenbank:

/data/system/users/0/accounts.db

Die oben angegebene Position hängt von der Android-Version ab

Dieser Speicherort auf einem nicht gerooteten Gerät wird vom Betriebssystem gesichert und geschützt.
Auf gerooteten Geräten haben Benutzer ihre eigene Sicherheit bereits technisch geknackt, und selbst wenn sie nicht im Nur-Text-Format vorliegen würde, wäre das Entschlüsseln dennoch trivial, da der Schlüssel dazu irgendwo auf dem Gerät vorhanden sein muss.

Ein Mitglied des Android-Entwicklungsteams hat eine Erklärung veröffentlicht , die bis heute noch gilt:

Nun zu diesem besonderen Anliegen. Zunächst muss klargestellt werden, dass die E-Mail-App vier Protokolle unterstützt: POP3, IMAP, SMTP und Exchange ActiveSync. Mit wenigen, sehr eingeschränkten Ausnahmen handelt es sich hierbei um ältere Protokolle, bei denen der Client dem Server das Kennwort vorlegen muss bei jeder Verbindung. Bei diesen Protokollen müssen wir das Kennwort so lange aufbewahren, wie Sie das Konto auf dem Gerät verwenden möchten. Neuere Protokolle tun dies nicht. Aus diesem Grund haben einige Artikel beispielsweise einen Kontrast zu Google Mail hergestellt. Neuere Protokolle ermöglichen es dem Client, das Kennwort einmal zu verwenden, um ein Token zu generieren, das Token zu speichern und das Kennwort zu verwerfen.

Ich fordere Sie auf, den Artikel zu lesen, auf den in Kommentar 38 verwiesen wird , der gut geschrieben und recht informativ ist. Es liefert einige sehr gute Hintergrundinformationen über den Unterschied zwischen dem "Verschleiern" von Passwörtern und dem "Sichern" von Passwörtern. Einfach Ihr Passwort Verschleiern (zB base64) oder es mit einem Schlüssel an anderer Stelle gespeichert Verschlüsselung nicht vergessen machen oder sicherer Ihre Daten. Ein Angreifer kann es weiterhin abrufen.

(Insbesondere wurde behauptet, dass einige der anderen E - Mail - Clients das Kennwort nicht im Klartext speichern. Auch wenn dies zutrifft, bedeutet dies nicht, dass das Kennwort sicherer ist. Ein einfacher Test: Wenn Sie das System starten können Wenn das Gerät E-Mails von Ihren konfigurierten Konten empfängt, sind die Kennwörter nicht wirklich sicher. Sie sind entweder verschleiert oder mit einem anderen Schlüssel verschlüsselt, der an einem anderen Ort gespeichert ist.)

Da dieses Problem anscheinend viele Android-Benutzer stört, können Sie diese Diskussion auch unter Slashdot - In Klartext gespeicherte Android-Kennwortdaten verfolgen .

Zuul
quelle
Wow. Das erstaunt mich Mir war nicht bewusst, dass es im Klartext gespeichert ist. Vergessen Sie verwurzelt oder nicht verwurzelt. Wenn Ihr Gerät gestohlen wird, kann eine skrupellose Person Ihre Anmeldeinformationen leicht erhalten, selbst wenn Sie das Telefon mit einem Sicherheitsschlüssel sperren. Kennen Sie angesichts dieser Tatsache auch alle festplattenweiten Verschlüsselungsmechanismen?
Asudhak
1
Was auch immer sie sind, sie können verwendet werden, um Zugriff auf das Konto zu erhalten. @SachinShekhar, die accounts.dbDatei ist jedoch vor dem Lesen durch andere Konten als geschützt system.
Wyzard
1
Zuul, ich weiß deine Mühe zu schätzen, die du in die Antworten gesteckt hast, aber ich denke, diese Antwort ist sehr irreführend. Wenn Sie das von Ihnen zitierte Angebot erneut durchgehen, speichert die Google Mail-App das Passwort nicht. --edit check @SachinShekhar answer also.
Roxan
2
@asudhak Wenn eine App das ursprüngliche Passwort verwendet, gibt es KEINE Möglichkeit, es zu schützen. Ein Hacker kann eine verschlüsselte Zeichenfolge aus accounts.db entschlüsseln, nachdem er einen Verschlüsselungs- / Hashing-Schlüssel gefunden hat, der lokal gespeichert werden muss, da die E-Mail-App diesen Schlüssel benötigt, um das ursprüngliche Kennwort zu kompilieren, bevor es an den Server gesendet wird.
Android Quesito
2
@roxan Ich konnte nichts finden, was darauf hindeutet, dass das Passwort nicht von der Google Mail-App gespeichert wurde. Können Sie ein Angebot oder einen Link bereitstellen?
Flow