Comment le mot de passe Gmail est-il stocké dans Android - et où?

37

J'ai regardé autour de moi et je n'ai trouvé aucune information sur la façon dont Android parvient à stocker les mots de passe sur l'appareil. Surtout les mots de passe Gmail. Je cherche à savoir comment Android crypte et stocke les mots de passe? Quelle clé utilise-t-elle et où cette clé est-elle stockée et quel algorithme de chiffrement est-il utilisé?

Asudhak
la source
1
Pourquoi le mot de passe stocké devrait-il être crypté avec une clé? Cela signifierait seulement qu'il faut entrer la clé à chaque fois que le mot de passe est requis, vous ne pourriez tout simplement pas stocker le mot de passe et le saisir à chaque fois.
Débit
Euh, la clé pourrait être spécifique à un périphérique, obtenue à partir du téléphone IMEI ou quelque chose du genre. Ce qui signifie que le logiciel peut obtenir la clé sans que l'utilisateur ne le tape à tout moment.
Asudhak
1
Qu'est-ce qui empêche un autre logiciel en cours d'exécution sur le téléphone d'obtenir la clé? Cette approche n'apporte aucune couche de sécurité supplémentaire
Flow

Réponses:

36

L'application officielle de Gmail ne stocke pas le mot de passe dans votre appareil. Votre mot de passe est 100% sûr si vous utilisez cette application.

Voici comment cela fonctionne: le mot de passe est utilisé UNIQUEMENT par les serveurs d'authentification de Google. Après la première authentification réussie, un Auth Tokenest téléchargé sur le périphérique qui est stocké dans un accounts.dbfichier en tant que texte brut. Ceci Auth Tokenest utilisé pour toutes les connexions suivantes , PAS pour votre mot de passe d'origine.
Ainsi, si votre appareil est volé, tout le monde peut obtenir est Auth Tokence qui devient invalide une fois que vous avez changé votre mot de passe. Donc, vous serez en commandement ultime.
Pour une sécurité optimale, je vous recommande d'activer 2-Factor Authenticationet de créer Device Specific Passwordpour votre appareil. Après avoir perdu votre appareil, il vous suffit de le désactiver. Vous n'avez même pas besoin de changer le mot de passe principal.

Remarque: Tout cela n'est pas vrai si vous utilisez des applications de messagerie tierces pour Gmail, à savoir. Stock Email app, K-9 Mail, etc. Le protocole IMAP ou POP nécessite un mot de passe original pour authentifier les utilisateurs à chaque fois. Donc, un mot de passe en clair doit être disponible pour l'application de messagerie avant de l'envoyer au serveur. Ainsi, la plupart des applications de messagerie stockent les mots de passe en texte brut (le hachage / le chiffrement est inutile, car la clé de hachage / de chiffrement doit être stockée localement). Dans ce cas, je vous recommande d'activer 2-Factor Authenticationet de créer Device Specific Passwordpour votre appareil. Après avoir perdu votre appareil, il vous suffit de le désactiver.

Mise à jour:
Techniquement, il est possible de stocker les mots de passe localement sous forme chiffrée / hachée sans conserver la clé de chiffrement / la clé de hachage en texte brut localement. Merci à @JFSebastian pour l'avoir signalé. Malheureusement, une telle implémentation pour Android n'est pas encore disponible. À partir de ICS, Android fournit une API KeyChain grâce à laquelle une application peut stocker un mot de passe localement sous une forme sécurisée. Les applications utilisant l'API KeyChain sont rares, mais les applications de messagerie stockées l'utilisent (Merci à @wawa pour cette information). Votre mot de passe sera donc en sécurité avec l'application de messagerie électronique tant que votre écran sera verrouillé. N'oubliez pas que KeyChain n'est pas sûr si le périphérique est enraciné et qu'il n'est pas disponible sur les périphériques antérieurs à ICS.

Quesito Android
la source
6
@JF Sebastian: même en supposant que vous faites entièrement confiance au tiers qui stocke vos mots de passe, ceux-ci n'étaient que légèrement plus sûrs que le simple stockage du mot de passe dans l'appareil lui-même. Le périphérique doit toujours pouvoir extraire le texte brut du mot de passe du stockage en nuage et doit toujours le mettre en cache localement, car vous ne souhaitez pas avoir à reconnecter votre dongle chaque fois que vous entrez dans un tunnel ou des zones avec faible réception. La pire chose à faire en matière de sécurité est de fournir un faux sentiment de sécurité.
Lie Ryan
4
@JFSebastian: en conclusion, le seul moyen d'authentification vraiment sécurisé consiste à faire ce que Google a fait avec l'application Gmail, c'est-à-dire à utiliser un schéma d'authentification non standard avec un jeton d'authentification. Même si quelqu'un réussissait à voler votre jeton d'authentification, vous pouvez l'invalider à distance et vous n'avez pas besoin de changer de mot de passe, car le mot de passe en texte clair n'a jamais été compromis. L'autre moyen sûr consiste à utiliser une clé sans sessions. Eh bien, vous savez ce qui se passe lorsque vous faites cela, vos utilisateurs laisseront simplement le dongle attaché en permanence.
Lie Ryan
5
@JFSebastian: Je pense que vous manquez le point. Le cryptage du mot de passe n’est pas plus sûr que de le stocker en texte brut, pas même par bit. Tout attaquant qui parvient à copier les comptes.db peut également copier la clé de déchiffrement en même temps; la seule chose que le cryptage vous donne est un faux sentiment de sécurité , qui est pire que pas de sécurité. Oui, il existe des solutions bien meilleures que le stockage d'un mot de passe en texte brut, mais elles nécessitent toutes des modifications du protocole de messagerie. Nous devons donc vivre avec ce que nous avons actuellement. Ou faites-le correctement, de manière non standard, comme l'a fait Gmail.
Lie Ryan
3
Le service de trousseau @JFSebastian Apples ou celui fourni par le noyau Linux n'est pas une option plus sécurisée. Le mot de passe reste en mémoire et si le trousseau est déverrouillé, même s'il n'est pas crypté. Il est donc probablement un peu plus difficile à obtenir en tant que fichier .db lisible par la racine. Google a mis en œuvre la meilleure solution possible en utilisant un jeton d'authentification qui peut être invalidé si le périphérique est compromis. La prochaine option plus sécurisée serait de saisir le mot de passe à chaque fois ou simplement d'éviter d'utiliser la messagerie électronique.
Débit
4
@LieRyan Depuis ICS, l'application de messagerie stock utilise réellement l'api KeyStore et non du texte brut. android-developers.blogspot.com/2012/03/…
Wesley Wiser le
12

