Le marché des Smartphones et tablettes s’étend de plus en plus chaque jour. L’évolution de ces appareils et l’augmentation de la demande des utilisateurs, poussent les développeurs à migrer de plus en plus vers le développement relié à ces plateformes. Cette migration inonde le marché d’un nombre incalculable d’applications mobiles, qui apportent de nombreux avantages aux utilisateurs, mais qui peuvent représenter des risques importants.
Nous introduisons dans ce chapitre la plateforme Android, où nous nous intéressons aux bases de ce système, ainsi qu’à ces composants. Nous présentons par la suite le modèle de sécurité déployé par Android, et un aperçu de ses mécanismes de sécurité. Nous nous intéressons ensuite aux vulnérabilités affectant le système Android, et aux façons dont elles sont employées. Et nous terminons par la présentation d’un certain nombre de contre-mesures déployées afin de limiter les attaques.
Android est un système d’exploitation Open source pour terminaux mobiles, il a été conçu et développé par la start-up Android, et racheté par la suite par la société Google qui l’a annoncé officiellement le 15 novembre 2007 (Gannes, 2007). Android est fondé sur un noyau modifié du système d’exploitation Linux, il supporte diverses plateformes embarquées telles que ARM, x86, MIPS, etc. Son architecture est conçue d’une manière permettant l’intégration des applications Google comme Gmail, Google agenda, YouTube ou encore Google maps, et a été proposé à tous les constructeurs des téléphones mobiles, tout en autorisant les modifications par ces fabricants (Cooper, Shahriar et Haddad, 2014).
Puisque Android est basée sur le système d’exploitation Linux, le noyau de ce dernier représente le niveau le plus bas de Android. Cette couche assure la liaison entre le matériel et le logiciel, et elle fournit aussi les services les plus fondamentaux tels que la sécurité, la gestion des processus, la gestion de la mémoire, les fonctionnalités des communications réseau, etc. Android ne s’occupe donc pas de l’interaction avec le matériel, c’est la raison qui fait que Android soit compatible avec la plupart des périphériques mobiles, puisque c’est la tâche du constructeur de spécifier ses composants matériels dans le noyau (BOUGARMOUD, 2013).
Un moteur d’exécution est un programme qui assure le fonctionnement d’autres programmes, ce mécanisme est intégré dans l’architecture d’Android plus précisément la couche au-dessus du noyau Linux. Cette couche contient des bibliothèques natives écrites en C/C++, des bibliothèques Java, ainsi que des bibliothèques spécifiques à Android et la machine Virtuelle Dalvik. Ces bibliothèques servent essentiellement à fournir des fonctionnalités aux couches applicatives d’Android (Shabtai, 2009).
La couche Framework offre aux développeurs des services de haut niveau, qui sont appelés à partir des applications sous format java. Cette couche offre donc un ensemble d’API (Application Programming Interface) qui permet la création des applications riches et innovantes. Les développeurs peuvent donc à travers ces API, exécuter des services d’arrièreplan, ajouter des notifications, accéder aux services de localisation, etc.
La couche la plus haute de l’architecture Android, est la couche applications. C’est la seule couche visible par l’utilisateur du périphérique. Elle se concrétise dans un ensemble d’applications installées sur le périphérique, qui sont développées à l’aide du langage Java, et compilées en des fichiers APK (Crussell, Gibler et Chen, 2012) .
La machine virtuelle Dalvik
Dalvik est une machine virtuelle incorporée dans le système d’exploitation Android. Elle permet l’exécution de plusieurs applications sur un appareil de faible capacité en mémoire, et en puissance de calcul. Contrairement à la machine virtuelle classique de la technologie java, qui est basée sur la pile, la machine Dalvik est une machine à registres qui nécessite moins d’instructions pour effectuer les mêmes opérations qu’une machine à pile. En raison de cette différence, les fichiers de byte code Java ne peuvent pas être exécutés tels qu’il sont par Dalvik, ils seront tout d’abord transformés et consolidés dans un fichier .dex (Chien-Wei et al., 2010).
Les fichiers APK
Un fichier APK est un format de fichier utilisé pour distribuer et installer des applications, au sein du système d’exploitation Android. Autrement dit un APK est l’équivalent d’un fichier JAR conçu spécialement afin de tourner sous Android.
Le fichier APK contient donc : 1) un fichier .DEX qui est le byte code Dalvik de l’application; 2) un fichier resources.arsc qui contient les ressources compilées (layouts ,xml etc.); 3) un fichier de ressources non compilées (les images, les strings, etc.); et 4) un fichier AndroidManifest.xml qui contient pour sa part le nom de package, la version actuelle de l’application, ainsi que diverses autres informations, qui sont nécessaires à l’exécution de l’application sous Android (permissions, activités, intents etc.) (Garin, 2009).
Communication inter applications (Intents)
La communication entre applications au sein du système est une notion importante, elle permet le partage des données entre les applications, l’envoi des messages entre applications, etc. Le système d’exploitation Android offre un moyen de communication puissant entre applications. Cette communication est assurée grâce au mécanisme des Intents (Guignard, 2010).
Les Intents sont basés sur le principe des Sandboxing, qui consiste à séparer presque totalement les applications entre elles. En d’autres termes, les Intents sont un ensemble de données qui peuvent être passées à un autre composant applicatif, faisant partie de la même application ou non (Guignard, 2010).
Les Intents peuvent être envoyés de deux principales façons, une première qui est explicite, et qui permet le lancement d’une classe précise. Et une deuxième dite implicite, qui permet le lancement d’une requête pour une action, sans la nécessité de préciser la classe qui s’occupe du traitement.
INTRODUCTION |