« Agent Smith » : une nouvelle espèce de logiciel malveillant

1
158

Des chercheurs de Check Point ont récemment découvert une nouvelle variante de logiciel malveillant pour mobile qui a discrètement infecté environ 25 millions d’appareils à l’insu total des utilisateurs. Déguisée en application associée à Google, la partie centrale du logiciel malveillant exploite différentes vulnérabilités Android connues, et remplace automatiquement les applications installées sur l’appareil par des versions malveillantes sans nécessiter d’intervention de la part des utilisateurs. Cette approche unique, juste-à-temps et embarquée sur l’appareil a incité les chercheurs à nommer le logiciel malveillant « Agent Smith ».

Une étude menée par : Aviran Hazum, Feixiang He, Inbal Marom, Bogdan Melnykov, Andrey Polkovnichenko – Ce logiciel malveillant accède actuellement aux ressources des appareils pour afficher des publicités frauduleuses et engranger des gains financiers. Cette activité ressemble aux campagnes précédentes telles que Gooligan, HummingBad et CopyCat. Jusqu’à présent, les principales victimes sont situées en Inde, bien que d’autres pays asiatiques tels que le Pakistan et le Bangladesh ont également été touchés.

Dans un environnement Android nettement plus sécurisé, les auteurs de « Agent Smith » semblent être passés au monde plus complexe de la recherche constante de nouvelles vulnérabilités, telles que Janus, Bundle et Man-in-the-Disk, pour créer un processus d’infection en trois étapes et constituer un botnet générant des profits. « Agent Smith » est probablement la première campagne à avoir intégré toutes ces vulnérabilités pour les utiliser ensemble. Son processus est décrit en détail ci-dessous.

Dans ce cas, « Agent Smith » est utilisé à des fins de gain financier via des publicités malveillantes. Il pourrait toutefois facilement être utilisé à des fins beaucoup plus intrusives et nuisibles, telles que le vol d’identifiants bancaires. En effet, sa capacité à ne pas faire apparaître son icône dans le lanceur et imiter les applications populaires existantes sur un appareil, lui apporte d’innombrables possibilités de nuire à l’appareil de l’utilisateur.

Check Point Research a communiqué des données à Google et aux forces de l’ordre afin de faciliter les investigations. En conséquence, les informations relatives au pirate sont provisoirement masquées dans cette publication.

Rencontre

Début 2019, l’équipe de recherche de Check Point a constaté une recrudescence des tentatives d’attaque de logiciels malveillants sur des utilisateurs d’Android en Inde, qui présentaient de fortes caractéristiques d’exploitation de vulnérabilité Janus. Tous les échantillons recueillis par notre équipe au cours de l’enquête préliminaire étaient en mesure de masquer les icônes de leurs applications, et affirmaient être des modules de mise à jour ou de vente associés à Google (un composant clé du framework Google Play).   

Au bout d’une analyse plus poussée, il est apparu clairement que l’application était malveillante, et qu’elle ressemblait initialement au logiciel malveillant CopyCat découvert par Check Point Research en avril 2016. Au fur et à mesure de l’avancement des recherches, des caractéristiques uniques ont été découvertes, ce qui nous a amené à penser qu’il s’agissait d’une toute nouvelle campagne de logiciel malveillant.

Après une série d’analyses techniques (détaillées ci-dessous) et d’une recherche de menaces heuristique, nous avons découvert qu’une infection « Agent Smith » complète comporte trois phases principales :

  1. Une application d’injection incite une victime à l’installer de son plein gré. Elle contient le Bundle Feng Shui sous forme de fichiers chiffrés. Les variantes de cette application d’injection sont généralement des utilitaires photo, des jeux ou des applications pour adultes.
  2. L’application d’injection déchiffre et installe automatiquement l’APK de son code malveillant principal, qui ajoute ensuite des correctifs malveillants à des applications. Le logiciel malveillant principal est généralement déguisé en programme de mise à jour Google, Google Update pour U ou « com.google.vending ». L’icône du programme malveillant principal n’apparaît pas dans le lanceur.
  3. Le logiciel malveillant principal extrait la liste des applications installées sur l’appareil. S’il trouve des applications faisant partie de sa liste de proies (codée en dur ou envoyée par le serveur de commande et de contrôle), il extrait l’APK de base de l’application cible innocente sur l’appareil, ajoute des modules publicitaires malveillants à l’APK, réinstalle l’APK et remplace l’original, comme s’il s’agissait d’une mise à jour.

