Malwares ciblant les systèmes Android
Introduction
On estime à plus de 7,7 milliards le nombre d’abonnements souscrits à une ligne de téléphone portable dans le monde. Plus de 97 % des Français ont un téléphone portable. C’est donc naturel que ces équipements soient également ciblés par les développeurs de malwares. Le marché est principalement divisé entre deux acteurs : Android, développé par Google, et iOS, développé par Apple. Ce chapitre est dédié au système d’exploitation Android. Android représente en 2017 quasiment 75 % des téléphones présents dans le monde, ce qui en fait une cible de choix.
Ce chapitre présentera rapidement Android ainsi que son système d’applications. Nous verrons les principaux vecteurs d’infection spécifiques aux terminaux mobiles. Tout comme lors des chapitres précédents, nous verrons comment mettre en place un laboratoire d’analyse aussi bien via une machine virtuelle que via un téléphone physique. Pour finir, nous verrons comment analyser une application malveillante, les techniques utilisées par les développeurs de malwares, et les outils permettant de nous aider dans cette tâche.
Système d’exploitation Android
Historique
La première version du système d’exploitation Android date de 2007. Il existe seize versions de ce système d’exploitation et de nombreuses sous-versions. Ce système d’exploitation est basé sur le noyau Linux. La version d’Android peut être identifiée par un numéro de version, mais aussi un nom de code fourni par Google. Voici un récapitulatif des différentes versions d’Android :
Version |
Date de sortie |
Nom de code |
Noyau Linux |
1.0 |
Novembre 2007 |
- |
- |
1.1 |
Octobre 2008 |
Petit Four |
- |
1.5 |
Avril 2009 |
Cupcake |
2.6.27 |
1.6 |
Septembre 2009 |
Donut |
2.6.29 |
2.1.x |
Octobre 2009 |
Eclair |
2.6.29 |
2.2.x |
Mai 2010 |
Froyo |
2.6.32 |
2.3.x |
Décembre 2010 |
Gingerbread |
2.6.35 |
3.x.x |
Février 2011 |
Honeycomb |
2.6.36 |
4.0.x |
Octobre 2011 |
Ice Cream Sandwich |
3.0.1 |
4.1.x / 4.2.x /4.3.x |
Juillet 2012 |
Jelly Bean |
3.0 - 3.1 |
4.4.x |
Octobre 2013 |
KitKat |
3.4 |
5.x.x |
Novembre 2014 |
Lollipop |
3.10 |
6.0 |
Octobre 2015 |
Marshmallow |
3.10 - 3.18 |
7.x |
Août 2016 |
Nougat |
3.18 - 4.4 |
8.x |
Août 2017 |
Oreo |
4.4 - 4.9 |
9.0.x |
Décembre 2018 |
Pie |
4.14 |
10.x |
Septembre 2019 |
Q |
4.9 - 4.19 |
11.x |
Septembre 2020 |
R |
5.11.8 |
12.x |
Octobre 2021 |
Monet |
5.11.8 |
Les principales versions encore en circulation sont Oreo, Pie, Android 10, 11 ainsi que la version la plus récente : Android 12.
Le système d’exploitation permet de gérer le matériel du téléphone tel que l’écran, le clavier (physique ou virtuel), les capteurs (accéléromètre, GPS…), la connexion (Wi-Fi, Bluetooth, téléphonie…), la caméra, le port USB ou encore la carte mémoire. Le système d’exploitation fournit une API aux développeurs d’applications afin qu’une même application puisse fonctionner sur tous les modèles de terminaux tournant sous ce système...
Vecteurs d’infection
Installation via Google Store
Les applications Android sont théoriquement installées via le store de Google. Les attaquants tentent d’utiliser le même procédé. Les utilisateurs font confiance au store et les développeurs de malwares en profitent pour compromettre un maximum d’utilisateurs. Par exemple, le malware BeiTaAd est un adware qui était hébergé et déployé via le store Android. Plus de 230 applications contenant ce malware ont été identifiées en 2019. Ce malware se faisait principalement passer pour des packs de support de langue et des thèmes. Il est difficile de cibler des personnes spécifiques quand on utilise le store de Google pour héberger des applications. Généralement, les malwares utilisant le store ont pour but de compromettre un nombre maximal de cibles.
Dans le cas de BeiTaAd, le malware a été disponible durant plus de sept mois et a compromis des milliers de terminaux à travers le monde.
Installation via des stores alternatifs
Il existe des stores alternatifs à celui proposé par Google. Par exemple, Samsung dispose d’un store depuis des années et Huawei a créé une alternative suite au bannissement de la marque par les USA en 2019. Il existe également des stores maintenus par la communauté, et non pas par des sociétés. Tout comme sur Google Store, les attaquants peuvent utiliser ces stores afin de déployer leurs malwares sur les terminaux des utilisateurs. Ces stores doivent avoir des droits spécifiques afin de pouvoir installer des applications. Le terminal doit pouvoir installer des « sources inconnues ; ce paramètre est configurable dans Paramètres - Sécurité et sources inconnues.
Installation manuelle
Si le terminal...
Création d’un laboratoire d’analyse
Machine virtuelle ou téléphone physique ?
Afin de pouvoir analyser, installer et manipuler une application, nous avons besoin d’un laboratoire d’analyse. Deux solutions s’offrent à nous : la virtualisation ou un terminal physique. Chacune de ces solutions a ses avantages et ses inconvénients.
Android dans une machine virtuelle
Il existe un portage Android pour x86. Celui-ci permet donc d’exécuter Android sur une machine virtuelle tournant sur un ordinateur standard avec VirtualBox (ou n’importe quel outil de virtualisation). Ce portage est disponible ici : https://www.fosshub.com/Android-x86.html. Voici la procédure d’installation sous VirtualBox.
Commencez par créer la machine virtuelle en cliquant sur Machine, puis sur New. Ensuite, configurez le nom de la machine et le type :
Puis ajoutez la RAM. Une valeur de 4 Go est réaliste pour un terminal mobile. Ensuite, VirtualBox vous demande de créer le disque dur. Un minimum de 8 Go est nécessaire pour pouvoir travailler confortablement. Votre machine virtuelle est prête :
Il faut à présent présenter le fichier ISO d’Android-x86 à VirtualBox. Allez dans Settings, puis choisissez Storage et enfin cliquez sur le disque pour ajouter l’ISO :
Le système d’exploitation peut à présent être installé :
La procédure est assez simple : allez dans le menu d’installation et suivez les quelques étapes proposées par l’installateur. Une fois l’installation terminée, la machine virtuelle peut finalement être démarrée.
L’utilisation d’une machine virtuelle est très pratique et ne nécessite aucun équipement particulier. Cependant, elle...
Analyse statique et décompilation d’une application
Pour illustrer cette section, nous allons analyser deux malwares : KevDroid (md5 : 56b1f4800fa0e083caf0526c3de26059) et FakeSpy (md5 : a5cb6cd85b134a7b5d2f871a0b596d3f). Nous analyserons l’un et l’autre en fonction des mécanismes mis en place par les développeurs.
Analyse d’un fichier APK
Pour commencer, nous allons travailler sur le malware KevDroid. La première étape consiste à lister les permissions nécessaires au fichier .apk :
paul@lab:~$ aapt dump permissions KevDroid.apk
package: com.cool.pu
uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED'
uses-permission: name='android.permission.READ_CALL_LOG'
uses-permission: name='android.permission.READ_SMS'
uses-permission: name='android.permission.RECEIVE_SMS'
uses-permission: name='android.permission.RECORD_VIDEO'
uses-permission: name='android.permission.RECORD_AUDIO'
uses-permission: name='android.permission.CAMERA'
uses-permission: name='android.permission.READ_PHONE_STATE'
uses-permission: name='android.permission.PROCESS_OUTGOING_CALLS'
uses-permission: name='android.permission.ACCESS_FINE_LOCATION'
uses-permission: name='android.permission.ACCESS_COARSE_LOCATION'
uses-permission: name='android.permission.GET_ACCOUNTS'
uses-permission: name='android.permission.READ_CONTACTS'
uses-permission: name='android.permission.READ_EXTERNAL_STORAGE'
uses-permission: name='android.permission.WRITE_EXTERNAL_STORAGE'
uses-permission: name='android.permission.ACCESS_NETWORK_STATE'
uses-permission: name='android.permission.INTERNET'
uses-permission:...
Analyse dynamique
Utilisation de Frida
Tout comme sous Windows, il est possible d’analyser dynamiquement le code en cours d’exécution. L’un des outils les plus populaires est Frida, disponible ici : https://www.frida.re/
Frida permet de tracer l’exécution d’une application Android. Il permet par exemple de lire les valeurs passées aux différentes fonctions, de lire les valeurs en sortie ou encore de les modifier afin de changer le cours d’exécution de l’application.
Pour utiliser Frida sous Android, il faut tout d’abord installer Frida-server sur le terminal. Il est disponible ici : https://github.com/frida/frida/releases (attention, utilisez la bonne architecture CPU correspondant au terminal) :
C:\Users\paul> adb.exe root
C:\Users\paul> adb.exe push frida-server-12.6.10-android-arm /data/
local/tmp/
C:\Users\paul> adb.exe shell "chmod 755 /data/local/tmp/frida-server"
C:\Users\paul> adb.exe shell "/data/local/tmp/ frida-server-12.6.10-
android-arm &"
Nous pouvons tester l’installation depuis la machine Windows :
C:\Program Files\Python3\Scripts>frida-ps.exe -U
PID Name
----- --------------------------------------------------
14118 -
3605 .dataservices
1965 ATFWD-daemon
5990 adbd
1945 adspd
1943 adsprpcd
13297 android.process.media
1969 audiod
1948 audioserver
1949 cameraserver
1668 capsense_reset
1941 cnd
1962 cnss-daemon ...
Résumé
Dans ce chapitre, nous avons vu comment analyser un terminal et les applications au format APK. Contrairement aux malwares tournant sous Windows, il n’est quasiment jamais nécessaire de déboguer les applications. Les décompilateurs font un travail de bonne qualité en combinant cela avec des scripts pour désobfusquer les chaînes de caractères. Il est possible d’analyser n’importe quel fichier .apk.
Le nombre de terminaux sur Android augmente chaque année, et ceux-ci contiennent un nombre incroyable de données personnelles ou professionnelles. Cela fait donc d’Android une cible de choix pour les développeurs de malwares, aussi bien dans le but de compromettre un maximum de terminaux sans cibler de personne précise que pour des campagnes d’espionnage ciblant des individus spécifiques. C’est pourquoi le nombre de campagnes ciblant les plateformes Android devrait augmenter dans les prochaines années.