Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
💥 Les 22 & 23 novembre : Accès 100% GRATUIT
à la Bibliothèque Numérique ENI. Je m'inscris !
  1. Livres et vidéos
  2. Android
  3. La sécurité sous Android
Extrait - Android Les fondamentaux de la sécurité des smartphones et tablettes
Extraits du livre
Android Les fondamentaux de la sécurité des smartphones et tablettes
2 avis
Revenir à la page d'achat du livre

La sécurité sous Android

Introduction

La sécurité d’un système Android est une chose essentielle à maîtriser, tant pour les passionnés que pour les professionnels de la sécurité informatique ; tout le monde ou presque étant en possession d’un smartphone ou d’une tablette tactile aujourd’hui. Android est actuellement l’OS le plus populaire au monde. Il n’est pas seulement implémenté dans les smartphones et les tablettes, mais il est également présent sur les appareils comme les boxes IP TV, certains véhicules modernes, les nouvelles générations de robots destinés à l’usage culinaire et autres objets connectés. Il est alors essentiel de voir les aspects liés à sa sécurité du point de vue d’un hacker éthique afin de pouvoir tester des applications ainsi que le processeur ARM gérant le cœur de l’appareil, y déceler les failles de sécurité, comprendre les mécanismes de protection et adopter les bonnes pratiques pour s’en protéger.

Les smartphones Android (ainsi que les Windows Phone, iPhone, etc.) sont tout aussi vulnérables à des attaques informatiques que les ordinateurs Windows, Linux, etc. Les premiers malwares pour mobiles apparaissent en 2004, le premier cheval de Troie pour Android en 2010....

Petite histoire

Le système d’exploitation mobile Android est né en 2003 grâce à quatre passionnés et a été racheté deux ans plus tard, c’est-à-dire en 2005, par Google. Ce n’est qu’en 2007 que le système a été dévoilé, et il a été commercialisé en septembre 2008. Android est basé sur une version modifiée du noyau Linux et d’autres applications open source déjà préinstallées sur les appareils, comme le navigateur Google Chrome, le Google Play Store, ainsi que sur des applications principales, comme par exemple l’assistant Google, le service de messagerie Gmail, les SMS, etc. Ce système d’exploitation est en constante amélioration, avec l’ajout constant de nouvelles fonctionnalités, des améliorations de la sécurité, des corrections de bugs, des mises à jour plus rapides, etc.

Les besoins de sécurité sur les appareils mobiles

L’utilisation des appareils et applications mobiles étant en pleine expansion, ces dernières années nous montrent que leur sécurisation est particulièrement importante, et même essentielle, au vu des nombreuses attaques possibles. En effet, à l’heure actuelle, tout le monde est potentiellement vulnérable, que ce soit les sociétés ou les particuliers. Comme nous allons le voir, une personne malintentionnée ou un système n’étant pas à jour expose les utilisateurs et leurs données confidentielles au piratage. Or, beaucoup de personnes font confiance à leur appareil mobile pour stocker un grand nombre d’informations personnelles.

Un appareil mobile peut par exemple contenir des données ou des applications gérant le système d’alarme que vous possédez à la maison, des informations de connexion concernant votre routeur Internet (box Free, Orange, Bouygues, etc.), des applications et des informations bancaires, des informations concernant votre vie privée ou encore des informations concernant votre santé. Bref, de nombreux types de données qui nécessitent d’être sécurisées.

Les entreprises utilisent également les appareils mobiles, pour organiser le travail de leurs collaborateurs ainsi...

L’architecture Android