« Agent Smith » repackage les applications ciblées au niveau smali/baksmali. Au cours du processus d’installation de la mise à jour finale, il s’appuie sur la vulnérabilité Janus pour contourner les mécanismes d’Android de vérification de l’intégrité d’une APK. À la fin de la chaîne d’infection, « Agent Smith » détourne les applications utilisateur compromises pour afficher des publicités. Dans certains cas, les variantes interceptent les événements d’affichage des publicités légitimes des applications compromises et s’identifient sur leur réseau publicitaire avec les identifiants de publicité du pirate de la campagne « Agent Smith ».

Selon nos informations, les applications d’injection de « Agent Smith » prolifèrent via « 9Apps », une app store tierce qui cible principalement les utilisateurs indiens (hindi), arabes et indonésiens. « Agent Smith » lui-même semble toutefois cibler principalement les utilisateurs indiens.

Contrairement aux campagnes précédentes non associées à Google Play, dont les victimes sont presque exclusivement situées dans des régions et des pays moins développés, « Agent Smith » s’est immiscé avec succès dans un nombre considérable d’appareils dans des pays développés tels que l’Arabie saoudite, le Royaume-Uni et les États-Unis.

Diagramme : Déroulement de l’attaque de « Agent Smith »

Analyse technique

« Agent Smith » possède une structure modulaire comprenant les modules suivants :

  • Chargement (loader)
  • Noyau (core)
  • Lancement (boot)
  • Correction (patch)
  • AdSDK
  • Mise à jour (updater)

Comme indiqué ci-dessus, la première étape de cette chaîne d’infection est confiée à l’injecteur. L’injecteur est une application légitime repackagée contenant du code supplémentaire : le module de chargement.

Le module de chargement a un objectif très simple : extraire et exécuter le module central (noyau) de « Agent Smith ». Le module central communique avec le serveur de commande et de contrôle, et reçoit la liste prédéfinie d’applications populaires à rechercher. Lorsqu’une application faisant partie de cette liste est présente sur l’appareil, la vulnérabilité Janus est utilisée pour injecter le module de lancement dans l’application puis la repackager. Lors de la prochaine exécution de l’application infectée, le module de lancement exécute le module de correction qui redirige les méthodes des SDK publicitaires connus vers sa propre implémentation.

Figure 1 : Structure modulaire de « Agent Smith »

Analyse technique – Module de chargement

Comme indiqué ci-dessus, le module de chargement extrait et exécute le module central. Bien que le module central réside dans le fichier APK, il est chiffré et déguisé en fichier JPG. Les deux premiers octets sont en fait l’en-tête magique des fichiers JPG, tandis que le reste des données est chiffré à l’aide d’une clé XOR.

Figure 2 : Structure du fichier JPG de « Agent Smith »

Après l’extraction, le module de chargement ajoute le code à l’application tout en utilisant le mécanisme légitime d’Android pour traiter des fichiers DEX volumineux.

Figure 3 : Chargement du code malveillant principal dans l’application légitime

Une fois le module central extrait et chargé, le module de chargement utilise la technique de réflexion pour initialiser et lancer le module central

Figure 4 : Méthode d’initialisation des appels du module de chargement

Analyse technique – Module central

« Agent Smith » implémente le module central avec pour objectif de propager l’infection :

  1. Une série de vulnérabilités « Bundle » est utilisée pour installer des applications sans que la victime ne s’en aperçoive.
  2. La vulnérabilité Janus, qui permet au pirate de remplacer toute application par une version infectée.

Le module central contacte le serveur de commande et de contrôle pour tenter d’obtenir une nouvelle liste d’applications à rechercher ou, en cas d’échec, utilise une liste d’applications par défaut :

  • com.whatsapp
  • com.lenovo.anyshare.gps
  • com.mxtech.videoplayer.ad
  • com.jio.jioplay.tv
  • com.jio.media.jiobeats
  • com.jiochat.jiochatapp
  • com.jio.join
  • com.good.gamecollection
  • com.opera.mini.native
  • in.startv.hotstar
  • com.meitu.beautyplusme
  • com.domobile.applock
  • com.touchtype.swiftkey
  • com.flipkart.android
  • cn.xender
  • com.eterno
  • com.truecaller