Les mots de passe Android utilisés avec l'application de messagerie intégrée sont stockés en texte brut dans une base de données SQLite. Cela contraste avec l' application Gmail , qui utilise les jetons d'authentification décrits dans la réponse de Sachin Sekhar .

Pour Jelly Bean, l'emplacement de la base de données est:

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

L'emplacement ci-dessus varie avec la version Android

Cet emplacement sur un périphérique non root est sécurisé et protégé par le système d'exploitation.
Sur les appareils enracinés, les utilisateurs ont déjà techniquement craqué pour leur propre sécurité. Même s'il ne s'agissait pas de texte en clair, il serait toujours facile de déchiffrer car la clé doit exister quelque part sur l'appareil pour le faire.

Un membre de l'équipe de développement Android a publié une explication qui s'applique encore à ce jour:

Maintenant, en ce qui concerne cette préoccupation particulière. La première chose à clarifier est que l'application de messagerie prend en charge quatre protocoles - POP3, IMAP, SMTP et Exchange ActiveSync - et à de très rares exceptions près, ce sont tous des protocoles plus anciens qui nécessitent que le client présente le mot de passe au serveur. à chaque connexion. Ces protocoles nous obligent à conserver le mot de passe aussi longtemps que vous souhaitez utiliser le compte sur l'appareil. Les protocoles plus récents ne font pas cela - c'est pourquoi certains des articles ont été en contraste avec Gmail, par exemple. Les nouveaux protocoles permettent au client d'utiliser le mot de passe une fois pour générer un jeton, le sauvegarder et le supprimer.

Je vous exhorte à relire l'article lié au commentaire n ° 38 , qui est bien écrit et très instructif. Il fournit une très bonne base sur la différence entre "masquer" les mots de passe et les rendre vraiment "sécurisés". Le simple fait de cacher votre mot de passe (par exemple, base64) ou de le chiffrer avec une clé stockée ailleurs ne rendra pas votre mot de passe ou vos données plus sûrs. Un attaquant pourra toujours le récupérer.

(En particulier, certains clients de messagerie n'ont pas enregistré le mot de passe en texte clair. Même si cela est vrai, cela n'indique pas que le mot de passe est plus sécurisé. Un test simple: si vous pouvez démarrer le votre appareil et que les comptes configurés commenceront à recevoir des e-mails, les mots de passe ne sont pas vraiment sécurisés. Ils sont soit obscurcis, soit cryptés avec une autre clé stockée ailleurs.)

De plus, étant donné que ce problème semble perturber de nombreux utilisateurs Android, vous pouvez également suivre cette discussion sur Slashdot - Données de mot de passe Android stockées en texte brut .

Zuul
la source
Sensationnel. Ça m'étonne. Je n'étais pas au courant du fait qu'il soit stocké en texte brut. Oublié enraciné ou non enraciné. En cas de vol de votre appareil, une personne peu scrupuleuse pourrait facilement obtenir vos informations d’identité, même si vous verrouillez le téléphone avec une clé de sécurité. Étant donné ce fait, connaissez-vous également les mécanismes de cryptage applicables à l’ensemble du disque?
Asudhak
1
Quoi qu'ils soient, ils peuvent être utilisés pour accéder au compte. Mais, @SachinShekhar, le accounts.dbfichier est protégé contre la lecture par des comptes autres que system.
Wyzard --Stop Harming Monica--
1
Zuul, j'apprécie vos efforts, mais je pense que cette réponse est très trompeuse. Si vous parcourez à nouveau la citation que vous avez citée, l'application Gmail n'enregistre pas le mot de passe. --edit vérifier @SachinShekhar répondre aussi.
Roxan
2
@asudhak Si une application utilise le mot de passe d'origine, il n'y a AUCUN moyen de le protéger. Un pirate informatique peut décoder la chaîne codée de accounts.db après avoir trouvé la clé de chiffrement / hachage qui doit être stockée localement car l'application de messagerie électronique aurait besoin de cette clé pour compiler le mot de passe d'origine avant de l'envoyer au serveur.
Android Quesito
2
@roxan Je n'ai rien trouvé qui indique que le mot de passe n'a pas été stocké par l'application Gmail. Pouvez-vous fournir un devis ou un lien?
Débit