Cette partie présente l’architecture Android, qu’il est nécessaire de maîtriser afin de comprendre son fonctionnement, les relations entre les différents composants et la composition de l’OS Android, pour tester plus efficacement ce dernier et ses applications. L’illustration ci-après donne une vision de l’architecture complète d’Android. Elle est issue du site de Google consacré aux développeurs Android (https://developer.android.com/guide/platform/).

images/01EP03.png

Il est nécessaire de lire la figure de bas en haut car nous allons commencer par énumérer les composants internes se situant au cœur du système jusqu’à ceux de la couche applicative contenant les applications que nous utilisons quotidiennement. Comme on peut le voir, l’architecture du système Android est composée de six couches contenant chacune plusieurs composants. Analysons ces différentes couches en commençant par la première.

Linux Kernel

images/schemap6.png

Android fonctionne avec une base de noyau Linux, c’est cette couche qui gère le matériel, et non Android lui-même, c’est le cœur de l’OS Android. Cette couche gère la transition entre le matériel et tout ce qui est applicatif. Contrairement à Linux, Android ne supporte pas la "glibc", qui est la bibliothèque standard C ; il utilise une bibliothèque améliorée pour les appareils mobiles Android, portant le nom de "Bionic libc". Ce qui fait la force du noyau Linux, c’est sans doute qu’il est open source et que de nombreux développeurs l’améliorent tous les jours. En termes de sécurité, Linux utilise un modèle de sécurité basé sur un système de permissions (ou autorisations en français) reconnu pour sa fiabilité et sa robustesse. Il dispose aussi d’un système de gestion de la mémoire et des différents processus. Cette couche contient et gère les fonctionnalités basiques telles que le driver Wi-Fi, le driver USB, le driver Bluetooth, etc.

HAL (Hardware Abstraction Layer)

images/01EP04.png

Cette couche fait la séparation et la distinction entre la plateforme logique et les interfaces matérielles, car tous les drivers...

Les sandboxes et les autorisations

Les sandboxes (bacs à sable en français) et les autorisations font partie intégrante d’Android et profitent de différentes protections implémentées dans le noyau Linux. Nous allons voir qu’Android utilise plusieurs moyens de protection afin de garantir la sécurité du système, mais également celle de l’utilisateur. Un sandbox (bac à sable) permet aux applications d’être complètement isolées les unes des autres lors de leur exécution ; il protège ainsi le système et les applications contre les applications malveillantes. Pour mettre en place le mécanisme, Android attribue un identifiant utilisateur unique (UID) pour chaque application et l’exécute ensuite dans son propre processus. Cet identifiant d’utilisateur unique est utilisé pour mettre en place ce mécanisme au niveau du noyau. De cette manière, il est impossible que les applications communiquent et interagissent entre elles, car le système d’exploitation empêche de le faire. En effet, une application souhaitant communiquer avec une autre ne disposera pas des privilèges utilisateur adéquats.

Comme un sandbox se situe dans le noyau, cette sécurité s’applique aux applications natives et aux applications propres au système d’exploitation Android. C’est un très bon mécanisme qui fait ses preuves, ainsi qu’une protection supplémentaire face aux malwares ou autres applications malveillantes.

Ci-après, voici une figure illustrant le mécanisme de protection avec et sans sandbox, qui est disponible à cette adresse : https://orhanobut.github.io/effective-android-security/

images/01EP10.png

Il faut garder à l’esprit que chaque application dispose de son propre identifiant d’utilisateur (user ID) et est exécutée sur des processus bien distincts.

1. Les signatures d’applications

Les signatures d’applications, ou signatures de code...

Android rooting

Dans cette partie, il s’agit de voir dans quel contexte nous avons besoin de "rooter" le système Android. Quand on parle d’Android rooting, on parle également de débridage, ce qui consiste à autoriser les utilisateurs d’un service Android (smartphones, tablettes, etc.) à obtenir les droits superutilisateur. C’est ce qu’on appelle effectuer une élévation de privilèges. C’est tout à fait similaire au fait d’accéder aux droits administrateur sous un système d’exploitation de type GNU/Linux : cela consiste à être un utilisateur possédant tous les droits sur le système, autrement dit un utilisateur "root".

On entend souvent parler de mode root, ce qui est une erreur, root n’est pas un mode, mais un utilisateur possédant TOUS les droits sur le système.

Le rootage d’un appareil Android est généralement utilisé pour effectuer certaines actions, comme supprimer les protections et les limitations de l’opérateur ainsi que celles de certains constructeurs. À partir du moment où l’appareil est rooté, il est facilement possible de :

  • modifier des applications propres au système ;

  • modifier des applications du système ;

  • modifier les paramètres du système ;

  • modifier...

Les packages d’application Android (APK)

Quand on installe une application sur un système d’exploitation Android, on installe en réalité un fichier contenant une extension .apk, par exemple "monapplication.apk". Ce fichier est un package d’application Android (APK, pour Android Package Kit). Ce n’est ni plus ni moins qu’un format de fichier utilisé par Google pour déployer l’installation sur Android. Il se compose de plusieurs fichiers archives compressés pour Android : nous pouvons, par exemple, comparer ce type de fichiers aux exécutables sous Windows, qui sont des .exe.

Les différents fichiers et répertoires contenus dans un fichier .apk sont généralement les suivants :

  • Le répertoire META-INF, contenant :

  • MANIFEST.MF : le fichier Manifest, que nous verrons plus en détail dans la prochaine section.

  • CERT.RSA : le certificat de l’application.

  • CERT.SF : la liste des ressources.

  • Le répertoire lib, contenant le code compilé destiné à une architecture spécifique, comme avec les processeurs ARM. Ce répertoire contient plusieurs répertoires ou fichiers, comme :

  • armeabi : le code compilé pour tous les processeurs ARM uniquement,

  • armeabi-v7a : le code compilé pour tous les processeurs supérieurs à ARMv7 uniquement...

Les composants d’une application

Les applications Android disposent de plusieurs composants indispensables au développement, bien connus des développeurs. Ces composants permettent d’interagir avec le système Android et communiquent entre eux.

La figure ci-dessous illustre le concept :

images/01EP13.png

Nous voyons qu’une application Android comprend cinq composants principaux : les intents (intentions en français), les services, les activités, les broadcast receivers et les content providers.

1. Les intentions

Une intention (intent en anglais) permet de faire communiquer les composants principaux d’une application. Ils font partie des composants les plus importants dans l’architecture d’une application, car les intents permettent de communiquer avec le système d’exploitation dans le contexte sécurisé des sandboxes. Tous les composants du système d’exploitation Android communiquent grâce aux intents. Un intent permet de lancer une activité (activity) d’une application et il est important de savoir également qu’une activité peut très bien lancer un service.

Les intents sont des messages asynchrones qui se chargent d’activer les activités, les services et les récepteurs de diffusion (broadcast receivers). Les intents définissent la fonction qui doit être lancée pour les activités et les services, et éventuellement l’URI d’une ressource ou d’une donnée précise.

2. Les activités

Une activité (activity) permet d’interagir avec l’utilisateur : une activité représente une fenêtre ou un écran unique avec une interface pouvant agir avec l’utilisateur. Elle permet de gérer des messages d’alerte ainsi que d’autres fonctionnalités. Par exemple, une application de messagerie SMS comme WhatsApp aura une activité permettant de consulter la liste des messages, une autre de lire les messages, une autre d’écrire et donc de créer des messages, etc. Une application Android contient une multitude d’activités ; par exemple, quand on bascule d’un écran vers un autre, c’est simplement une activité qui en démarre une autre. Voici un schéma représentant le cycle...

Comment fonctionne une application ?

Il est important que les testeurs ou les développeurs connaissent le fonctionnement d’une application Android afin de comprendre les mécanismes mis en place. Nous allons voir comment fonctionne le processus de compilation d’une application jusqu’à son exécution dans le système. La chose la plus simple pour comprendre est encore d’observer le schéma disponible sur le site officiel des développeurs Google Android à cette adresse : https://developer.android.com/studio/build/

images/01EP17.png

Examinons les différentes étapes.

1. Génération du code source

C’est la toute première étape nécessaire pour générer un fichier .apk. Il faut savoir que tous les fichiers de ressources d’une application tels que le fichier AndroidManifest.xml ainsi que les fichiers XML, les librairies et tous les fichiers sources sont compilés avec un outil s’appelant aapt (voir sur le schéma qui suit, qui sera un peu plus détaillé).

2. Génération de l’interface de code

Il s’agit de l’étape qui se charge de créer une interface de communication entre un client et un service. Cette étape va convertir tous les fichiers .aidl en interface Java en utilisant un outil appelé aidl.

3. Compilation du code source Java

Cette étape...

Les différents types d’applications

Nous ne le savons pas forcément, mais il existe différents types d’applications développées pour les appareils mobiles, et plus particulièrement trois. Il est probable que vous vous serviez de ces trois types d’applications depuis votre appareil Android, par exemple si vous utilisez Facebook, Gmail ou une application bancaire. Voyons un peu plus en détail ces différents types d’applications.

1. Les applications natives

Les applications natives ou légitimes sont des applications ayant été codées pour un système d’exploitation bien spécifique. Pour la plateforme Android, par exemple, le langage de programmation utilisé sera Java ; pour iOS, le langage de programmation généralement utilisé est Objective-C, etc. Ces applications ont accès à toutes les fonctionnalités natives de notre appareil comme la caméra, l’appareil photo, le micro, l’horloge, les messages, le calendrier, un navigateur Internet, etc. Ces applications système ne peuvent pas être supprimées de l’appareil sauf s’il est "rooté" comme nous l’avons vu précédemment. Il est cependant possible de les désactiver. Les applications natives sont toutes les applications constructeur disponibles généralement...

Les niveaux d’API Android

Selon la version d’Android que nous utilisons, il existe plusieurs niveaux d’API (Application Programming Interface) Android. Ce niveau d’API est unique pour chaque version d’Android. Le niveau d’API permet d’identifier et de déterminer les différentes fonctionnalités dont peut disposer une application, ainsi que les règles de sécurité, comme par exemple les autorisations qui doivent lui être appliquées. Le niveau d’API est une valeur entière qui identifie de manière unique le niveau de l’API de structure définie par une version de la plateforme Android. La plateforme Android fournit une API de structure que les applications peuvent utiliser pour interagir avec le système Android sous-jacent.

L’API du framework contient :

  • un ensemble de paquets et de classes ;

  • un ensemble d’éléments XML et d’attributs permettant de déclarer un fichier AndroidManifest.xml ;

  • un ensemble d’éléments XML permettant de déclarer et d’accéder à certaines ressources ;

  • un ensemble d’intentions (intent) ;

  • un ensemble d’autorisations que les applications peuvent demander ainsi que les mises en application des autorisations incluses dans le système.

Suivant les versions de la plateforme Android, de nouvelles...

Conclusion

Nous avons vu qu’Android dispose de nombreux composants que nous pourrons tester dans le chapitre Tester des applications mobiles. Nous avons également vu qu’Android dispose de moyens de protection tels que les Sandboxes et nous avons également une meilleure compréhension sur le fonctionnement d’une application. Pour ceux qui souhaitent découvrir les mécanismes internes d’Android de façon plus approfondie, vous trouverez dans le catalogue des Éditions ENI des livres de référence sur le sujet. Le but de cet ouvrage est d’apporter les connaissances nécessaires et les bases fondamentales au niveau de la sécurité du système d’exploitation Android afin de mieux comprendre les différents mécanismes mis en place sur le système. De cette manière, il sera plus facile et plus intuitif de mener à bien des tests sur les applications Android, car plus nous en savons sur un système d’exploitation, mieux c’est...