Le module central recherche une version de chaque application figurant dans la liste et son hachage MD5 correspondant parmi les applications installées et celles en cours d’exécution dans l’espace utilisateur. Lorsque toutes les conditions sont remplies, « Agent Smith » tente d’infecter une application trouvée.

Le module central utilise l’une des deux méthodes suivantes pour infecter l’application : décompilation ou binaire.

La méthode de décompilation repose sur le fait que les applications Android sont rédigées en Java, ce qui signifie qu’il est possible de les recompiler. Par conséquent, « Agent Smith » décompile à la fois l’application d’origine et le code malveillant, et les fusionne.

Figure 5 : Le module central combine le code malveillant avec l’application d’origine

Lors de la décompilation de l’application d’origine, « Agent Smith » a la possibilité d’en modifier les méthodes, remplaçant certaines méthodes de l’application d’origine qui gèrent la publicité par son propre code. Il s’intéresse particulièrement aux méthodes de communication avec « AdMob », « Facebook », « MoPub » et « Unity Ads ».

Figure 6 : Réseau publicitaire ciblé

Figure 7 : Exemple d’injection

Une fois toutes les modifications effectuées, « Agent Smith » compile l’application et crée un fichier DEX contenant à la fois le code d’origine de l’application d’origine et le contenu malveillant.

Lorsque le processus de décompilation échoue, « Agent Smith » tente une autre méthode pour infecter l’application d’origine : un correctif binaire qui est simplement un fichier binaire du module de lancement de « Agent Smith »

Une fois le contenu malveillant préparé, « Agent Smith » l’utilise pour créer un autre fichier APK, exploitant la vulnérabilité Janus :

Figure 8 : La nouvelle structure de fichier APK infectée

L’injection seule du code de chargement ne suffit pas. Comme « Agent Smith » utilise une approche modulaire, et comme le chargeur d’origine extrait tous les éléments, l’utilisation de la vulnérabilité Janus ne peut que modifier le code de l’application d’origine et non les ressources. Cela signifie que le remplacement de son fichier DEX est la seule possibilité dans ce cas.

Pour résoudre ce problème, « Agent Smith » a trouvé une autre solution. Comme le chargeur système de fichiers DEX (ART) ignore totalement tout ce qui se trouve après la section de données, le module de correction écrit toutes ses ressources directement à cet emplacement. Cette action modifie la taille d’origine du fichier DEX, qui intègre les ressources malveillantes dans le fichier DEX, une section qui est ignorée par le processus de validation de la signature.

Figure 9 : Le logiciel malveillant ajoute secrètement des ressources malveillantes au fichier DEX

Après modification de l’application d’origine, le gestionnaire de package d’Android pense qu’il s’agit d’une mise à jour de l’application signée par le même certificat, mais en réalité, il exécute le fichier DEX malveillant.

Cela ne suffit cependant toujours pas. « Agent Smith » doit être mis à jour/installé sans le consentement de l’utilisateur. Pour ce faire, « Agent Smith » utilise une série de vulnérabilités zero-day qui permettent à toute application d’effectuer des activités dans une application système, même si ces activités ne sont pas exportées.

L’application malveillante émet une demande pour choisir un compte réseau, un compte spécifique qui ne peut être traité que par des services d’authentification exportés par l’application malveillante. Le service système « AccountManagerService » recherche l’application pouvant traiter cette demande. Ce faisant, il contacte un service exporté par « Agent Smith » et envoie une demande d’authentification qui conduit à un appel à la méthode « addAccount ». Une demande est ensuite formée de manière à ce qu’une activité qui installe l’application soit appelée, contournant ainsi tous les contrôles de sécurité.

 Figure 10 : L’algorithme de la mise à jour malveillante, tandis que « Agent Smith » met à jour l’application

Si tout cela échoue, « Agent Smith » se tourne vers une vulnérabilité Man-in-the-Disk pour les applications « SHAREit » ou « Xender ». Ceci est un processus très simple, qui remplace leur fichier de mise à jour sur la carte SD avec son propre code malveillant.

Figure 11 : « Agent Smith » utilise une vulnérabilité Man-in-the-Disk pour installer la mise à jour malveillante

