Un stockage défectueux des informations d'identification dans les principales applications Android met les utilisateurs en danger
Selon les chercheurs de Comparitech, 1 057 des 2 500 applications les plus populaires et les plus tendances sur Google Play divulguent au moins un identifiant secret, tel qu'un jeton d'accès ou un mot de passe. Ces secrets pourraient être utilisés par des pirates malveillants pour attaquer des applications, des API et des utilisateurs finaux.
Nous pensons souvent aux « identifiants » comme aux informations dont nous avons besoin pour nous connecter à une application ou à un site Web, telles que votre adresse e-mail et votre mot de passe. Mais les informations d'identification incluent également les mots de passe et les jetons utilisés par les applications elles-mêmes pour authentifier diverses connexions aux serveurs propriétaires et tiers, aux API et à d'autres points de terminaison.
Nos chercheurs ont trouvé de nombreuses applicationsidentifiants de code en duret des webhooks en texte brut, facilement accessibles par les utilisateurs et d'autres applications. Les chercheurs de Comparitech ont utilisé deux outils open source, APKFuites et Moteur Quark , pour analyser 2 500 applications Android les plus populaires et les plus tendances sur Google Play à la recherche de secrets divulgués.
Les informations d'identification divulguées par les applications analysées comprenaient :
- Clés API Amazon Web Services
- Jetons Facebook
- Jetons GitHub
- Clés API Google
- Jetons Twitter OAuth
- Clés API PayPal
- Clés API Twilio
- Webhooks Slack
- Clés API Heroku
- Clés MailChimp
- Autres clés API génériques
- Secrets de l'application
- Clés API personnalisées
En plus des secrets divulgués, les chercheurs ont également trouvé des adresses IP pointant vers serveurs Firebase non sécurisés et les compartiments AWS.
Un stockage d'identifiants défectueux pourrait être exploité par des pirates informatiques malveillants pour accéder frauduleusement aux API des applications et en abuser, voler des données sensibles, hameçonner les utilisateurs et propager des logiciels malveillants. Nous mettrons en évidence ci-dessous certaines des fuites les plus courantes.
Jetons API
Les interfaces de programmation d'applications (API) sont utilisées par de nombreuses applications Android, sinon la plupart. Ils permettent à une application d’accéder aux données ou aux fonctions d’une autre application sans exposer tout le code source ou les données de la deuxième application. Par exemple, une application de comparaison d’hôtels utilise l’API de chaque hôtel pour récupérer les dates et les prix disponibles. L'accès à l'API nécessite généralement une authentification via une clé ou un jeton API secret.
Les chercheurs ont découvert que les identifiants API sont souvent stockés de manière non protégée. Un exemple stockait les informations d’identification sous forme de constantes, ce qui permettrait à toute autre application de les lire et d’agir sur elles.
Les chercheurs ont pu manipuler les informations d'identification codées en dur de l'API pour inverser la façon dont une application envoie des demandes de jetons et les récupère. Dans un cas, les chercheurs ont trouvé un jeton API pour un service de livraison américain populaire qui leur permettait d'accéder à un point de terminaison API privé pour le suivi des colis. Les chercheurs se sont arrêtés là, affirmant qu’un attaquant pourrait exploiter la même vulnérabilité pour voler des informations privées sur les clients. L’application a divulgué cinq informations d’identification secrètes distinctes.
Les jetons API sont de plus en plus utilisés dansbourrage d'informations d'identificationattaques. Le credential stuffing implique généralement qu'un robot utilise des informations d'identification volées pour accéder à d'autres comptes partageant le même mot de passe, jeton ou clé. Les points de terminaison de l'API sont des cibles fréquentes pour les attaques de credential stuffing, en particulier dans le secteur financier .
Webhooks
Les webhooks sont des messages automatisés envoyés depuis les applications lorsqu'ils sont déclenchés, similaires aux notifications par SMS. Ils peuvent améliorer le comportement d'une application à l'aide de rappels personnalisés, qui sont gérés par des utilisateurs et des développeurs tiers qui peuvent ne pas être affiliés au développeur de l'application d'origine. Les webhooks sont fréquemment utilisés dans les applications de chat comme Facebook Messenger et Slack, mais aussi pour suivre les bugs et automatiser le contrôle de version.
Les chercheurs ont découvert qu’ils pouvaient lancer des attaques contre des webhooks codés en dur. Slack, l'application de chat populaire sur le lieu de travail, utilise un webhook codé en dur pour accepter les commentaires des utilisateurs. Les chercheurs pourraient envoyer un grand volume de requêtes au hook, surchargeant le serveur et provoquant une attaque par déni de service.
Les chercheurs affirment que les acteurs malveillants pourraient utiliser des requêtes similaires pour supprimer des charges utiles de logiciels malveillants dans le but d’exposer une base de données ou de télécharger un script malveillant sur le serveur de l’application.
Le webhook Slack pourrait également être exploité en envoyant de faux commentaires d'utilisateurs inexistants afin d'induire les développeurs en erreur. Ou les attaquants pourraient envoyer des messages de phishing avec des liens vers des sites Web malveillants.
Comment stocker en toute sécurité des secrets dans les applications Android
Nos chercheurs ont donné les conseils suivants en matière de stockage des informations d’identification aux développeurs Android :
- Utilisez l'API Android Keystore pour implémenter la plupart des fonctionnalités de stockage d'informations d'identification nécessaires.
- Excluez les informations d’identification et les webhooks lors des validations. Ajoutez-les à .gitignore avant toute validation. Plus tard, les développeurs n'auront qu'à ajouter toutes les clés nécessaires à apikey.properties et à le lire à l'aide des méthodes appropriées dans l'application elle-même. Ensuite, toutes les valeurs secrètes seront dans l'application et vous n'aurez pas besoin de vérifier les valeurs réelles dans votre référentiel git. Notez que cela pourrait ne pas protéger les secrets lors de la décompilation.
- Obscurcir à l’aide de ProGuard – ProGuard est un outil qui permet d’obscurcir sa propre application. Cela n’exclut pas les secrets, mais les rend plus difficiles à révéler par décompilation.
- Assurez-vous que les informations d’identification sont uniques afin qu’elles ne puissent pas être utilisées dans des attaques de credential stuffing.
- Stockez des secrets dans NDK – Le NDK Android est un ensemble d'outils qui vous permet d'implémenter des parties de votre application en code natif. Le stockage des informations d'identification ici rend la décompilation et l'ingénierie inverse plus difficiles pour les attaquants. Lorsque vous stockez les informations d’identification dans NDK, les informations d’identification sont…
- Obscurcis à l'aide de l'opérateur XOR afin qu'ils n'apparaissent jamais à la vue de tous. Ce n’est pas plus sûr à proprement parler, mais cela peut aider à empêcher le vol d’identifiants par des extracteurs automatisés.
- Stockés dans un binaire NDK sous forme de tableau hexadécimal, ce qui les rend plus difficiles à trouver.
- Non persistant en binaire pour forcer l'évaluation à l'exécution.
Pour ajouter une couche de sécurité supplémentaire, les développeurs peuvent utiliser un algorithme d'encodage avec le plugin NDK.