Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
République Algérienne Démocratique et Populaire
Ministère de l’Enseignement Superieur et de
la Recherche Scientifique
2014/2015
N° d’ordre :
N° de série :
N° d’ordre :
N° de série :
UNIVERSITÉ ELchahid Hamma Lakhdar – El-Oued
FACULTÉ DES SCIENCES ET DE TECHNOLOGIE
Mémoire de fin d’étude
Présenté pour d’obtention du diplôme de
MASTER ACADEMIQUE Domaine : Mathématique et Informatique
Filière : Informatique
Spécialité : Système Distribué et Intelligence Artificielle
Présenté par
Melle Yagoub ElKhansa
Melle Derouiche Karima
Thème
Encadré par : Gherbi Kaddour
Devant le jury composé de:
Mr. Khalaifa abdEnnaser MC (B) Univ. El Oued Président
Mr. Othmani Samir MA (A) Univ. El Oued Examinateur
Mr. Gherbi kaddour MA (A) Univ. El Oued Rapporteur
Système de détection des
malwares sous Android
Remerciements
Je remercie tout d'abord notre Dieu qui nous a donné la force et la
volonté pour élaborer ce travail.
J’adresse nos vifs remerciements à notre encadreur
Mr. Gherbi Kaddour
, qui nous a aidés durant notre travail et par sa patience et ses
précieux conseils dont Il nous a entourés.
Sans son aide, notre travail n'aurait pas vu la lumière.
Je remercie vivement les membres du jury qui m’ont fait l’honneur
d’accepter de juger notre travail.
Notre reconnaissance va aussi à tous ceux qui ont collaboré à notre
formation en particulier les enseignants du département
d'Informatique, de l’université d'El-Oued.
Aussi à nos collègues de la promotion 2014-2015
Master Informatique,
Je remercie également tous ceux qui ont participé de près
ou de loin à élaborer ce travail.
Dédicaces
Je dédie ce travail ;
A ma très chère mère pour son amour inconditionnel et sa présence
À mes côtés dans les moments difficiles.
A la mémoire de mon très cher père symbole de courage, de tendresse et
que Dieu le
puissant l'accorde sa clémence et l'accueille en son vaste paradis.
A mes soeurs et frères pour leur encouragement.
A mes chers grands parents.
A mes grandes familles YAGOUB qui ont été toujours derrière moi.
A tous mes amies surtout : Karima.D et Siham.L
A tous mes collègues de la promotion 2014/2015.
A tous mes enseignants pour le savoir et les connaissances qu’ils m’ont
inculqué.
Je dédie ce modeste travail
Avec tout mon amour et tendresse.
ELKHANSA
Dédicaces
Je dédie ce travail ;
A ma très chère mère pour son amour inconditionnel et sa
présence
À mes côtés dans les moments difficiles.
A la mémoire de mon très cher père symbole de courage, de
tendresse et que Dieu le
puissant l'accorde sa clémence et l'accueille en son vaste paradis.
A mes soeurs et frères pour leur encouragement.
A mes chers grands parents.
A mes grandes familles DEROUICHE qui ont été toujours
derrière moi.
A tous mes amies surtout : Khansa.Y et Siham.L
A tous mes collègues de la promotion 2014/2015.
A tous mes enseignants pour le savoir et les connaissances qu’ils
m’ont inculqué.
Je dédie ce modeste travail
Avec tout mon amour et tendresse.
KARIMA
~ i ~
Résumé Android est devenu en quelques années le système d’exploitation le plus répandu sur les
plateformes mobiles de type smartphones et tablettes. Parallèlement à sa large adoption, ce
système est également devenu la cible de malware dont le nombre n’a cessé de croître, ce qui
a stimulé les travaux de recherche liés à l’analyse et à la détection de malware Android. Les
échantillons de malware Android étant principalement des versions infectées d’applications
existantes. Nous proposons dans cette thèse une méthode de caractérisation et de détection de
ces malware qui exploite ce mode d’infection et basée sur les techniques du machine learning.
Mot clé : Android, Mobile Malware, analyse statique, machine learning,
ملخص
الهواتف الذكية مبايل وعلى منصات نظام التشغيل األكثر شيوعا في غضون سنوات قليلة اندرو يد أصبح
هدف البرمجيات الخبيثة التي انتشرت بنسبة هائلة في السنوات كما أصبح هذا النظام .واألجهزة اللوحية
عينات . الخبيثة لنظام االندرويدبرمجيات المتعلقة بتحليل وكشف ال األمر الذي حفز البحوث االخيرة
.البرامج الخبيثة لالندرويد تكون اساسا من االصدارات المصابة للتطبيقات الموجودة
.تعتمد على اساليب التعلم اآللي والكشف عن البرمجيات الخبيثة حليلنقترح في هذه األطروحة طريقة لت
.، التحليل الثابت، التعلم اآلليمولالبرمجيات الخبيثة للمح، اندرويد :الكلمات المفتاحية
Abstract
Android has become in a few years the most common operating system on mobile platforms
like smartphones and tablets. Alongside its broad adoption, this system also became the
malware target whose number has grown steadily, which stimulated research related to the
analysis and detection of Android malware. Android malware samples being mainly infected
versions of existing applications. We propose in this thesis a method for characterizing and
detecting these malware which operates the mode of infection and based on machine learning
techniques.
Keywords: Android, Mobile Malware, static analysis, machine learning,
~ ii ~
Glossaire
PDA : Personal Digital assistant , Patent Ductus Arteriosus
SDK: Software Development kit
UIDs: Unix-like operating systems
API : Application Programming Interface
URL : Uniform Resource Locator
C&C: Command And Control.
IRC :Internet Relay Chat
RAT : Remote Administration Tool
BIOS : Basic Input output System
TDL-4 : The 'indestructible' botnet
MBR : Master Boot Record
CFG :Control Flow Graph en anglais
IDS : Système de Détection d’intrusions
ROC :Receiver Operating Characteristic
BPT): Bushy Park Time Tria
RTRL: Learning Rule
CPU: Central Processing Unit
LDR: Learning Decision Rules
SOFM :Self Organizing Map ou Self Organizing Feature Map
http://en.wikipedia.org/wiki/Unix-likehttp://en.wikipedia.org/wiki/Operating_system
~ iii ~
Sommaire Résumé ........................................................................................................................................ i
Glossaire ..................................................................................................................................... ii
Sommaire ................................................................................................................................... iii
Listes des figures ....................................................................................................................... vi
Liste des tableaux ..................................................................................................................... vii
Introduction générale : ................................................................................................................ 1
Chapitre I .................................................................................................................................... 3
Introduction : .............................................................................................................................. 4
1. Système Android : .............................................................................................................. 4
1.1. Architecture du système Android : .............................................................................. 5
1.1.1. Noyau Android : ................................................................................................... 5
1.1.2. Espace utilisateur : ................................................................................................ 6
1.1.3. Communications entre processus : ....................................................................... 7
1.2. Applications Android : ................................................................................................. 7
1.2.1. Architecture d’une application : les différents composants : ............................... 7
1.2.2. Intents : communication entre composants : ........................................................ 8
1.2.3. Intent-filter : .......................................................................................................... 9
1.2.4. Android Package : ................................................................................................ 9
2. Sécurité de système Android : .......................................................................................... 12
2.1. Mécanismes issus de Linux : ..................................................................................... 12
2.1.1. Système multi-utilisateur et contrôle d’accès : ................................................... 12
2.1.2. Isolation des applications : ................................................................................. 12
2.1.3. Chiffrement de la partition de données : ............................................................ 13
2.2. Mécanismes propres à Android : ............................................................................... 13
2.2.1. Permissions : ....................................................................................................... 13
2.2.2. Signature des applications : ................................................................................ 14
2.2.3. Analyse des applications : .................................................................................. 15
2.2.4. Protection de l’appareil et de ses données : ........................................................ 15
2.2.5. Administration de l’appareil : ............................................................................. 15
3. Limite de mécanisme de sécurité : ................................................................................... 16
3.1. Abus de permission : .................................................................................................. 16
3.2. Permissions : attaques par délégation et attaques par collusion ................................ 16
3.3. Communication entre composants via les intents : .................................................... 16
~ iv ~
3.4. Failles logicielles : élévation de privilège :................................................................ 18
4. Malware Android : ........................................................................................................... 18
4.1. Définitions : ............................................................................................................... 18
4.2. Actions effectuées par les malwares : ........................................................................ 18
4.3. Famille de malware : .................................................................................................. 19
4.3.1. Backodoor : ........................................................................................................ 19
4.3.2. Ransomware : ..................................................................................................... 20
4.3.3. Voleur : ............................................................................................................... 20
4.3.4. Rootkit : .............................................................................................................. 21
5. Technique de détection des malwares : ............................................................................ 22
5.1. Analyse dynamique : ................................................................................................. 22
5.1.1. Outils d’analyse dynamique : ............................................................................. 23
5.2. Analyse statique : ....................................................................................................... 23
5.2.1. Outils d’analyse statique : .................................................................................. 23
6. Les travaux existants : ...................................................................................................... 24
6.1. DREBIN : .................................................................................................................. 24
6.2. Kirin : ......................................................................................................................... 25
6.3. Woodpecker: .............................................................................................................. 25
Conclusion : .............................................................................................................................. 27
Chapitre II ................................................................................................................................. 28
Introduction : ............................................................................................................................ 29
1. Le cycle de vie d'une machine learning : .......................................................................... 29
1.1. Obtention des données et pré-processing: ................................................................. 29
1.2. Réalisation du modèle : .............................................................................................. 30
1.3. Phase d'apprentissage ................................................................................................. 30
1.4. Phase de validation .................................................................................................... 31
1.5. Performance du modèle : ........................................................................................... 32
2. Types de modèle: .............................................................................................................. 32
2.1. Modèle supervisé: ...................................................................................................... 32
2.1.1. Neural network : ................................................................................................. 32
2.1.2. Instance-Based Learning : .................................................................................. 33
2.1.3. k-nearest neighbor : ............................................................................................ 33
2.1.4. Naive Bayes : ...................................................................................................... 33
2.1.5. Learning Décision Rules : .................................................................................. 34
~ v ~
2.1.6. Learning Decision Trees : .................................................................................. 34
2.1.7. Quarter-sphere SVM : ........................................................................................ 34
2.2. Modèle non supervisé: ............................................................................................... 35
2.2.1. Single Linkage Clustering : ................................................................................ 35
2.2.2. Self organizing map ou self organizing Feature Maps (SOFM) : ...................... 35
2.2.3. Gamma-algorithm : ............................................................................................ 35
2.2.4. Machine à vecteur de support (SVM): ............................................................... 35
Conclusion : .............................................................................................................................. 39
Chapitre III ............................................................................................................................... 40
Introduction : ............................................................................................................................ 41
1. Notre Contributions : ........................................................................................................ 41
1.1. Sous-système De Téléchargement automatique des applications :.......................... 42
1.1.1. Applications normales : ...................................................................................... 43
II.1.1 Applications malveillant : ................................................................................... 44
1.2. Sous-système De Service web Virus Total : ............................................................. 45
2. Notre approche : ............................................................................................................... 46
2.1. Sous-système D’analyse d’applications Android : ................................................... 47
2.1.1. Extraction de métadonnées pour chaque application : ....................................... 47
2. Phase de Machine Learning: ............................................................................................ 52
3.1. Algorithme de Machine Learning (svm) : ................................................................. 52
3. Conclusion ........................................................................................................................ 52
Chapitre VI ............................................................................................................................... 53
Introduction : ............................................................................................................................ 54
1. Implémentation : ............................................................................................................... 54
1.1. Environnement de travail : ......................................................................................... 54
1.2. Androguard : .............................................................................................................. 54
2. Expérimentation: .............................................................................................................. 57
Conclusion : .............................................................................................................................. 67
Conclusion générale ................................................................................................................. 68
Bibliographie ............................................................................................................................ 69
~ vi ~
Listes des figures Figure I.1 : le logo d'Android. .................................................................................................... 4
Figure I.2 : Architecture de la plateforme Android. ................................................................... 5
Figure I.3 : Partage d’une page web grâce à un intent implicite. Extrait du code du navigateur
par défaut d’Android. ................................................................................................................. 8
Figure I.4 : Le format d’une application Android. ..................................................................... 9
Figure I.5 : Fichier AndroidManifest.xml d’Angry Birds Space. ............................................ 11
Figure I.6 : Fichier MANIFEST.MF de l’application HelloActivity. ...................................... 14
Figure I.7 : Fichier .SF de l’application HelloActivity. ........................................................... 14
Figure II.1 : SVM binaire. ........................................................................................................ 37
Figure II.2 : L’hyperplan H optimal, vecteurs supports et marge maximale............................ 38
Figure II.3 : à gauche cas linéairement séparable, à droite non linéairement séparable. ......... 38
Figure III.2 : L’architecture de notre Contributions. ................................................................ 42
Figure III.3 : jeu de données. .................................................................................................... 43
Figure III.4 : La distribution de normale apps. ......................................................................... 43
Figure III.5 : La distribution des applications. ......................................................................... 43
Figure III.6: La distribution des jeux. ....................................................................................... 44
Figure III.7 : Top 20 Familles de malware Android. .............................................................. 44
Figure III.8 : Sous-Système De Service web VirusTotal. ....................................................... 45
Figure III.9 : Les 20 Premiers antivirus. .................................................................................. 45
Figure III.10: Les 20 Derniers antivirus ................................................................................... 46
Figure III.1: notre proposition. ................................................................................................. 47
Figure III.11 : Extrait du code résultant de la décompilation de l’application JetBoy avec le
décompilateur par défaut d’Androguard. ................................................................................. 48
Figure III.12: Les permissions d’androïde d’application opera_mini_65. ............................... 49
Enfin, Le système génère un vecteur de caractéristiques similaires à la figure III.13. ........... 51
Figure III.14 : Une partie d’exemple de vecteur de caractéristique pour l'application facebook.
.................................................................................................................................................. 51
Figure III.15 : Un hyperplan séparateur avec un maximum marge (SVM). ............................ 52
Figure III.19 : Taux de détection « Itération 01 ». ................................................................... 58
Figure III.20 : Taux de détection « Itération 02 ». ................................................................... 59
Figure III.21 : Taux de détection « Itération 03 ». ................................................................... 60
Figure III.22 : Taux de détection « Itération 04 ». ................................................................... 61
Figure III.23 : Taux de détection « Itération 05 ». .................................................................. 62
Figure III.24 : Taux de détection « Itération 06 ». ................................................................... 63
Figure III.25 : Taux de détection « Itération 07 ». ................................................................... 64
Figure III.26 : Taux de détection « Itération 08 ». ................................................................... 65
Figure III.27 : Taux de détection « Itération 09 ». ................................................................... 66
file:///C:/Users/AISSAOUI.Computer/Desktop/Détection%20des%20malwares%20sous%20andoid.docx%23_Toc421634569
~ vii ~
Liste des tableaux
Table I.1 : Types de permission Android. ................................................................................ 13
Table III.2 : Liste d’Antivirus scanners. ................................................................................... 57
Table III.3 : Résultat d'itération 01. .......................................................................................... 58
Table III.4 : Résultat d'itération 02. .......................................................................................... 59
Table III.5 : Résultat d'itération 03. .......................................................................................... 60
Table III.6 : Résultat d'itération 04. .......................................................................................... 61
Table III.7 : Résultat d'itération 05. .......................................................................................... 62
Table III.8 : Résultat d'itération 06. .......................................................................................... 63
Table III.9 : Résultat d'itération 07. .......................................................................................... 64
Table III.10 : Résultat d'itération 08. ........................................................................................ 65
Table III.11 : Résultat d'itération 09. ........................................................................................ 66
1
Introduction générale :
Android est devenu en quelques années le système d’exploitation le plus utilisé et le plus
répandu sur les smartphone et tablette. Les appareils tournant sous Android offrent différentes
fonctionnalités allant du simple téléphone à celles des ordinateurs de bureau et assistants
numériques personnels (pockets PC ou PDA). Les combinaisons de ces fonctionnalités font
un point de concentration de divers données et services sensibles et en conséquence une cible
de valeur pour les développeurs de malware.
Aujourd'hui, nous avons ainsi vu l’apparition d’un nombre important d’applications
malveillantes qui cherchent à voler les données du téléphone, espionner l’utilisateur, etc. À la
vue du nombre grandissant des malware Android, il devient nécessaire de développer des
outils d’analyse de malware afin de comprendre leur fonctionnement et plus tard les détecter.
Les premiers travaux liés à la sécurité d’Android sont donc focalisés sur l’analyse des
limites de la sécurité sous Android et sur une manière de les combler. Ce type d’approche a
cependant une principale limitation qui est de ne détecter que ce que nous savons être
dangereux. Il ne permet donc pas de détecter et d’apprendre de nouvelles attaques. Des autres
travaux sont basés sur les flux d’information, il faut apprendre comment les attaques ont lieu
en analysant directement les malware et utiliser la base de connaissance acquise durant
l’apprentissage pour détecter les malware.
Contribution
Selon les travaux de Zhou et al [18]. La méthode d’infection principale utilisée par les
développeurs de malware est d’ajouter leur code malicieux à des applications existantes et
proposer les versions infectées de ces applications en téléchargement sur les plateformes de
téléchargement tel que Google Play.
Notre approche est classé parmi les deuxièmes travaux, elle effectue une large d'analyse
statique, rassemblant le plus nombreux possible les fonctionnalités d'une application. Ces
fonctionnalités sont intégrées dans un espace vectoriel conjointe, tels que les modèles
typiques indicatifs des logiciels malveillants peuvent être automatiquement identifiés et
utilisés pour expliquer les décisions selon notre méthode.
Organisation
Le présent mémoire est organisé comme suit : Nous avons commencé par une introduction
générale dans laquelle nous avons défini la problématique et notre contribution à la solution.
2
Le premier chapitre représente une introduction générale au contexte de ce travail et est
divisé en deux parties. La première partie concerne le système Android : l’architecture du
système, ses points communs et différences avec les systèmes Linux, la notion d’applications
Android, l’analyse des limites du modèle de sécurité d’Android, les menaces que représentent
les malware Android et les travaux essayant de combler ces limites.
Le deuxième chapitre décrit le Machine Learning. Nous expliquerons de façon détaillée le
cycle de vie d'une implémentation de la machine Learning. Nous démarrons par l'obtention et
nettoyage des données, puis la réalisation du modèle, la phase d'apprentissage, la phase de
validation jusqu'à la phase d'exécution.
Le troisième chapitre présente la description de notre proposition.
Le quatrième chapitre présente l’implémentation de notre proposition et expérimentation.
La dernière partie de ce mémoire est constituée d'une conclusion générale et des
perspectives pour continuer et améliorer ce travail.
Chapitre I L’état de l’art
Chapitre I Etat de l'art
4
Introduction :
L’objectif de cette thèse est de développer une méthode afin de caractériser et détecter les
malwares Android. La réalisation de cet objectif s’est faite en plusieurs étapes : La
collection de jeu de données (applications androïde), L’étape d’analyse, L’extraction des
caractéristiques, Méthode de détection des malwares. Dans ce premier chapitre, nous
introduisons dans un premier temps le système Android : son architecture, la notion
d’application Android et le modèle de sécurité d’Android. Ensuite, nous montrons les
limites du mécanisme de sécurité Android ainsi qu’un aperçu des menaces que
représentent les malware Android. Il est nécessaire d’analyser statiquement les
échantillons des malware concernés. Nous présentons ainsi un ensemble d’outils d’analyse
statique des applications Android. Enfin nous présentons les travaux existant dans le
domaine d'analyse statique.
1. Système Android :
Android est un système d'exploitation mobile pour smartphones, tablettes tactiles, PDA,
smartwatches et terminaux mobiles. Android partage une base commune aux systèmes Linux
qui est le noyau et, un ensemble de commandes et utilitaires nécessaires. Dans cette section,
nous présentons dans un premier temps l’architecture du système Android, celle de ses
applications et les mécanismes de sécurité fournis avec le système [29].
Figure I.1 : le logo d'Android.
http://fr.wikipedia.org/wiki/Syst%C3%A8me_d%27exploitation_mobilehttp://fr.wikipedia.org/wiki/Smartphonehttp://fr.wikipedia.org/wiki/Smartwatch
Chapitre I Etat de l'art
5
1.1. Architecture du système Android :
Le système Android est divisé en plusieurs couches comme illustré sur la figure I.2. La partie
la plus basse représente le cœur du système, c’est-à-dire le noyau, et le reste l’espace
utilisateur.
Figure I.2 : Architecture de la plateforme Android.
1.1.1. Noyau Android :
Le noyau Android est une version modifiée du noyau Linux (Noyau utilisé par les
distributions de type Linux telles que Debian et Ubuntu) et représente le cœur du système. Le
noyau est le programme servant d’interface entre les différents composants du système
(périphériques, processus, fichiers etc.). Parmi les modifications notables apportées dans le
noyau Android, nous pouvons citer les mécanismes binder, ashmem, wakelock, low
memory killer, logger, RAM console et Paranoid Networking.
Binder : est un mécanisme de communication entre processus et d’appel de méthodes
distantes. L’appel de méthodes distantes, appelé Remote Procedure Call en anglais,
consiste à faire exécuter une méthode par une entité distante. Il est inspiré du projet
OpenBinder [35]. Il est un élément essentiel du fonctionnement du système Android.
Chapitre I Etat de l'art
6
Ashmem : pour Anonymous Shared Memory est un mécanisme de partage de mémoire
similaire à celui du noyau Linux shm. Il est utilisé pour partager les données entre
applications Android.
Wakelock : est un mécanisme servant à notifier le noyau de ne pas se mettre en veille.
Contrairement aux systèmes Linux, le système Android essaie par défaut de se mettre
en veille étant donné qu’il est destiné à tourner sur des appareils à ressources limitées.
Lors d’exécution de code ne devant être interrompu, le wakelock est ainsi utilisé pour
dire au système de rester éveillé.
Low memory killer : est un mécanisme utilisé par le noyau pour libérer de la
mémoire lorsqu’il ne reste plus assez de mémoire.
Logger : est un mécanisme de journalisation qui écrit les évènements du système
uniquement dans des zones allouées en mémoire. Contrairement aux systèmes Linux
traditionnels, les évènements écrits dans le journal du système ne sont ainsi jamais
écrits dans un fichier.
RAM Console : est un mécanisme qui préserve en mémoire le contenu des évènements
systèmes ajoutés par du code noyau (via la fonction printk) lors de la précédente
exécution du système. Son contenu est accessible via le fichier /proc/last_kmsg.
Paranoid Network : est un mécanisme contrôlant l’accès des applications au réseau.
Sous Linux, toute application a le droit d’utiliser les sockets et accéder au réseau. Le
socket est la structure de base liée aux opérations réseaux sous Linux. Sous Android,
l’inverse est la règle car seule les applications avec une autorisation explicite sont
autorisées à créer des sockets et communiquer sur le réseau [13].
1.1.2. Espace utilisateur :
L’espace utilisateur sous Android peut être divisé en plusieurs parties comme illustré sur la
figure I.2
La couche Applications : renferme les applications fournies par défaut sur le
téléphone ainsi que celles qui seront installées plus tard par l’utilisateur. Il s’agit des
applications avec lesquelles l’utilisateur pourra interagir en général (ex : application de
messagerie et gestion des contacts). Les applications Android sont principalement
écrites en Java.
Android framework : est l’ensemble des services et ressources fournies par le système
Android. Il s’agit principalement de services tournant dans quelques processus clés du
système Android tels que system_server et mediaserver
Chapitre I Etat de l'art
7
Android runtime : est l’environnement d’exécution des applications Android. Il
contient la bibliothèque Java utilisable par les applications ainsi qu’une machine
virtuelle appelée Dalvik.
Libraries : renferme les bibliothèques natives du système. Elles sont généralement
utilisées par les applications natives du système.
HAL ou Hardware Abstraction Layer : sert d’interface standard entre le système et
les pilotes des périphériques présents sur l’appareil (ex : caméra, capteur etc [13].
1.1.3. Communications entre processus :
Android est un environnement d’exécution où les applications sont poussées à
collaborer pour fonctionner. Le but de cette collaboration est de limiter la duplication de
code dans les applications et de proposer un ensemble assez grand de fonctionnalités aux
différentes applications du système. Un exemple illustrant cette collaboration est
l’application caméra. Pour utiliser la caméra d’un appareil, une application doit connaître
son mode de fonctionnement exact sachant qu’une caméra peut être différente d’un
modèle de téléphone à un autre. Pour faciliter la tâche au développeur de l’application,
l’application caméra du téléphone propose une interface permettant aux autres
applications de prendre des photos ou enregistrer des vidéos à leur place puis leur
transmettre le résultat. Ce système de collaboration repose plusieurs fonctionnalités du
système. Du point de vue des développeurs d’application, la collaboration repose sur
l’usage des intents et des composants Content Provider pour échanger des messages et
partager du contenu [13].
1.2. Applications Android :
1.2.1. Architecture d’une application : les différents composants :
Une application Android est écrite en Java. Contrairement aux applications Java standard,
une application Android peut posséder plusieurs points d’entrée. Plus précisément, une
application Android peut avoir plusieurs composants et chacun d’eux peut-être un point
d’entrée dans le programme. Il existe quatre types de composants : Activity, ContentProvider,
Service et BroadcastReceiver.
Activity : Un composant Activity est une interface utilisateur. Une application de
messagerie électronique peut par exemple avoir trois composants.
Activity : un pour naviguer entre les répertoires de la messagerie, le deuxième pour
l’affiche d’un message et le dernier pour l’édition et l’envoi.
Chapitre I Etat de l'art
8
ContentProvider : Un ContentProvider est un composant servant au partage de
données d’une application. Son rôle est de servir d’interface entre l’application
souhaitant accéder aux données et les données.
Service : Un service est un composant effectuant des tâches en arrière-plan. Il est
utilisé pour effectuer de longues tâches internes à l’application ou à exécuter une tâche
à la demande d’une application.
BroadcastReceiver : Un BroadcastReceiver est un composant utilisé pour écouter les
messages en large diffusion sur le système. Un exemple de ce type de message est la
réception d’un nouveau SMS. Lorsqu’un nouveau SMS est reçu par le téléphone, le
système envoie un message en broadcast pour notifier les différentes applications
d’envoi et réception de SMS. Ce composant ne possède aucune interface graphique et
n’est pas censé exécuter de longues tâches.
1.2.2. Intents : communication entre composants :
Un intent est un message utilisé par les composants des applications pour communiquer
entre eux. Plus précisément, il est utilisé pour exécuter que le destinataire exécute une requête
à la demande de l’émetteur. Le composant émettant l’intent et celui la recevant ne font pas
forcément partie de la même application. Un intent a deux usages principaux : lancer un
composant Activity ou Service et diffuser un message dans le système aux composants
Broadcast Receiver[22].
1 static final void sharePage(Context c, String title, String url, 2 Bitmap favicon, Bitmap screenshot) { 3 Intent send = new Intent (Intent.ACTION_SEND); 4 send.setType("text/plain"); 5 send.putExtra(Intent.EXTRA_TEXT, url); 6 send.putExtra(Intent.EXTRA_SUBJECT, title); 7 send.putExtra(Browser.EXTRA_SHARE_FAVICON, favicon); 8 send.putExtra(Browser.EXTRA_SHARE_SCREENSHOT, screenshot); 9 try { 10 c.startActivity(Intent.createChooser(send, c.getString( 11 R.string.choosertitle_sharevia))); 12 } catch (android.content.ActivityNotFoundException ex) { 13 // if no app handles it, do nothing 14 } 15 }
Figure I.3 : Partage d’une page web grâce à un intent implicite. Extrait du code du navigateur
par défaut d’Android.
Chapitre I Etat de l'art
9
1.2.3. Intent-filter :
Dans la section précédente, nous avons présenté les intents, un type de message utilisé par les
composants d’une application pour communiquer avec d’autres composants. Lors de
l’émission de l’intent, le système calcule à partir des attributs associés à l’intent le(s)
destinataire(s) du message. Deux cas peuvent se présenter. Dans le premier cas, l’émetteur a
défini explicitement le destinataire (explicit intent). Le message est donc transmis directement
au destinataire choisi par l’émetteur. Dans le second cas, l’émetteur n’a pas défini de
destinataire et il appartient au système de le définir (implicit intent). Lorsque ce cas se
présente, le système définit la liste des destinataires possibles grâce à un filtre déclaré par
chaque application appelée intent-ilter. Ce dernier définit pour chaque composant quels sont
les intents que le composant souhaite recevoir et est déclaré dans le fichier
AndroidManifest.xml qui accompagne chaque application Android. Dans la figure I.5 par
exemple, l’application filtre les intents que deux de ses composants peuvent recevoir. Le
premier composant, App, ne peut recevoir que les intents dont les attributs action et category
ont respectivement comme valeur associée android.intent.action.MAIN et
android.intent.category.LAUNCHER. Quant au deuxième composant, BillingReceiver, il ne
peut recevoir que des intents auquel l’attribut action est associé à la valeur
com.android.vending.billing.RESPONSE_CODE [23].
1.2.4. Android Package :
Une application Android prend généralement la forme d’un fichier dont l’extension est. apk. Il
s’agit cependant d’une simple archive ZIP. Cette archive contient différents éléments dont les
plus importants, lors de la recherche de vulnérabilités [02], sont :
Figure I.4 : Le format d’une application Android.
Chapitre I Etat de l'art
10
AndroidManifest.xml :
AndroidManifest.xml est un fichier xml contenant les informations liées à
l’application qui sont nécessaires au système. Il est créé par le développeur de
l’application. Parmi les informations qu’il contient, nous pouvons citer :
le nom du package de l’application.
le composant Activity à lancer au lancement de l’application.
la liste des composants de l’application et les informations qui sont liés aux
composants (ex : permission pour accéder à un composant Service sensible, les Intents
attendus par les composants de l’application etc).
les permissions demandées par l’application (ex : read_sms pour lire les SMS).
les permissions déclarées par l’application.
les bibliothèques utilisées par l’application.
le niveau minimal du SDK Android pour que l’application puisse fonctionner.
Classes.dex :
Le code de chaque classe d’une application Java standard est stocké dans des
fichiers .class différents. Sous Android, ce n’est pas le cas. Tout est stocké dans un
seul et unique fichier qui est classes.dex. De plus, si le code des applications Java est
lui compilé en bytecode Java, celui des applications Android est lui compilé dans un
autre format qui est le bytecode dalvik. C’est le contenu de ce fichier, ou plus
précisément une version optimisée de celui-ci, qui sera interprété par la machine
virtuelle Dalvik pour exécuter l’application.
Autres :
Un apk contient d’autres entrées telles que les répertoires META-INF, res, jni et lib.
Le répertoire META-INF contient ainsi des fichiers liés au contrôle d’intégrité de
l’application et à l’identification de son développeur. Le répertoire res contient les
ressources utilisées par l’application telles que des images, sons, etc. Les répertoires
jni et lib contiennent les bibliothèques utilisées par l’application.
1 5 9
Chapitre I Etat de l'art
11
11 /> 21 22 27 32 33 36 37 40 42 43 44
Figure I.5 : Fichier AndroidManifest.xml d’Angry Birds Space.
Chapitre I Etat de l'art
12
2. Sécurité de système Android :
Le noyau d’Android est un noyau Linux avec un ensemble de modifications et d’ajouts.
Une partie des mécanismes de sécurité offerts par Android proviennent ainsi du système
Linux auxquels s’ajoutent des mécanismes propres à Android. Ces mécanismes ont pour but
de protéger les applications les unes des autres, les communications entre applications et les
ressources sensibles disponibles dans le système.
2.1. Mécanismes issus de Linux :
Le noyau d’Android est une version modifiée du noyau Linux. Il bénéficie ainsi des
mécanismes offerts par les noyaux et systèmes Linux : système multi-utilisateur, contrôle
d’accès (lecture, écriture et exécution) basé sur les utilisateurs et isolation par processus.
2.1.1. Système multi-utilisateur et contrôle d’accès :
Android supporte l’existence de plusieurs utilisateurs dans le système et utilise le
mécanisme de contrôle d’accès fourni par Linux. L’accès aux différentes ressources dans le
système est ainsi défini par des droits d’accès en lecture, écriture et exécution. Ces accès sont
définis pour trois entités : le propriétaire, le groupe propriétaire et les autres. Il existe un
ensemble prédéfini d’utilisateurs par défaut sur les systèmes Android dont une partie est
associée au fonctionnement interne du système. Parmi ces utilisateurs nous pouvons citer root
qui est l’utilisateur avec les droits les plus élevés dans les systèmes de type Linux et Android
et l’utilisateur system qui est associé aux différentes ressources nécessaires au fonctionnement
du système tels que les bibliothèques natives partagées. Tout au long de l’exécution du
système, la liste des utilisateurs peut ensuite évoluer. En effet, d’autres utilisateurs sont créés
à chaque fois qu’une application est installée sur le système. Ces utilisateurs ont généralement
des droits restreints à savoir qu’ils ont uniquement accès aux ressources appartenant à
l’application à laquelle ils sont associés. Cette restriction évite ainsi que les données de fichier
appartenant à une application ne soit lues ou modifiées par une autre application.
2.1.2. Isolation des applications :
En plus d’associer des utilisateurs différents à chaque application, Android les cloisonne
également en les exécutant dans des processus différents et en leur attribuant des répertoires
différents dans lesquels les applications stockent les données qu’ils manipulent. Les processus
associés à chaque application s’exécutent avec les droits de l’utilisateur associé à l’application
et les répertoires appartiennent également à l’utilisateur auquel l’application est associée. Ce
cloisonnement évite ainsi qu’une application interfère avec l’exécution d’une autre
application ou qu’elle modifie les données d’une autre application.
Chapitre I Etat de l'art
13
Type Description
Normal Valeur par défaut des permissions. Elle est
automatiquement accordée à toute application la
demandant.
Dangerous Nécessite une validation de la part de l’utilisateur
afin d’accorder la permission. Exemple :
read_sms pour l’accès aux SMS.
Signature Permission accordée uniquement si l’application
la demandant est signée avec le certificat du
développeur ayant déclarée la permission.
signatureOrSystem Permission accordée uniquement aux
applications system, plus précisément celles dans
la partition system, ou à celles ayant été signées
avec le même certificat que l’application ayant
déclarée la permission.
Table I.1 : Types de permission Android.
2.1.3. Chiffrement de la partition de données :
Depuis la version 3.0 d’Android, le système offre la possibilité de chiffrer la partition data.
Cette partition contient l’ensemble des applications du téléphone, à l’exception des
applications fournies par défaut que l’utilisateur ne peut désinstaller, ainsi que les données
qu’elles manipulent. Le chiffrement est réalisé grâce au module dm-crypt [28] fourni par le
noyau.
2.2. Mécanismes propres à Android :
2.2.1. Permissions :
Android propose un ensemble de ressources sensibles aux applications installées sur le
téléphone (réseau, caméra, système de géolocalisation, bluetooth, etc.). Pour les utiliser, une
application devra déclarer les permissions correspondantes. Une application souhaitant lire les
sms devra par exemple avoir la permission read_sms. À l’installation, l’utilisateur valide les
permissions demandées par l’application. Pour que l’installation se fasse, il doit toutes les
accepter. Une fois l’application installée, plus aucune validation n’est nécessaire de la part de
l’utilisateur. La seule exception est l’envoi de messages à des numéros surtaxés où
l’utilisateur doit valider (fonctionnalité disponible depuis Android 4.2) chaque envoi. Il existe
quatre types de permission que nous résumons dans le tableau I. 1.
Chapitre I Etat de l'art
14
Name: AndroidManifest.xml SHA1-Digest: 9FiHXTmeVecbFb3enszaSlXIZp0= Name: res/layout/hello_activity.xml SHA1-Digest: BJz/aHbKT/Or0LwKJZ/jxN+WzmE= Name: resources.arsc SHA1-Digest: khWw+6lJ8dfajIaKkvbCuQ7YYzI= Name: classes.dex SHA1-Digest: +aR5lPSRcAvOrX+OhsxELXB1qGg=
Figure I.6 : Fichier MANIFEST.MF de l’application HelloActivity.
2.2.2. Signature des applications :
Android requiert que chaque application soit signée afin d’être installée sur le téléphone.
Les développeurs signent ainsi leur application avec un certificat dont la clé privée leur est
propre. Les applications Android sont signées avec l’outil jarsigner. Il prend en entrée une
archive jar ou zip et un certificat. Il donne en sortie l’archive à laquelle ont été ajoutés deux
fichiers : un fichier avec l’extension .sf et un autre fichier avec l’extension .rsa ou .dsa selon
les clés utilisées. L’entête du premier fichier correspond au hash du fichier MANIFEST.MF.
Le reste de son contenu est similaire au fichier meta-inf/manifest.mf qui est présent dans
chaque archive jar. MANIFEST.MF recense pour chaque fichier présent dans l’archive son
nom, son hash et l’algorithme de hachage utilisé. La figure I.6 est le fichier manifest.mf de
l’application HelloActivity fourni en exemple avec le kit de développement Android. Pour
chaque fichier présent dans l’archive nous avons son nom, un algorithme de hachage et le
hash du fichier. Le fichier .SF contient les mêmes types d’information que MANIFEST.MF.
Pour chaque fichier présent dans l’archive nous avons une entrée constituée du nom du
fichier, un algorithme de hachage et un hash.
Signature-Version: 1.0 Created-By: 1.0 (Android SignApk) SHA1-Digest-Manifest: Qenbz+ZjLsHBpHWbAHMYhLpfies= Name: AndroidManifest.xml SHA1-Digest: uziqi6KmjjgyRnooQ7j5ZHIKVTw= Name: res/layout/hello_activity.xml SHA1-Digest: who+PyjjYjRHN6maNog494Cr+CE= Name: resources.arsc SHA1-Digest: WlDZ0LWZ+zrAmxUTKZuz99hUoZo= Name: classes.dex SHA1-Digest: QjwcQAkf4iVckku4qf7kiLRSndo=
Figure I.7 : Fichier .SF de l’application HelloActivity.
Chapitre I Etat de l'art
15
2.2.3. Analyse des applications :
Google analyse régulièrement les applications proposées en téléchargement sur Google
Play ainsi que celles en instance d’être installées sur les téléphones des utilisateurs. Si aucune
information sur la nature exacte des analyses n’est fournie par Google, nous savons qu’une
analyse statique et dynamique des applications sont faites pour détecter des motifs synonymes
de menace dans l’application ou des comportements malveillants.
2.2.4. Protection de l’appareil et de ses données :
Android possède un ensemble d’outils destinés aux développeurs du système. Parmi ces
outils nous pouvons citer adb et fastboot. La commande adb permet de communiquer avec un
émulateur Android ou un téléphone. Parmi les fonctions proposées, il y a l’ouverture d’un
shell distant sur le téléphone, l’installation ou la suppression d’application et le transfert de
fichier. Pour protéger le téléphone de tout usage malveillant de ces outils, la communication
est possible uniquement si le mode debug est activé. Une authentification par clé de
l’ordinateur auprès du téléphone s’ajoute également à cela depuis la version 4.2 d’Android
afin de filtrer les machines pouvant communiquer avec le téléphone via adb. La commande
fastboot sert à effacer/remplacer le contenu des différentes partitions sur le téléphone. Afin de
l’utiliser, l’utilisateur doit dans un premier temps débloquer cette fonctionnalité au démarrage
et ce processus de déblocage implique la suppression du contenu de la partition data du
téléphone. Cette partition contient les données de l’utilisateur ainsi que des différentes
applications. L’action de remplacer le contenu d’une partition est souvent désigner par
l’expression flasher une image, l’image étant le nouveau contenu de la partition. Un attaquant
désirant ainsi remplacer une partie des composants logiciels du système via fastboot ne
pourra ainsi accéder aux données de l’utilisateur.
2.2.5. Administration de l’appareil :
Android propose depuis sa version 2.2 une API permettant de développer des applications
afin d’administrer les téléphones [21]. L’API permet de renforcer la politique sur les mots de
passe (ex : taille, expiration et nombre de tentatives), imposer le chiffrement des partitions,
activer / désactiver la caméra (fonctionnalité disponible depuis Android 4.0), demander la
création d’un nouveau mot de passe, verrouiller le téléphone et remettre le téléphone à la
configuration d’usine.
Chapitre I Etat de l'art
16
3. Limite de mécanisme de sécurité :
3.1. Abus de permission :
Les permissions donnent accès aux ressources sensibles du téléphone aux applications. Si
l’utilisateur souhaite installer une application, il doit lui accorder toutes les permissions
qu’elle a demandées. Si les permissions filtrent l’accès aux ressources sensibles, il n’existe
cependant aucune vérification au niveau de l’usage de ces ressources. Seule la confiance aux
développeurs de l’application permet de s’assurer qu’il n’y aura aucun abus. Les attaques les
plus simples utilisent ainsi les permissions de manière abusive et c’est le cas de la plupart des
malware ayant pour but de faire fuir des données sensibles du téléphone.
3.2. Permissions : attaques par délégation et attaques par collusion
Une attaque par délégation [01] consiste à déléguer l’exécution de la tâche nécessitant une
permission que l’application malveillante ne possède pas à une autre application qui elle la
possède. Par exemple, une application n’ayant pas la permission de communiquer sur le
réseau pourrait se servir du navigateur pour poster des informations ou télécharger des
fichiers.
3.3. Communication entre composants via les intents :
Les intents sont des messages échangés entre les composants des applications pour
transmettre des requêtes. La possibilité d’envoyer des intents entre deux composants de deux
applications différentes apporte une surface d’attaque supplémentaire. Dans [08], Chin et al.
décrivent en se basant sur leur analyse du fonctionnement des întents des scénarios d’attaques
qui pourraient exploiter cette surface d’attaque afin d’espionner les échanges de message
entre application, les bloquer, les modifier, élever ses privilèges et influencer sur le
comportement d’une application.
3.3.1. Interception des messages diffusés dans le système
Les broadcast intents sont des messages diffusés dans tout le système. Ils peuvent ainsi
avoir un ou plusieurs destinataires. L’une des vulnérabilités qu’introduit ce type de
communication est la possibilité d’observer les informations diffusées dans le système et
éventuellement les intercepter, bloquer ou modifier. Lorsqu’une application diffuse un
broadcast intent, elle définit un ensemble d’attributs qui permettent au système d’identifier les
composants BroadcastReceiver présents dans le système qui attendent ce type de message.
Pour observer les messages attendus par le composant BroadcastReceiver d’une application, il
suffit ainsi à une application malveillante de déclarer un composant du même type avec le
Chapitre I Etat de l'art
17
même intent-filter. Pour observer les messages reçus par le composant BillingReceiver
déclaré dans le Figure I.5, une application malveillante n’a qu’à déclarer un composant du
même type en précisant que ce composant n’accepte que les intents avec un attribut action
dont la valeur associée est com.android.vending.billing.RESPONSE_CODE. Un broadcast
intent peut être transmis de manière simultané à tous les destinataires ou en suivant un ordre.
Dans le cas de ce dernier, l’intent est transmis d’un composant à l’autre dans un ordre défini
par le système. Chaque composant BroadcastReceiver peut ainsi modifier ou bloquer les
informations transmises avant que le message ne soit transmis au prochain destinataire. Si une
application malveillante se trouve au milieu de la chaîne de transmission, elle peut donc
modifier le contenu de l’intent émis et envoyer de fausses données aux composants en attente
du message. Elle peut également décider de ne pas faire suivre le message et empêcher les
autres composants de le recevoir.
3.3.2. Détournement des intents à destination des composants Activity et Service :
Lorsqu’une application émet un intent, il peut soit définir explicitement le destinataire soit
laisser le système le définir à sa place. Dans le deuxième cas, l’émetteur n’a aucune garantie
sur l’identité du destinataire ce qui donne ainsi la possibilité de détourner les messages du
destinataire légitime. Une application malveillante souhaitant intercepter un implicite intent
n’a donc qu’à déclarer un composant ayant un intent filter correspondant à l’intent qu’il
souhaite détourner.
3.3.3. Vol/abus des permissions :
Nous avons écrit en section II.2.2 que les intents pouvaient également servir à transmettre
des permissions pour accéder à des données au destinataire du message. Positionner le flasg
FLAG_GRANT_WRITE_URI_PERMISSION donne par exemple l’accès en lecture aux
données liées à l’intent au destinataire du message. Une application malveillante interceptant
des intents transmettant des permissions peut ainsi abuser de ces permissions et voler ou
modifier les données auxquelles les permissions donnent accès.
3.3.4. Intents malveillants :
Le but de cette attaque est d’envoyer des requêtes malveillantes à traiter par un composant
cible. Un composant qui peut recevoir des intents d’autres applications n’est pas seulement
exposé aux applications que son développeur pensait servir mais à toutes applications sur le
système. Cette exposition à toutes les applications du système offre ainsi une surface
d’attaque aux applications malveillantes qui elle aussi peut demander au composant de traiter
une requête, même si cette requête est malicieuse. Les navigateurs web sous Android ont par
Chapitre I Etat de l'art
18
exemple un composant Activity qui ouvre les URL à la demande d’autres applications. Cette
fonctionnalité peut ainsi être détournée par une application qui n’a pas accès au réseau afin de
faire fuir des données ou télécharger des fichiers. Pour cela l’application malveillante émettra
un intent à destination du navigateur afin que ce dernier ouvre une adresse web.
3.4. Failles logicielles : élévation de privilège :
Comme tout programme, le système Android a également des failles logicielles. Exploiter
certaines d’entre elles permet d’élever les privilèges d’une application et ainsi exécuter des
opérations sensibles que nous ne pouvions faire. Obtenir les droits root permet par exemple de
modifier le contenu de la partition system sous Android pour installer des applications
système ou les remplacer. Le noyau Android étant basé sur un noyau Linux, il hérite ainsi de
ses vulnérabilités.
4. Malware Android :
4.1. Définitions :
Nous appelons malware un programme ou un code dont le but est de nuire à un système
donné. Dans le reste du document nous ferons souvent usage des termes échantillon de
malware et famille de malware. Un échantillon d’un malware est une application, comprendre
ici application Android correspondant à un fichier apk, qui contient ce malware. Quant à une
famille de malware, il s’agit de l’ensemble des échantillons d’un malware. Analyser un
malware revient ainsi à analyser un ou plusieurs de ses échantillons afin d’extraire des
informations liées au malware et détecter un malware revient à décider si une application
donnée est un échantillon d’un malware. Les premiers travaux qui ont consisté à dresser un
bilan des menaces que représentent les malwares Android sont les travaux d’Y. Zhou et X.
Jiang dans [18]. Leurs travaux sont basés sur l’analyse de plus de 1200 échantillons de
malware qu’ils ont collecté de 2010 à 2011.
4.2. Actions effectuées par les malwares :
Les actions effectuées par les codes malveillants peuvent être réparties dans quatre groupes :
1. élévation de privilège
2. contrôle à distance
3. charge financière
4. Vol de données.
Chapitre I Etat de l'art
19
4.3. Famille de malware :
Il existe des millions de malwares différents. Ces malwares ont des fonctionnalités
différentes, ils peuvent être classés par familles. Il est important de pouvoir classer un
malware en fonction de son impact et son but [12].
4.3.1. Backodoor :
Les backdoors sont des malwares permettant à un attaquant de prendre la main sur le
système infecté. Grâce à ce port ouvert, l'administrer à distance .cette technique. Impose une
connexion à chaque machine afin de l'administration d'un parc de machine infectées est alors
des plus laborieuses. On comprend que cette approche limite le nombre de machines
humainement gérable par un seul attaquant. Pour pallier cette limitation, ces backdoors ont
évolué en botent. Un botnet est un ensemble de machines infectées entre elles par un serveur
central qui diffuse les ordres au travers du botnet. Ce serveur central est communément appelé
C&C (Command and Control). Ces serveur peuvent être des serveurs IRC (Internet Relay
Chat) ou encore des serveurs web. De cette manière, l'attaquant peut administrer des milliers
de machines depuis un point central. Cette architecture client/ serveur est parfois édulcorée
par un modèle pair à pair : quelques collecteurs obtiennent les ordres depuis le C&C, ensuite
les ordres sont diffusés dans le voisinage du collecteur. De proche en proche les ordres sont
ainsi diffusés dans tout le bonet. Waledac est un bon exemple d'une telle architecture.
Des frameworks ont été créés pour faciliter l'administration de ces machines infectées. Ces
framworks, appelés RAT (Remote Administration Tool), permettent de prendre la main sur
les machines infectées, mais également d'automatiser la capture d'écran, le transfert de fichiers
entre l'attaquant et la machine infectée, de gérer la base de registre Windows. Les
fonctionnalités de ces RAT sont seulement limitées par l'imagination des développeurs.
Pour saisir l'impact de ce type de malware, de nombreux exemples d'utilisation existent. Par
exemple, lors des révolutions arabes de 2011, un RAT nommé DarkComet a été utilisé par les
autorités syriennes pour contrôler les ordinateurs des opposants au régime.
Four ce type de malware, le premier travail de l'analyste de malware consiste à trouver le
C&C afin de bloquer tout accès à ce serveur. Cette ce blocage ne nettoie pas les machines
infectées par le malware mais l'attaquant sera neutralisé, en effet il ne pourra plus donner
d'ordre au botnet. Cette approche permet de gagner du temps pour continuer les analyses. La
seconde étape consiste alors comprendre comment éradiquer le malware, c'est-à-dire
désinfecter la machine. Dans un troisième temps, on s'attachera à cerner les fonctionnalités du
malware pour en cerner l'impact ainsi que son protocole de communication avec le C&C par
Chapitre I Etat de l'art
20
exemple pour définir une détection générique de son trafic réseau cette dernière détection
générique peut alors permettre la détection de nouveaux C&C…
4.3.2. Ransomware :
Les ransomwares sont des malwares créés pour que l’utilisateur infecté ne puisse plus utiliser
son système d’information ou consulter ses documents sans payer une rançon à l’attaquant.
Dans le cas ou ce sont les données qui ne peuvent plus être consultées, le ransomware chiffre
les fichiers et l’attaquant ne donnera la clé de déchiffrement qu’après avoir reçu la rançon.
Dans le cas où le système d’information est visée, la machine st limitée dans son utilisation.
Par exemple, il est impossible de se connecter sur Internet. Dans ce cas, l’attaquant fournit un
logiciel de déblocage après avoir reçu la rançon.
Pour ce type de malware, l’analyste devra comprendre l’algorithme de chiffrement ou les
mécanismes de blocage de la machine mis en place par l’attaquant. En effet, des erreurs
d’implémentation ou des algorithmes faibles permettent souvent de restaurer les fichiers de la
victime sans payer aucune rançon.
Il existe de nombreux ransomwares, parmi ceux-ci Matsnu (ou Rannoh) est particulièrement
intéressent. Une des caractéristiques de ce malware est sa grande vitesse de propagation ainsi
que le nombre important de machines bloquées. Ce ransomware était interfacé avec plusieurs
serveurs d’administration. De plus, pour rendre l’analyse encore plus complexe, le malware
générait des clés chiffrement uniques pour chaque fichier chiffré. Le chiffrement utilisé était
le RC4 qui est considéré comme un algorithme de chiffrement fort.
4.3.3. Voleur :
Les voleurs (ou stealer) sont des malwares crées dans le but de voler des informations ou
des données sur la machine infectée. Comme dans le cas des backdoors, ces malwares se
connectent à des serveurs centraux pour envoyer les données volées. Ces données peuvent
être de tout type : des e-mails, des plans, des numéros de carte de crédit, des bitcoins
(monnaie virtuelle)…
Tout comme pour les backdoors, le but de l’analyste de malware est de trouver le C&C afin
de bloquer toutes les communications avec celui-ci. La seconde étape est d’analyser quels
types de données ont été exfiltrées par ce malwares afin d’évaluer l’impact.
Il existe de nombreuses manières pour faire sortir les données d’un système : l’attaquant
peut utiliser de nombreux canaux de communication tels que l’envoi d’e-mails, les salons
Chapitre I Etat de l'art
21
IRC, ou encore le web en envoyant par exemple les informations sur PasteBin, un outil
permettant de copier un texte pour le rendre disponible aux autres internautes.
Ce type de malware peut être illustré par le cas de Duqu, découvert en 2011 dans le
laboratoire de cryptophragie et de sécurité système de l’université polytechnique et
économique de Budapest. Ce malware a été conçu pour capturer les frappes du clavier de la
machine infectée et également pour récupérer des informations sur le système infecté. Les
cibles de ce malware étaient peu nombreuses et concernaient essentiellement des systèmes de
contrôle industriel.
4.3.4. Rootkit :
Les rootkits sont des malwares servant à dissimuler l’activité de l’attaquant sur la machine
infectée. Les premiers rootkits sont nés en 1994 sur Linux, en 1998 sous Windows et en 2004
sous Mac OS X.
Les premier but d’un rootkit est de se dissimuler, pour cela le rootkit va supprimer sa trace
dans les journaux système. Il va également cacher son existence au niveau de la base de
registre, mais aussi au niveau du système de fichiers via des mécanismes de hook.
Un hook consiste à remplacer un appel système du système d’exploitation par un autre
appel. Dans notre cas, le malware peut par exemple remplacer l’appel système permettant
d’afficher les fichiers présents dans un répertoire par un appel modifié listant seulement les
fichiers non liés au rootkit. Ainsi les fichiers nécessaires au fonctionnement du malware
restent cachés.
Un rootkit cachera par exemple son activité de processus ou son activité réseau. De cette
manière, l’utilisateur de la machine infectée sera incapable de voir qu’un logiciel non voulu
est on cours de fonctionnement sur sa machine. De plus, les rootkits peuvent également
stopper les antivirus ou firewalls pour ne pas être interrompus pendant que l’attaquant se
connecte à la machine infectés. A la manière d’une backdoor, les rootkits laissent
généralement une porte dérobée pour permettre à l’attaquant d’utiliser la machine infectée.
Les rootkits ont besoin de privilèges élevés pour pouvoir fonctionner. Il est donc fréquent
que ces rootkits soient des drivers du noyau chargés automatiquement au démarrage de la
machine. Ces dernières années, de nouveau du types de rootkits apparaissent agissant au
niveau du BIOS de la machine. Ces rootkits sont très compliqués à identifier, car le système
d'exploitation n'est pas capable de les analyser. En 2010, un chercheur a publié une méthode
Chapitre I Etat de l'art
22
permettant de remplacer le firmware d'une carte réseaux. Ce nouveau firmware permettait une
prise de main à distance de la machine infectée sans rien modifier au système d'exploitation
Ce type de malware est le plus compliqué à analyser. Les fonctionnalités son multiples, la
taille de ce type de malware est généralement grande et leur dissimulation rend l’analyse
encore plus ardue.
TDL-4 est un malware ayant utilisé un rootkit. Ce rootkit s’installait sur le MBR (Master
Boot Record) du disque dur.
Le MBR est le secteur de boot d’un disque dur, il permet au système d’exploitation de
démarrer. Le fait de se trouver sur cette section de disque rend la détection par l’antivirus
beaucoup plus difficile. Il y aurait en juin 2011 plus de 4 millions de machines infectées par
ce rootkit.
5. Technique de détection des malwares :
La détection de malware se fait généralement en utilisant des signatures ou des profils
comportementaux. La signature d’un malware est un ensemble de propriétés communes aux
fichiers des échantillons du malware. Dans le cas des applications Android, ces fichiers sont
les apks. Le profil comportemental d’un malware est un ensemble de propriétés communes à
l’exécution des échantillons du malware. Ces signatures et profils sont construits à partir des
informations obtenues en analysant, statiquement ou dynamiquement, les échantillons de
malware. La tendance actuelle consiste à utiliser des méthodes d’apprentissage afin de
classifier et détecter des malwares [13].
Analyser une application a pour but d’extraire des informations liées à l’application telles
que son comportement, les ressources qu’elle utilise et les évènements attendus pour exécuter
une partie de son code.
5.1. Analyse dynamique :
L’analyse dynamique consiste à exécuter et à monitorer (surveiller) les actions exécutées
par une application. Au contraire de l'analyse statique et de l'étude du code-source de
l'application, l'analyse dynamique consiste à étudier le comportement de l'application : appel
de fonctions, chaines stockées en mémoire, trafic généré, etc. On utilise l'analyse dynamique
pour l'étude de malwares (dans ce cas-là, le recours à un environnement sécurisé de type
sandbox19 permet de contrôler les actions réalisées), et quand il n'est pas possible d'accéder
au code-source de l'application (légalité du reverse engineering) [05].
Chapitre I Etat de l'art
23
5.1.1. Outils d’analyse dynamique :
Il y a un certain nombre d’outils permettant de réaliser une analyse dynamique (monitoring
des actions réalisées) d’une application Android. On utilise ceux-ci pour en général tester des
applications malveillantes dans un environnement protégé.
Droidbox [20]: Outil de type Sandbox pour les applications Android. Permet l’analyse
dynamique (monitoring d’API, détection des fuites de données, analyse préliminaire
statique, etc.)
Mobile Sandbox [34]: Sandbox pour applications mobile disponible en ligne.
AndroidAuditTools [24]: Outils pour analyse dynamique d’applications Android.
5.2. Analyse statique :
L’analyse statique consiste à décompiler l’application afin d’en étudier le code. Cette
méthode appelée reverse-engineering, a pour défaut que le temps passé à analyser le code peut
être considéré comme du temps en moins pour tester la sécurité de l’application.
Normalement toutes les vulnérabilités du côté client peuvent être détectées sans avoir à lancer
le code, mais dans la pratique, cela se révèle plus compliqué. L’objectif de l’analyse de code
sera donc plutôt de détecter des problèmes de sécurité plus ou moins évidents et de se faire
une idée sur la sécurité globale de l’application. Pour ce type d’analyse, Il est recommandé
d’utiliser le Framework Androguard qui permet de faciliter le travail d’analyse (permissions,
instructions dangereuses, similarité entre 2 applications, etc.). Il existe aussi ARE [30], une
machine virtuelle contenant une ancienne version d’Androguard [04].
5.2.1. Outils d’analyse statique :
Parmi les outils permettant l’analyse statique d’applications sous Android, nous pouvons
citer :
IDA pro version 6.1 [31]: Désassembleur.
APKInspector [25]: Outil en interface graphique permettant d’analyser une
application Android.
Dex2jar [27]: Outil permettant de convertir une application android au format dex en
fichier de class Java.
Jd-gui [33]: Application graphique permettant de lire les codes-sources des fichiers
.class (java)
Androguard [19] : Androguard est un outil d'analyse statique populaire pour les
applications Android. Il peut démonter et décompiler Dalvik bytecode. Il peut aussi
Chapitre I Etat de l'art
24
calculer une mesure de similarité pour détecter les applications reconditionnés ou
logiciels malveillants connus. Il a également des modules qui peuvent analyser et
récupérer des informations à partir de l’AndroidManifest.xml. Grâce à sa flexibilité, il
est utilisé par certains autres cadres d'analyse qui doivent effectuer une analyse
statique.
Framework d’analyse d’applications Android. Androguard est principalement un outil
écrit en python de jouer avec:
Dex/Odex (Dalvik virtual machine) (.dex) (disassemble, decompilation),
APK (Android application) (.apk),
Android's binary xml (.xml),
Android Resources (.arsc).
Androguard est disponible pour Linux / OSX / Windows (python alimenté).
JAD [32]: Décompilateur Java
Dexdump [26]: Permet de décompiler les fichiers JAVA au format DEX
Smali [36]: Assembleur / Désassembleur pour le format dex utilisé par dalvik.
6. Les travaux existants :
Il existe différents travaux sur l’analyse statique d’application afin de détecter des instances
de malware. Les signatures sont des propriétés liées au malware telles que des chaines de
caractères, des ressources dans l’application, des appels à des fonctions spécifiques, ou
simplement l’empreinte d’un fichier.
6.1. DREBIN :
Sous Android, Arp et al. ont proposé DREBIN [06] pour détecter les échantillons de malware
Android sur les téléphones. Les propriétés prises en compte lors de l’analyse d’une
application sont les permissions demandées, les composants matériels requis, ses composants,
les filtres d’intent pour activer les composants, les appels aux fonctions sensibles, les
permissions utilisées, les appels de fonction suspects et les adresses de serveur présents dans
le code de l’application. Pour classifier les applications, ils utilisent une machine à vecteurs de
support qui est une méthode d’apprentissage supervisée. Un apprentissage supervisé consiste
à calculer à partir d’ensembles distincts un modèle permettant de définir l’appartenance d’un
élément à un de ces ensembles. À partir de deux ensembles distincts d’applications, l’une
contenant des applications malveillantes et l’autre contenant des applications bénignes, ils
calculent ainsi un modèle de détection qui différencie les applications malveillantes des
applications bénignes. Ce modèle est ensuite utilisé sur le téléphone afin de détecter les
https://sites.google.com/site/io/dalvik-vm-internalshttps://play.google.com/
Chapitre I Etat de l'art
25
applications malveillantes. L’évaluation effectuée par les auteurs de DREBIN sur la capacité
de détection montre que leur outil atteint un taux de détection de 93.90% sur un ensemble de
1834 échantillons de malware. Le taux de détection définir pourcentage d’échantillons
détectés sur tout le jeu de données. Le résultat est proche des meilleurs résultats obtenus par
les produits anti-virus qu’ils ont testé sur le même jeu de données. Les meilleurs taux de
détection sont de 96.41% et de 93.71% tandis que le pire est de 3.99%. La détection par
analyse statique montre cependant ses limites lorsque les développeurs de malware utilisent
des techniques d’obfuscation afin de cacher la véritable nature de leurs application ou des
techniques de polymorphisme et de métamorphisme afin de changer l’aspect du code des
différentes instances d’un malware. Les développeurs du malware Obad.a utilisent par
exemple des chaines aléatoires pour les noms de variables, méthode et classes. Ils utilisent
également des fonctions de chiffrement afin de masquer les chaines de caractères utilisées
dans le malware et ces fonctions changent d’un échantillon à l’autre.
6.2. Kirin : L’approche basique utilisée par les applications malveillantes sous Android est de demander
toutes les permissions qui leur sont nécessaires pour effectuer leur tâche malveillante. Par
exemple, les applications espionnes dont le but est de tracer l’utilisateur du téléphone
demande l’accès aux données de géolocalisation et l’accès à internet.
Afin de bloquer ce type d’attaque, Enck et al. proposent un système nommé Kirin dans [17].
Le but de Kirin est de vérifier qu’une application n’a pas un ensemble de permissions jugé
dangereux. Par exemple, l’accès aux données de géolocalisation et à internet permet de faire
fuir les déplacements de l’utilisateur de téléphone. Ainsi, Kirin vérifie à l’installation les
permissions demandées par une application. Si elle contient un ensemble dangereux,
l’installation est bloquée. Il appartient à l’utilisateur ou à l’administrateur de l’appareil de
définir les ensembles de permission dangereux.
6.3. Woodpecker: Les permissions filtrent l’accès aux ressources sensibles sous Android. Une application
sans la permission READ_SMS ne peut par exemple lire la base de données des SMS. Dans
[07], Grace et al. Ont analysé les applications livrées avec téléphones Android et montré que
certaines exposaient sans aucune restriction les ressources sensibles. Les auteurs ont identifié
deux méthodes.
La première méthode, qu’ils disent explicite, consiste à exposer les méthodes pour accéder
aux ressources sensibles via des interfaces publiques dont l’accès est plus laxiste que celui de
la méthode protégée. Ils considèrent comment interface les composants exposés publiquement
Chapitre I Etat de l'art
26
à d’autres applications. La deuxième méthode, cette fois-ci implicite, consiste à partager le
même identifiant d’utilisateur entre deux applications. Cela est possible en associant la même
valeur à l’attribut sharedUserId dans le fichier AndroidManifest.xml des deux applications.
Les deux applications tournant avec le même identifiant utilisateur, elles se retrouvent ainsi à
l’exécution avec l’union des permissions que les deux applications possèdent.
Grace et al. ont ainsi développé Woodpecker un outil pour analyser les applications et trouver
d’éventuelles expositions de ressources sensibles. Woodpecker définit les points d’entrée de
l’application à partir de son fichier Android Manifest.xml, construit son graphe de flux de
contrôle (Control Flow Graph en anglais) et à partir du CFG calcule tous les chemins
d’exécution possibles. L’outil considère qu’une ressource sensible est exposée explicitement
si un chemin d’exécution partant d’une interface non protégée contient un appel à une
fonction sensible et qu’aucun contrôle n’est fait avant l’appel. Pour le deuxième cas, une
alerte est levée si une application indique partager son identifiant utilisateur et s’il existe un
appel à une fonction sensible dans le code de l’application telle que la partie contenant cette
fonction puisse être atteinte.
Chapitre I Etat de l'art
27
Conclusion :
Nous avons présenté dans ce chapitre le système Android et introduit la base de
connaissance nécessaire pour comprendre notre approche. Nous avons présenté dans Premier
section le système Android : le noyau, l’espace utilisateur en insistant sur les applications et la
manière dont ils coopèrent. Dans la section qui suit, Nous avons présenté les différents
mécanismes de sécurité protégeant ce systè