Analyse technique – Module de lancement

Le module de lancement est fondamentalement un autre module de chargement, qui est cette fois exécuté dans l’application infectée. Le but de ce module est d’extraire et d’exécuter du code malveillant : le module de correction. L’application infectée contient son code malveillant dans le fichier DEX. Il suffit d’obtenir la taille d’origine du fichier DEX et de lire tout ce qui vient après.

 Figure 12 : Module de lancement

Une fois le module de correction extrait, le module de lancement l’exécute en utilisant la même méthode que celle décrite dans le module de chargement. Le module de lancement contient des classes de réservation d’espace pour les points d’entrée des applications infectées. Cela permet au module de lancement d’exécuter le code malveillant au démarrage de l’application infectée.

Figure 13 : Classes de réservation d’espace dans le module de lancement

Analyse technique – Module de correction

Lorsque « Agent Smith » a atteint son objectif, qui est l’exécution du code malveillant dans l’application d’origine, avec des appels à différentes méthodes, l’éventualité d’une mise à jour future de l’application d’origine doit être prise en charge.

L’auteur de « Agent Smith », ayant investi beaucoup de ressources dans le développement de ce logiciel malveillant, ne souhaite pas qu’une mise à jour légitime supprime toutes les modifications apportées. C’est ici que le module de correction entre en jeu.

Dans le seul but de désactiver les mises à jour automatiques d’une application infectée, ce module surveille le répertoire de mise à jour de l’application d’origine et supprime toute mise à jour dès qu’elle apparaît.

Une autre astuce de l’arsenal de « Agent Smith » consiste à modifier les paramètres de temporisation des mises à jour, en faisant en sorte que l’application d’origine attende indéfiniment la mise à jour.

Figure 14 : Désactivation de la mise à jour automatique des applications infectées

 Figure 15 : Modification des paramètres de temporisation des mises à jour

Le code malveillant d’affichage de publicités

Une fois tout ce qui précède effectué, le moment est venu d’examiner de près le code malveillant chargé d’afficher des publicités.

Dans le code injecté, le module implémente la méthode « callActivityOnCreate ». À tout moment, lorsqu’une application infectée crée une activité, cette méthode est appelée et appelle à son tour « requestAd » à partir du code de « Agent Smith ». « Agent Smith » remplace les activités de l’application d’origine par une activité du SDK interne, qui affiche une publicité reçue à partir du serveur.

Dans le cas d’une application infectée non spécifiée dans le code, « Agent Smith » diffuse simplement des publicités sur l’activité en cours de chargement.

Figure 16 : Intégration d’un SDK publicitaire interne

Figure 17 : Remplacement des activités d’origine de l’application par l’activité du SDK publicitaire malveillant

 Figure 18 : Le logiciel malveillant montrant des publicités sur toute activité
en cours de chargement

Vue d’ensemble

Notre analyse des échantillons du logiciel malveillant a permis à l’équipe d’appréhender la campagne « Agent Smith » dans son intégralité. C’est ici que l’enquête sur le serveur de commande et de contrôle entre en scène.

Nous avons commencé par les domaines de commande et de contrôle les plus fréquemment utilisés : « a***d.com », « a***d.net » et « a***d.org ». Parmi plusieurs sous-domaines, « ad.a***d.org » et « gd.a***d.org » ont tous deux été associés de par le passé à la même adresse IP suspecte.

L’historique de DNS inversé pour cette adresse IP a attiré notre attention sur « ads.i***e.com ».

Un processus étendu de recherche de logiciels malveillants nous a permis de découvrir un grand nombre de variantes de l’injecteur « Agent Smith », ce qui nous a permis de déduire davantage de relations entre plusieurs infrastructures de serveurs de commande et de contrôle. À une période différente de la chronologie de la campagne « Agent Smith », les injecteurs et les modules centraux ont utilisé différentes combinaisons des domaines « a***d » et « i***e » pour des activités malveillantes telles que l’interrogation de la liste des applications ciblées, les demandes de correctifs et les demandes de publicités.

Avec un peu de chance, nous avons réussi à trouver des journaux indiquant que le serveur de commande et de contrôle de « Agent Smith » répartissait régulièrement les charges entre « wh***g.com » et « tt.a***d.net ».

