In this article
Sécurité des applications Android : sécuriser les applications Android pour les développeurs
Comment protéger vos applications Android contre les acteurs malveillants.
Qu’est-ce que la sécurité des applications Android ?
La sécurité des applications Android désigne les mesures qui protègent les applications Android contre tout accès, toute utilisation abusive, toute modification ou toute détérioration non autorisés. Grâce à la prévalence des appareils mobiles, notamment les smartphones et les tablettes, Android est devenu une plateforme populaire pour créer et distribuer des applications mobiles. Toutefois, son ouverture l’expose à différents risques de sécurité. La mise en place de mesures de sécurité mobile peut protéger les utilisateurs contre les cybermenaces, notamment les tentatives de piratage, les logiciels malveillants et le vol de données.
Pourquoi la sécurité des applications Android est-elle importante ?
La sécurité des applications Android est essentielle, car Android domine le marché des systèmes d’exploitation mobiles avec une part de marché de 71,8 %, contre environ 27,6 % pour iOS d’Apple. Les appareils Android sont souvent considérés comme des cibles de grande valeur en raison de leur accès à diverses sources de données (e-mails, réseaux sociaux), des capacités de l’appareil (microphone, appareil photo, géolocalisation) et de son rôle dans les processus d’authentification (2FA). Les développeurs doivent accorder la priorité à la sécurité pour protéger les données personnelles, financières et sensibles stockées sur les appareils Android. Si les attaques mobiles ont toujours été un problème, la menace évolue rapidement, les acteurs malveillants développant des logiciels malveillants toujours plus sophistiqués.
Les attaquants déploient activement des logiciels malveillants dotés d’un accès à distance complet, d’une conception modulaire et de caractéristiques semblables à celles des vers, capables d’endommager considérablement les appareils Android. Plusieurs de ces familles de logiciels malveillants deviennent plus dangereuses au fil de mises à jour régulières, et les cybercriminels parviennent de mieux en mieux à faire passer du code malveillant à travers le processus officiel d’examen des boutiques d’applications.
Parmi les techniques des logiciels malveillants mobiles contre lesquelles les développeurs doivent se protéger, on trouve :
Fraude sur l’appareil (ODF) : les logiciels malveillants mobiles peuvent désormais effectuer des actions frauduleuses directement depuis l’appareil de la victime. L’ODF marque un tournant majeur dans les attaques mobiles et peut cibler les comptes professionnels et les outils de communication.
Redirection des appels téléphoniques : un logiciel malveillant peut rediriger un appel destiné à une banque vers un autre numéro contrôlé par l’attaquant. La victime ne se rend pas compte du détournement, car l’écran d’appel affiche le numéro de téléphone légitime.
Abus de la réponse directe aux notifications : les logiciels espions FluBot, Medusa et Sharkbot peuvent exploiter la fonctionnalité de réponse directe aux notifications d’Android pour signer des transactions frauduleuses, modifier les notifications push et propager des logiciels malveillants. Cette fonctionnalité peut également servir à lancer des attaques par hameçonnage via des messages push et à propager le logiciel malveillant aux contacts de la victime, comme le ferait un ver.
Algorithme de génération de domaines : Sharkbot utilise un algorithme de génération de domaines (DGA) pour éviter la détection en créant constamment de nouveaux noms de domaine et adresses IP pour ses serveurs de commande et de contrôle. Les équipes de sécurité ont ainsi du mal à détecter et à bloquer le logiciel malveillant.
Contournement de la détection des boutiques d’applications : les criminels ont trouvé des moyens de contourner la détection des boutiques d’applications en exploitant la plateforme de test bêta TestFlight d’Apple et le processus de sécurité de Google Play, ou en rémunérant des développeurs pour qu’ils intègrent leur SDK malveillant à leurs applications.
Pratiques de développement perfectionnées : les chevaux de Troie Android, comme le logiciel malveillant Xenomorph, sont désormais conçus avec des fonctionnalités de mise à jour sophistiquées. À l’avenir, davantage de familles de logiciels malveillants mobiles intégreront de meilleurs processus de mise à jour afin d’ajouter des fonctionnalités et des capacités sur les appareils compromis.
Fonctionnalités de sécurité d’Android
Pour contrer les attaques, Android propose des fonctionnalités de sécurité destinées à aider les développeurs à protéger leurs applications contre les intrusions. Ces fonctionnalités comprennent :
Bac à sable des applications : les applications s’exécutent dans un environnement isolé afin d’empêcher tout accès non autorisé aux données utilisateur et aux ressources système.
Autorisations : la plateforme Android comprend un système d’autorisations qui permet aux utilisateurs de contrôler les données et les ressources auxquelles une application peut accéder.
SELinux : Android utilise Security-Enhanced Linux (SELinux) pour appliquer des politiques de contrôle d’accès obligatoire, ce qui contribue à protéger le système contre les applications malveillantes.
Signature du code : Android exige que toutes les applications soient signées à l’aide d’un certificat numérique, ce qui garantit qu’elles proviennent d’une source fiable et n’ont pas été altérées.
Google Play Protect : Google Play Protect est une fonctionnalité de sécurité intégrée qui analyse les applications de Google Play pour détecter les logiciels malveillants et autres menaces de sécurité.
Autorisations à l’exécution : depuis Android 6.0 (Marshmallow), les utilisateurs doivent accorder à une application l’autorisation d’accéder à certaines données ou ressources au moment de l’exécution, plutôt qu’au moment de l’installation.
Configuration de la sécurité réseau : Android permet aux développeurs d’applications de configurer la sécurité réseau de leur application, notamment l’épinglage des certificats SSL/TLS et d’autres paramètres de sécurité.
IPC sécurisé : le mécanisme de communication interprocessus (IPC) d’Android assure une communication sécurisée entre les applications et les services exécutés sur un même appareil.
Démarrage vérifié : les appareils Android intègrent un processus de démarrage vérifié qui garantit l’intégrité des logiciels de l’appareil et empêche les modifications non autorisées.
Sécurité matérielle : les appareils Android intègrent des fonctionnalités de sécurité matérielle, comme un environnement d’exécution sécurisé (TEE) et un stockage de clés adossé au matériel, pour protéger les données sensibles.
Conseil de pro : les fonctionnalités spécifiques et la meilleure façon de les utiliser dépendent de la version d’Android et du matériel de l’appareil, qui peuvent varier considérablement. Il est recommandé de (1) vous tenir au courant des fonctionnalités pertinentes disponibles, (2) connaître le marché auquel s’adresse votre application et (3) concevoir leur utilisation en conséquence. Il est également recommandé d’utiliser autant que possible les services du système d’exploitation.
Langages de développement Android et défis de sécurité associés
Android prend en charge plusieurs langages de programmation pour le développement d’applications mobiles, notamment Kotlin, Java et C++. Chaque langage présente des atouts, des limites et des défis de sécurité que les développeurs doivent prendre en compte.
Kotlin
Kotlin est un langage plus récent qui devient la norme pour le développement Android. Il offre un meilleur isolement que Java : les applications Kotlin sont donc moins susceptibles d’interagir avec d’autres applications sur l’appareil de l’utilisateur. Cela réduit le risque que des applications malveillantes accèdent à des données ou ressources sensibles.
Le principal défi de sécurité de Kotlin tient à sa relative nouveauté. Bien qu’il soit considéré comme plus sûr que Java, des vulnérabilités ou d’autres problèmes de sécurité n’ont peut-être pas encore été découverts. Les développeurs doivent se tenir au courant des dernières bonnes pratiques de sécurité et maintenir leurs bibliothèques et frameworks à jour afin de réduire les risques de faille.
Java
Java est un langage de programmation populaire utilisé dans un large éventail d’applications, notamment pour le développement d’applications Android. Il s’agit d’un langage de plus haut niveau que C++, ce qui facilite l’écriture et la compréhension du code. Cependant, du fait de sa position plus élevée dans la pile, il peut être moins performant que C++ et consommer davantage de batterie.
L’un des principaux défis de sécurité liés à Java est le risque de vulnérabilités dans ses bibliothèques et frameworks. Les développeurs doivent veiller à utiliser des bibliothèques et frameworks à jour et à suivre les pratiques de codage sécurisé afin d’éviter les problèmes de sécurité courants comme les injections SQL et le cross-site scripting.
C++
C++ est un langage de bas niveau souvent utilisé pour la programmation système sur Android. Étant plus proche du matériel, C++ peut offrir de meilleures performances et une meilleure autonomie que Java ou Kotlin. Cependant, C++ est utilisé par plusieurs composants, comme WebKit, le framework multimédia et les couches graphiques, ce qui complique son isolement.
L’un des principaux défis de sécurité liés à C++ est le risque de vulnérabilités liées à la mémoire, comme les dépassements de tampon et les erreurs de pointeur. Les développeurs doivent faire preuve de prudence avec C++ pour éviter ces vulnérabilités que les attaquants peuvent exploiter. Ils doivent également tenir compte de l’utilisation partagée de C++ et veiller à ce que leur code n’interagisse pas involontairement avec d’autres applications ou services.
Snyk Code prend en charge les langages Kotlin, Java et C++, ce qui en fait un excellent choix pour la sécurité des applications Android.
Lancez-vous dans les compétitions Capture The Flag
Apprenez à résoudre des défis Capture The Flag en regardant à la demande notre atelier virtuel d’initiation.
Bonnes pratiques de sécurité des applications Android
Google, qui assure la maintenance d’Android, améliore constamment son cadre de sécurité et de confidentialité. Toutefois, les différentes exigences de sécurité rendent plus difficile la création d’applications compatibles avec plusieurs versions d’Android. Les développeurs doivent prendre en compte dès le début du cycle de développement les autorisations et les exigences de confidentialité nécessaires aux applications, car le comportement varie selon les versions d’Android.
Parmi les autres bonnes pratiques de sécurité Android, citons :
Garantir des communications sécurisées : les développeurs doivent utiliser des protocoles sécurisés comme HTTPS pour chiffrer les transmissions de données entre l’application et ses serveurs. Ils doivent également mettre en œuvre l’épinglage de certificats, qui garantit que l’application communique uniquement avec des serveurs de confiance en vérifiant leur certificat à l’aide d’une clé publique connue.
Accorder les bonnes autorisations : les développeurs doivent veiller à ce que leurs applications ne demandent que les autorisations nécessaires à leur bon fonctionnement. Toute autorisation superflue risque d’inciter les utilisateurs à refuser l’accès à l’application, voire de conduire à son retrait de Google Play. En outre, ne demandez des autorisations que lorsque cela est nécessaire, par exemple lorsque l’utilisateur souhaite se servir d’une fonctionnalité particulière de l’application.
Stocker les données en toute sécurité : les développeurs doivent chiffrer les données sensibles stockées localement par l’application. Ces données doivent également être conservées dans des emplacements sécurisés, inaccessibles aux personnes non autorisées. Par exemple, ne stockez pas de données sur des supports de stockage externes comme les cartes SD, car d’autres applications, voire les utilisateurs, peuvent facilement y accéder.
Maintenir les services et les dépendances à jour : les développeurs doivent régulièrement mettre à jour les dépendances et les bibliothèques de leur application afin de s’assurer qu’elles ne présentent pas de vulnérabilités ou de bogues connus. Ils doivent également se tenir informés des nouvelles menaces de sécurité, corriger leurs applications dès que possible et supprimer toute dépendance inutilisée ou obsolète afin de réduire la surface d’attaque de leur application.
Liste de contrôle de la sécurité des applications Android
Voici une liste de contrôle en huit points pour vous aider à respecter les normes de sécurité les plus strictes lors du développement d’applications Android.
La sécurité et la gestion des autorisations sont essentielles : la sécurité doit être une priorité tout au long du processus de développement. Identifiez les risques et menaces de sécurité potentiels dès le début du projet et définissez les protocoles de sécurité en conséquence. Pensez également à la gestion des autorisations des utilisateurs et veillez à ce qu’ils comprennent clairement les données auxquelles leur application accède.
Communication entre l’application mobile et le backend : la communication entre l’application mobile et le backend doit être sécurisée, et les deux parties doivent mettre en œuvre des mesures de sécurité robustes. Veillez à ce que toutes les transmissions de données entre l’application et le backend soient chiffrées et utilisent des protocoles sécurisés comme HTTPS. Mettez également en œuvre l’épinglage de certificats pour garantir que l’application communique uniquement avec des serveurs de confiance.
Les scénarios de menace sont différents sur mobile : les applications mobiles fonctionnent dans un environnement hostile et les données sensibles peuvent être exposées à des risques. Évaluez la quantité de données de sécurité critiques stockées sur le client mobile et chiffrez les données sensibles conservées localement. Tenez également compte des menaces potentielles, comme l’espionnage, et prenez les mesures nécessaires pour vous en protéger.
Utilisez toutes les fonctionnalités de sécurité disponibles dans le système d’exploitation Android : Android propose différentes fonctionnalités de sécurité, comme le stockage sécurisé, la gestion des clés et l’isolation en bac à sable. Utilisez-les pour renforcer la sécurité de votre application.
Réfléchissez aux autorisations dont vos applications ont besoin : les développeurs doivent examiner attentivement les autorisations requises par leur application et ne demander que le minimum nécessaire. Une planification en amont est essentielle pour concevoir l’application de façon à gérer les autorisations requises. Les développeurs doivent également s’assurer que les utilisateurs savent à quelles données l’application accède et pourquoi cet accès est nécessaire.
Automatisez la mise à jour de vos services et dépendances : les développeurs doivent utiliser des outils automatisés pour gérer les dépendances et les bibliothèques de leur application. Ainsi, celle-ci reste toujours à jour et n’est pas exposée aux problèmes de sécurité ou aux bugs connus.
Indiquez clairement les versions du système d’exploitation prises en charge : les développeurs doivent indiquer en toute transparence les versions d’Android compatibles avec leur application. Prendre en charge trop de versions d’Android peut s’avérer difficile : il faut donc trouver le bon équilibre entre la satisfaction des clients, la compatibilité des appareils et la sécurité. Pensez également à rappeler aux utilisateurs de mettre l’application à jour afin qu’ils disposent de la version la plus sécurisée.
Les tests sont essentiels : les tests sont indispensables pour détecter les risques et les menaces potentiels pour la sécurité. Les développeurs doivent recourir à la détection des intrusions et à d’autres méthodes de piratage éthique pour tester la sécurité de leur application. Il convient également d’inclure les applications mobiles dans tous les processus de test et de mesure de la sécurité pour s’assurer qu’elles sont sécurisées.
Outils de sécurité des applications Android
Les développeurs doivent disposer d’un ensemble d’outils de sécurité pour identifier et prévenir les menaces potentielles. Voici quelques outils de sécurité des applications Android couramment utilisés :
SAST (tests statiques de sécurité des applications) : type de test de sécurité qui analyse le code source ou le binaire d’une application sans l’exécuter. Les outils SAST s’appuient notamment sur la correspondance de motifs et l’analyse des flux de contrôle et de données pour identifier les vulnérabilités dès les premières étapes du développement.
SCA (analyse de la composition logicielle) : les outils SCA analysent les dépendances open source et tierces d’une application afin d’identifier les vulnérabilités de sécurité et les problèmes de conformité des licences. Ils analysent le code à la recherche de vulnérabilités connues, surveillent l’apparition de nouvelles vulnérabilités et recommandent des mesures correctives.
Fuzzing : type de test qui consiste à fournir à une application des données d’entrée invalides, inattendues ou aléatoires afin de détecter des bugs ou des vulnérabilités. Les outils de fuzzing génèrent de grandes quantités de données de test pour repérer les vulnérabilités potentielles dans la validation des entrées d’une application.
DAST (tests dynamiques de sécurité des applications) : type de test de sécurité qui analyse une application en cours d’exécution afin d’identifier les vulnérabilités potentielles. Les outils DAST simulent des attaques et analysent les réponses de l’application pour détecter des vulnérabilités telles que les failles par injection, les scripts intersites (XSS) et les problèmes d’authentification.
IAST (tests interactifs de sécurité des applications) : les outils IAST combinent des éléments du SAST et du DAST pour fournir un retour en temps réel sur les vulnérabilités potentielles pendant l’exécution d’une application. Ils détectent notamment les injections SQL, les scripts intersites et les dépassements de tampon.
Surveillance et détection : ces outils assurent une surveillance continue de la sécurité d’une application en production afin d’identifier les incidents potentiels. Ils surveillent les journaux, le trafic réseau et les événements système pour détecter les anomalies et les menaces potentielles. Ils alertent également les équipes de sécurité en cas d’incident, afin qu’elles puissent réagir rapidement.
Sécurité des applications Android avec Snyk
Snyk propose deux outils de sécurité pour les applications Android : Snyk Code et Snyk Open Source.
L’analyse SAST de Snyk Code révèle les vulnérabilités potentielles, telles que les injections SQL ou les attaques par cross-site scripting (XSS). Elle prend en charge Kotlin, Java et C++, des langages couramment utilisés pour développer des applications Android.
La couverture SCA de Snyk Open Source détecte et signale les vulnérabilités de sécurité connues dans les dépendances tierces de votre application Android. Elle analyse les bibliothèques et frameworks open source utilisés par votre application et fournit un rapport sur les vulnérabilités connues afin que vous puissiez prendre les mesures nécessaires pour réduire le risque de faille de sécurité.
Les applications mobiles ne fonctionnent pas de manière isolée : elles interagissent avec d’autres services et dépendances, comme les API et les services backend. Pour sécuriser pleinement l’ensemble de l’écosystème de votre application Android, Snyk propose d’autres outils de sécurité, notamment Snyk Container et Snyk IaC.
Snyk Container analyse la sécurité des conteneurs afin de détecter et de corriger les vulnérabilités dans votre environnement conteneurisé. Snyk IaC analyse votre infrastructure à la recherche de vulnérabilités, notamment les erreurs de configuration et les violations de conformité.
En tirant parti de la suite d’outils de sécurité pour les développeurs de Snyk, vous pouvez analyser en profondeur votre application Android à la recherche de vulnérabilités et la protéger contre les menaces potentielles. Elle sera ainsi sécurisée et prête à être déployée. Réservez une démonstration en direct dès aujourd’hui pour en savoir plus.