Cette série d’articles aborde les points les plus importants de la sécurité des applications mobiles, quelle que soit la plateforme (iOS, Android ou autre).
L’objectif est de démystifier les différents aspects de la sécurité mobile, avec des mots très simples.
Ce troisième épisode présente les failles liées aux échanges de données
Une application mobile fonctionne rarement en mode non-connecté. Une exception pourrait être une application de type dictionnaire, qui n’a pas besoin de communiquer avec un quelconque serveur pour fonctionner : toutes les données sont déjà présentes dans l’application et l’utilisateur affiche des définitions de mots du dictionnaire.
Mais il s’agit d’un cas bien spécifique, car la plupart des applications mobiles communiquent avec un serveur web.
Données échangées par l’application mobile
Suivant les besoins métier, une application mobile peut être amenée à envoyer ou recevoir différents types de données, comme par exemple :
- Identifiants de connexion
- Données de session utilisateur
- Données personnelles
- Données transactionnelles liées au métier de l’application
- Données bancaires
Comment les données sont-elles échangées avec l’extérieur ?
Suivant les cas, différents flux de données peuvent être présents au sein d’une même application.
Prenons l’exemple d’une application ecommerce permettant à ses utilisateurs d’acheter des articles, et de laisser des commentaires.
Les différentes données transférées peuvent être :
- Données d’identification de l’utilisateur
- Statistiques d’utilisation de l’application
- Données relatives aux commentaires sur les produits
Dans notre exemple, trois serveurs interagissent avec l’application. Certains flux contiennent des données sensibles, d’autres non.
Risques et attaques
Les risques concernant les échanges de données sont multiples.
Tout d’abord, le fait de ne pas utiliser de cryptage des données de type HTTPS (TLS) est une faille encore très largement répandue.
Nous avons ainsi pu observer que plusieurs applications populaires ne cryptent pas les identifiants de connexion, par exemple.
Dans ce cas, un attaquant pourra potentiellement “écouter” sur le réseau utilisé par l’appareil mobile, et collecter les données sensibles.
L’espionnage des réseaux utilisés par les appareils mobiles est très facile, d’autant plus que les utilisateurs n’hésitent pas à se connecter à des hotspots Wi-Fi publics.
Une expérience récemment menée par Avast au salon Mobile World Congress a montré que les utilisateurs se connectent souvent à un Wi-Fi sans savoir s’il est sûr : en quelques heures, 2000 personnes se sont connectées à différents réseaux non sécurisés créés par l’équipe d’Avast.
Cette expérimentation a permis d’espionner le trafic afin de simuler une attaque et d’effectuer des tests sur les données transmises par les smartphones des utilisateurs.
Les résultats ont montré que les données personnelles de 63% des utilisateurs pouvaient être interceptées.
Voir l’article : https://press.avast.com/en-us/avast-wi-fi-hack-experiment-demonstrates-reckless-behavior-of-mobile-world-congress-attendees
Ceci montre qu’espionner des réseaux Wi-Fi de cybercafés ou mettre en place des faux réseaux Wi-Fi est très facile.
Dans les cas où les données sont transmises via HTTPS, se pose alors la question de la qualité de la connexion HTTPS.
En effet, cette configuration peut être effectuée de différentes manières, avec plus ou moins d’efficacité.
Les points généralement étudiés par des attaquants concernent :
- Les algorithmes choisis pour l’implémentation d’HTTPS (certains sont faibles et peut être « cassés »)
- L’utilisation de certificats HTTPS périmés ou « auto-signés », et qui n’ont donc pas de valeur
- Les vérifications effectuées par l’application mobile au sujet du serveur avec lequel elle communique
Sécuriser les échanges de données
L’attitude à adopter lors du développement d’une application mobile et en particulier pour la sécurité des données est de ne pas se fier à la connexion de l’utilisateur.
Prendre comme hypothèse le fait que la connexion (WiFi, 3G/4G…) est potentiellement espionnée.
Il devient alors évident que l’on doit vérifier avec quel serveur l’application mobile communique, et crypter de manière optimale les données envoyées et reçues.
Quelques points importants et solutions techniques à mettre en place :
- Faire passer les données sensibles à travers une connexion HTTPS
- Ne pas mixer de données sécurisées / non-sécurisées, notamment pour les contenus « web »
- Vérifier au niveau du serveur que seuls des algorithmes récents sont acceptés pour la connexion HTTPS
- Utiliser essentiellement des certificats SSL issus d’autorités de certification reconnues
- Au niveau de l’application mobile, vérifier que le serveur est bien celui qu’il prétend être (« certificate pinning »)
- Respecter les bonnes pratiques dictées par les éditeurs de plateformes mobiles (iOS, Android).
Pour les applications les plus sensibles et utilisées dans des contextes professionnels notamment, le recours à une connexion VPN est une solution complémentaire.
Un audit de sécurité de l’application mobile permet également de détecter ses vulnérabilités et de les corriger.
La sécurité des échanges de données n’est donc pas automatique et requiert une certaine attention de la part des développeurs.
L’application mobile aussi bien que le serveur ont leur rôle à jouer afin d’assurer une communication sécurisée et réduisant les risques de compromission de données.