Une compréhension approfondie de l’infrastructure de commande et de contrôle de la campagne de « Agent Smith » nous a permis de conclure que le propriétaire de « i***e.com », « h***g.com » est le groupe de pirates auteur de « Agent Smith ».

Figure 20 : Diagramme de l’infrastructure de commande et de contrôle

Le paysage de l’infection

Les injecteurs de « Agent Smith » ont adopté une tactique d’infection agressive. La simple permutation d’une application innocente contre un double infecté ne suffit pas à cette famille de logiciels malveillants. Elle le fait pour chaque application sur l’appareil tant que les noms des packages figurent sur sa liste de proies.

Cette campagne infecte également le même appareil à plusieurs reprises, dès qu’il existe de nouveaux correctifs malveillants. Cela nous a conduit à estimer qu’il pourrait y avoir plus de 2,8 milliards d’infections au total, soit environ 25 millions d’appareils uniques, ce qui signifie qu’en moyenne, chaque victime aurait subi environ 112 détournements d’applications innocentes.

En tant que vecteur d’attaque initial, « Agent Smith » exploite l’app store 9Apps, avec plus de 360 variantes différentes d’injecteur. Afin de maximiser les profits, des variantes avec SDK « MinSDK » et « OTA » sont utilisées pour infecter davantage les victimes avec d’autres familles de logiciels publicitaires. La majorité des injecteurs sur 9Apps sont des jeux, tandis que les autres appartiennent aux catégories suivantes : divertissement pour adultes, lecteur multimédia, utilitaires photo et utilitaires système.

Figure 21 : Répartition des catégories d’applications des injecteurs

Parmi ce grand nombre de variantes, les 5 principaux injecteurs les plus infectieux ont été téléchargés plus de 7,8 millions de fois :

Figure 22 : Top 5 des injecteurs les plus infectieux

La campagne « Agent Smith » vise principalement les utilisateurs indiens, qui représentent 59 % de la population touchée. Contrairement à d’autres campagnes de logiciels malveillants ne s’appuyant pas sur Google Play, « Agent Smith » a un impact significatif non seulement sur les pays en développement, mais également sur certains pays développés où Google Play est facilement accessible. Par exemple, les États-Unis (avec environ 303 000 infections), l’Arabie saoudite (245 000), l’Australie (141 000) et le Royaume-Uni (137 000).

Figure 23 : Carte mondiale de la répartition des infections

Considérant que l’Inde est de loin le pays le plus infecté par « Agent Smith », la répartition globale des marques d’appareils infectés est fortement influencée par la popularité des marques parmi les utilisateurs indiens d’Android :

Figure 24 : Répartition des marques des appareils infectés

Bien que la plupart des infections se soient produites sur des appareils fonctionnant sous Android 5 et 6, nous constatons également un nombre considérable d’attaques réussies contre les nouvelles versions d’Android.

C’est une observation inquiétante. AOSP a corrigé la vulnérabilité Janus depuis la version 7 en introduisant la fonctionnalité APK Signature Scheme V2. Toutefois, afin de bloquer les vulnérabilités Janus, les développeurs d’applications doivent signer leurs applications avec le nouveau schéma afin que le composant de sécurité de l’infrastructure Android puisse effectuer des contrôles d’intégrité à l’aide des fonctionnalités améliorées.

Figure 25 : Répartition des versions Android infectées

Pour analyser plus en détail le paysage infectieux de « Agent Smith », nous nous sommes intéressés aux 10 pays les plus infectés :

 

Pays

Nombre total d’appareils

Nombre total d’événements d’infection

Nombre moyen de remplacements d’applications par appareil

Nombre moyen d’injecteurs par appareil

Durée moyenne en mois de l’infection d’un appareil

Inde

15 230 123

2 017 873 249

2,6

1,7

2,1

Bangladesh

2 539 913

208 026 886

2,4

1,5

2,2

Pakistan

1 686 216

94 296 907

2,4

1,6

2

Indonésie

572 025

67 685 983

2

1,5

2,2

Népal

469 274

44 961 341

2,4

1,6

2,4

États-Unis

302 852

19 327 093

1,7

1,4

1,8

Nigeria

287 167

21 278 498

2,4

1,3

2,3

Hongrie

282 826

7 856 064

1,7

1,3

1,7

Arabie Saoudite

 

 

Les commentaires sont fermés.