Malwares ciblant les systèmes iOS
Introduction
iOS est le système d’exploitation fonctionnant sur le matériel Apple, hors Mac. C’est le système d’exploitation des iPhone, iPad, iPod, des Apple TV, ainsi que des Apple Watch. Il est au cœur de l’écosystème d’Apple. Les Mac (ordinateurs fixes et portables) fonctionnent, eux, avec une variante : macOS. Dans ce chapitre, nous parlerons uniquement du système iOS. En 2022, Apple représente 28 % des téléphones présents dans le monde, principalement dans les pays riches. Étant donné qu’il s’agit d’un système d’exploitation propriétaire et vu la sécurité mise en place par Apple sur ces terminaux, très peu de malwares les ciblent. Cependant, la menace n’est pas nulle et les dernières années ont montré de plus en plus d’attaques ciblées sur ce type d’appareil, malgré le coût pour l’attaquant de cibler cette plateforme.
Ce chapitre présentera brièvement le système d’exploitation iOS ainsi que le format des applications. Nous verrons à quoi sert un jailbreak, en quoi il peut être utile pour un analyste, et au contraire le risque qu’il peut représenter pour un terminal utilisé tous les jours. Nous étudierons les principaux vecteurs d’infection ainsi que la manière de configurer un laboratoire d’analyse. Pour finir, nous verrons comment réaliser une analyse statique d’un malware iOS ainsi qu’une analyse dynamique.
Système d’exploitation iOS
Historique
La première version d’iOS a été présentée en 2007 par Apple. À l’époque, ce système d’exploitation s’appelait iPhone OS et fonctionnait sur la première génération d’iPhone. Depuis cette date, plus ou moins tous les ans, une nouvelle version majeure de cet OS est disponible sur les produits Apple compatibles. À l’écriture de ce livre, nous sommes à iOS 15.7.
Tout comme pour Android, ce système d’exploitation permet de gérer le matériel du terminal (l’écran, le clavier, les capteurs tels que l’accéléromètre, le GPS, le capteur d’empreinte digitale…), la connexion (Wi-Fi, Bluetooth, téléphonie…), la caméra 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 d’exploitation. Ces applications peuvent être développées avec le langage Objective-C ou Swift.
Architecture
iOS est un système propriétaire. Nous n’avons pas accès à son code source et nous n’avons pas accès au compte root afin d’étudier son fonctionnement. C’est une des raisons pour lesquelles le jailbreak est né. Il consiste à utiliser des vulnérabilités afin de pouvoir devenir root sur nos terminaux. L’architecture de fonctionnement d’iOS a pu être documentée grâce à ces jailbreaks. Nous verrons en détail ce sujet à la section Jailbreak. Les commandes Unix exécutées dans ce chapitre sont réalisées...
Vecteurs d’infection
Accès physique au terminal
L’un des vecteurs d’infection les plus répandus est l’accès physique au terminal. L’attaquant a besoin du code PIN afin de déployer une application. Il peut le faire via iTunes ou via Cydia Impactor, comme nous le verrons dans la section Création d’un laboratoire d’analyse.
Liens vers un fichier .ipa
Un lien vers l’application peut être envoyé à la cible via un e-mail ou via une messagerie instantanée. L’attaquant va alors essayer de manipuler la cible pour lui faire installer l’application. Par exemple, il se fera passer pour une femme durant plusieurs jours et demandera à la cible d’installer une application afin de faire des visioconférences avec elle. Sur iOS, une installation manuelle d’une application comprend beaucoup d’actions de la part de l’utilisateur.
Stores alternatifs
Tout comme pour Android, il existe des stores alternatifs pour les applications iOS. En particulier avec la communauté créée autour des tweaks, qui modifie des applications réelles afin d’ajouter des fonctionnalités. Il y a par exemple le site Tweakbox : www.tweakboxapp.com. Sur ce type de site, les applications sont moins contrôlées que sur le store d’Apple. Pour pouvoir installer les applications de ce type de site, l’utilisateur doit installer un profil où il fait confiance au certificat de Tweakbox. Une fois le certificat ajouté au keystore (archive stockant un ensemble de certificats et de clés cryptographiques), les applications peuvent être installées.
MDM malveillant
Une des techniques identifiées en 2018 est l’utilisation d’un MDM malveillant. Un MDM est un outil utilisé par les sociétés pour gérer...
Création d’un laboratoire d’analyse
Analyse réseau
Les mêmes techniques que celles décrites pour Android au chapitre Malwares ciblant les systèmes Android peuvent être utilisées afin de surveiller le flux réseau entre le terminal iOS et Internet. Pour l’utilisation de Burp, la configuration est un peu différente de celle mise en œuvre sous Android. Pour la configuration du proxy sous iOS, allez dans le menu Préférence, choisissez Wi-Fi, puis cliquez sur l’icône I entourée d’un cercle bleu (l’icône du Wi-Fi) :
Le menu Proxy apparaît alors. Configurez-le en Manuel et saisissez l’adresse IP du proxy ainsi que le port. L’ajout du certificat afin d’intercepter le flux HTTPS se fait de la même manière que sous Android : connectez-vous à http://burp, cliquez sur CA Certificate et validez les différentes fenêtres d’avertissement du terminal.
Jailbreak d’un terminal et déploiement d’une application
La question qui se pose souvent lors de la création d’un laboratoire d’analyse pour les malwares iOS est : est-il nécessaire de jailbreaker le terminal d’analyse ? La réponse est non, ce n’est pas obligatoire, mais cela simplifie la vie de l’analyste. En effet, la plupart des outils d’analyse ne nécessitent pas de terminal jailbreaké, mais ils sont alors limités en termes de fonctionnalités. C’est pourquoi nous recommandons de jailbreaker un ancien terminal afin de pouvoir travailler dessus.
Nous allons jailbreaker un terminal avec Electra, l’outil présenté précédemment qui supporte iOS 11.0 à 11.4.1. La première étape est de télécharger le fichier .ipa sur le site...
Analyse statique d’une application
Introduction
L’outil d’analyse libre Ghidra que nous avons utilisé lors des analyses sous Windows supporte parfaitement le format Mach-O ainsi que l’architecture ARM. Dans les exemples de cette section, l’architecture sera ARM. Nous ne détaillerons pas cette architecture dans ce livre. En cas d’analyse iOS (ou Android), il est parfois nécessaire d’apprendre une nouvelle architecture, ses instructions, la manière dont les arguments sont passés aux fonctions, etc. L’architecture ARM est documentée. Si ce domaine vous intéresse, nous vous recommandons la lecture de cette documentation : https://developer.arm.com/documentation/100076/0200/preface
Afin de faciliter la lecture et d’éviter de devoir apprendre une nouvelle architecture, nous n’allons utiliser que le pseudo-code de Ghidra.
Analyse avec Ghidra
Reprenons l’exemple précédent du faux WhatsApp. Nous avons l’application ainsi qu’une librairie dynamique. Cette librairie est injectée dans le binaire de WhatsApp afin de modifier son comportement. Ouvrez ce binaire dans Ghidra. La fenêtre suivante apparaît :
Le fichier boptionspro.dylib contient plusieurs binaires de plusieurs architectures. Ghidra supporte ce type de fichier. Cliquez sur Batch et choisissez le répertoire de l’application :
Le binaire contient une version 32 bits et une version 64 bits. Une fois le choix validé, vous voyez les deux architectures dans Ghidra :
Double cliquez sur ARM-32 si vous souhaitez travailler sur la version 32 bits du binaire.
Les applications iOS sont développées en Objective-C ou Swift. Ces deux langages sont orientés objet, ce qui rend l’analyse du flux d’exécution du binaire compliquée. En effet, les méthodes sont exécutées...
Analyse dynamique
Utilisation de Frida
Dans le chapitre Malwares ciblant les systèmes Android, nous avons vu comment utiliser Frida. Cet outil supporte également iOS. Il est donc possible d’instrumenter l’exécution d’une application iOS. Sur un terminal jailbreaké, l’installation se fait par Cydia. Allez dans le menu Manage, choisissez Sources, puis Edit et cliquez sur Add pour ajouter l’URL du répertoire de Frida : https://build.frida.re. Frida apparaît alors dans Cydia. Cliquez dessus pour l’installer.
Pour avoir un aperçu d’utilisation de Frida sous iOS, prenons l’exemple suivant d’une fausse application Safari :
ID -[websf_webldlnk](ID param_1,SEL param_2)
{
undefined4 uVar1;
ID IVar2;
undefined4 local_14;
SEL local_10;
ID local_c;
local_10 = param_2;
local_c = param_1;
_objc_msgSend(param_1,"webencpass:",
&cf_cqtT3V19LfSsOX/
rsjgEfMg-duQRrs+HKrSWRiaWKqTLv1vx8dvVhTA1/0h5ErGkT);
local_14 = _objc_retainAutoreleasedReturnValue();
uVar1 = _objc_retain(local_14);
_objc_storeStrong(&local_14,0);
IVar2 = _objc_autoreleaseReturnValue$shim(uVar1);
return IVar2;
}
Cette méthode déchiffre la chaîne avec la méthode webencpass. Si nous regardons cette méthode, nous pouvons avoir la clé de chiffrement ainsi que l’algorithme (AES) :
ID -[websf_webencpass:](ID param_1,SEL param_2,ID param_3)
{
undefined4 uVar1;
ID IVar2;
undefined4 local_1c;
undefined4...
Technique utilisée par les malwares sous iOS
Injection de librairies
L’une des techniques les plus fréquemment employées sur iOS consiste à utiliser une application légitime et à y charger une librairie malveillante. Cette technique est appliquée légitimement par la communauté des créateurs de tweaks. Il s’agit des développeurs qui ajoutent des fonctionnalités aux applications existantes. Par exemple, le support de plusieurs comptes dans l’application WhatsApp.
Pour mettre en œuvre cette technique, le développeur a besoin de l’application originale (déchiffrée si celle-ci est chiffrée) et du script iOS Dylib Patching disponible sur GitHub : https://github.com/depoon/iOSDylibInjectionDemo. La première étape consiste à créer une librairie dynamique dans XCode, le compilateur d’Apple. Voici un exemple de librairie qui va modifier les données de géolocalisation de l’utilisateur et placer le terminal au centre de la centrale nucléaire de Tchernobyl :
LocationSwizzler.swift
import Foundation
import CoreLocation
public class LocationSwizzler: NSObject {
static var currentLocation = CLLocationCoordinate2DMake(51.3861,
30.0993) //Géolocalisation de Chernobyl
static var originalMethod: Method?
static var swizzleMethod: Method?
static var ...
Résumé
Ce chapitre explique comment fonctionne le système d’exploitation iOS et comment les développeurs de malwares travaillent sur cette plateforme. Il existe deux grandes familles de menaces : les applications standards malveillantes et les malwares fonctionnant sur les terminaux jailbreakés. Le jailbreak peut être l’œuvre du propriétaire du terminal ou de l’attaquant si celui-ci dispose de 0-day ou si le terminal n’est pas à jour.
Les malwares sur iOS sont rares, mais ils existent. Il est important d’être prêt et d’avoir les outils nécessaires ainsi qu’un laboratoire d’analyse fonctionnel le jour où une investigation de ce type est demandée. Et le nombre de cas est en constante évolution, année après année.