Analyse et détection des maliciels
L’étude de l’analyse des maliciels sur Android nécessite de comprendre le fonctionnement de la plateforme (comme décrit au chapitre précédent) et des maliciels qui y résident. La section 2.1 vise à décrire les tendances recensées chez les maliciels Android. C’est avec cette connaissance qu’il est possible d’établir les cibles que doivent atteindre les techniques d’analyse de maliciels sur la plateforme afin d’être efficaces. La section 2.2 recense l’état de l’art des méthodes d’analyse statique ou dynamique des comportements malicieux sur Android. Elle décrit également les principales limitations des approches actuelles et, ce faisant, légitime l’exploration d’autres techniques d’analyse (p. ex. l’analyse de la mémoire vive) complémentaires à celles existantes. Chaque SE présente des particularités qui régissent le modus operandi des maliciels qui y sont destinés. Android n’échappe pas à cette logique. Il est important pour comprendre les défis que tentent de résoudre les approches d’analyse de maliciels d’expliquer les principaux vecteurs d’attaques utilisés par ceux-ci. Cette section détaille les principales techniques utilisées par les maliciels Android pour compromettre en partie ou en totalité l’appareil d’un utilisateur. Dans un premier temps, les principales approches utilisées par les maliciels pour infecter la plateforme sont présentées. Dans un second temps, les techniques relatives à l’évasion de la détection sont détaillées. Les vecteurs d’attaques sont les techniques utilisées par les maliciels afin d’infecter un appareil Android. La compréhension des points d’entrées potentiels des maliciels permet d’identifier les points d’inflexion que doivent être capables de documenter les analyses de maliciels pour accroître les chances de les détecter. Ces vecteurs d’attaques sont détaillés ci-après.
Exploitation du noyau Linux
Ce type d’attaque vise à exploiter directement le noyau Linux (p. ex. Lineberry [78]) ou les bibliothèques logicielles chargées dans Android (p. ex. ZLabs [139]). Elle peut permettre de poser des actions demandant plus de privilèges qu’autorisés pour un processus. Dans certains cas, elle permet de compromettre l’ensemble du système. Ces techniques d’exploitation peuvent aussi être volontairement utilisées afin d’obtenir les privilèges de l’utilisateur root pour étendre les fonctionnalités du SE. Un exemple de ce type d’utilisation est l’exploit TowelRoot de Hotz [63] qui peut servir à élever les privilèges de l’utilisateur pour lui permettre de modifier les configurations du noyau Linux ou encore de remplacer la version d’Android sur son appareil même si celui-ci est verrouillé par le manufacturier. La découverte d’une faille pouvant mener à l’exploitation du noyau Linux et la création de l’exploit qui l’utilise demandent une expertise poussée sur le fonctionnement du SE ainsi que des connaissances techniques avancées (lecture d’instructions-machine, désassemblage, décompilations, examen de la pile ou du tas, lecture de rapports d’erreur, etc.). En revanche, une fois découverte et exploitée, l’exploit conçu peut être rendu public et utilisable avec un minimum d’effort sous la forme d’un outil libre ou de code réutilisable. Dans ce cas, la complexité pour abuser d’un système par cette faille de sécurité est grandement réduite. Des plateformes, comme Metasploit[97] et Drozer [87], sont d’ailleurs spécialisées dans la distribution de ce type d’exploits prêts à l’emploi.
Pour opérer, un maliciel de ce type utilise une ou plusieurs vulnérabilités du noyau, connues ou non, mettant en place les conditions favorables pour déclencher le comportement malicieux désiré. Certains exploits procèdent en altérant des structures internes du noyau contenues en mémoire vive. Celles qui sont particulièrement d’intérêt sont habituellement impliquées dans des fonctions critiques de l’exécution du SE comme la gestion du contrôle d’accès des utilisateurs. L’un des objectifs de ce type d’attaque est d’augmenter leurs accès ou privilèges sur la plateforme. Par exemple, l’exploit TowelRoot[63] utilise une vulnérabilité dans la gestion des futex (ou fast userspace mutex) permettant de suspendre un fil d’exécution si une condition donnée est remplie afin de protéger l’accès à une ressource déjà utilisée[134–136]. L’exploitation de cette vulnérabilité permet la modification de l’espace mémoire du noyau contenant la valeur de l’UID auquel appartient un fil d’exécution du noyau. Cela permet notamment d’attribuer l’UID « 0 » de l’utilisateur root à n’importe quel fil d’exécution, comme celui d’une invite de commande contrôlée par l’utilisateur. La présence de techniques de mitigation, comme l’ASLR, rend plus difficile l’exploitation du noyau par ce genre d’attaques. En effet, elles rendent l’exploitation du noyau Linux complexe et dépendante de la représentation de la mémoire vive au moment de leur exécution. De ce fait, un maliciel utilisant une même vulnérabilité sur des environnements différents (p. ex. architecture du processeur, version des bibliothèques logicielles ou du SE, etc.) peut échouer même si celui-ci est vulnérable.