Un Trojan SMS déjoue les CAPTCHA

A la fin de l’année dernière, nous avons découvert le malware Trojan-SMS.AndroidOS.Podec, un Trojan-SMS qui utilisait un système de protection légitime puissant contre l’analyse et la détection. Après avoir déjoué ces mesures de protection, nous nous sommes retrouvé face à un petit Trojan-SMS dont la majorité des fonctions se trouvait toujours au stade du développement. Quelque temps plus tard, au début de cette année, nous avons réussi à intercepter une version complète de Trojan-SMS.AndroidOS.Podec.

Cette nouvelle version du Trojan était pour le moins remarquable : elle était dotée d’une fonction d’envoi de messages à des numéros surfacturés à l’aide de mécanismes de contournement du système "Advice of Charge" (notification envoyée à l’utilisateur sur le coût du système et demande de confirmation du paiement) et d’une autre fonction permettant d’inscrire la victime à des services payants, en contournant le système CAPTCHA. C’était la première fois que Kaspersky Lab découvrait ce genre de fonctionnalité dans un Trojan.

Propagation

Le présent article est consacré à Trojan-SMS.AndroidOS.Podec version 1.23 (infos obtenues via l’analyse du code) dont la somme de contrôle est :

72ADCF52448B2F7BC8CADA8AF8657EEB
0D5708158B8782F115670BD51833AC5C

Cette version du Trojan est répandue en Russie et chez ses voisins :

Pays Nombre de tentatives d’infection d’utilisateurs uniques
Russie 3666
Kazakhstan 339
Ukraine 305
Biélorussie 70
Kirghizistan 23

Tendance des infections :

Nombre de tentatives d’infection d’utilisateurs uniques

Sources d’infection

Sur la base des statistiques recueillies à l’aide de Kaspersky Security Network, la version étudiée du malware a été diffusée principalement depuis différents domaines au nom retentissant (Apk-download3.ru, minergamevip.com, etc.), ainsi que via les serveurs du réseau social "Vkontakte" qui stockent le contenu des utilisateurs.

Répartition des sources d’infection des fichiers

Les serveurs du réseau social prédominent, mais malheureusement, le service de stockage des fichiers sur ce réseau est anonyme et il est donc impossible de voir comme les malwares y sont apparus. Une étude plus poussée a toutefois permis de mettre en évidence l’existence dans ce réseau de toute une série de communautés qui propageaient Trojan-SMS.AndroidOS.Podec :

  • http://vk.com/vzlomannye_igry_dlya_android
  • http://vk.com/skachat_minecraft_0_9_0_android
  • http://vk.com/minecraft_pe_0_9
  • http://vk.com/vzlom_igry_android_mody
  • http://vk.com/igry_android_cheats
  • http://vk.com/android_mody_apk
  • http://vk.com/novye_igry_na_android
  • http://vk.com/skachat_hill_climb_racing_bpan
  • http://vk.com/na_android_igry

Tous les groupes de cette liste présentaient un contenu similaire : images, liens et messages.

En règle générale, chaque groupe est consacré à un jeu piraté concret ou à un ensemble de jeux piratés. Les cybercriminels comptent ainsi attirer l’attention des victimes potentielles intéressées par l’utilisation gratuite d’un contenu payant très recherché.

La grande majorité des messages sur le mur du groupe contient des liens vers des sites contenant des prétendus jeux et autres applications pour Android.  Il en allait de même pour la section "Liens". En réalité, l’unique objectif poursuivi par ces sites était la propagation de différentes versions de Trojan-SMS.AndroidOS.Podec.

Acht Huit groupes sur un réseau social à la mise en page similaire

L’organisation et la mise en page de ces groupes (par exemple, l’utilisation de mots clés au lieu de descriptions, avalanche de messages simples et généraux créés par des bots, etc.), ainsi que la publication de liens vers de faux sites qui se ressemblent les uns les autres permettent d’affirmer que la propagation du malware a bénéficié de l’aide de spécialistes du référencement noir. Les astuces citées ci-dessus permettent d’améliorer le classement des ressources (sites et groupes) dans les résultats des recherches et d’augmenter de la sorte la probabilité de recevoir des visites.

Toutes ces communautés sont administrées par un utilisateur de "Vkontakte" qui utilise le pseudonyme "kminetti". La page de son profil contient des publicités pour les communautés citées ci-dessus. Ce compte est actif depuis le 12 octobre 2011. Des messages contenant des liens vers les sites et les communautés qui diffusent des malwares pour périphériques nomades y sont publiés depuis 2012.

Exemple de publications de l’administrateur des communautés malveillantes

Avant cela, le compte était utilisé en tant que bot qui plaçait des liens sur des ressources en ligne dans le but d’augmenter leur popularité de liens.

Exemple de publications de l’administrateur des communautés visant à augmenter la popularité de liens de ressources externes

Sur la base de ce qui précède, nous pouvons affirmer que Trojan-SMS.AndroidOS.Podec se propage principalement via le réseau social "Vkontakte".

Schéma d’infection

L’échantillon du Trojan pour périphériques mobiles sur lequel Kaspersky Lab a pu mettre la main se présentait sous les traits de la célèbre application Minecraft – Pocket Edition. Le fichier ne pèse que 688 Ko, ce qui est un avantage aux yeux des utilisateurs inexpérimentés qui possèdent une connexion Internet lente et/ou chère. Il faut savoir que la taille de l’application officielle est comprise entre 10 et 13 Mo.

Une fois exécutée, l’application sollicite les autorisations d’administrateur du périphérique. Le but de la manœuvre est de se protéger contre la suppression par l’utilisateur ou par les solutions de protection. Si l’utilisateur refuse d’octroyer les autorisations d’administration, le Trojan les demande à nouveau jusqu’à ce qu’il obtienne la réponse souhaitée. Dans ces conditions, l’utilisation normale du périphérique est pratiquement impossible.

Demande d’élévation des privilèges

Quand Trojan-SMS.AndroidOS.Podec a obtenu l’accès privilégié, l’application légitime Minecraft  est téléchargée (depuis un site externe) et installée sur la carte SD du périphérique. Ce comportement est défini dans le fichier de configuration téléchargé en même temps que le Trojan. Ce fichier contient le lien de téléchargement du fichier APK légitime. Il arrive parfois que le fichier de configuration ne contienne pas de liens vers l’application. Dans ce cas, le cheval de Troie arrête tout simplement ses activités visibles pour l’utilisateur une fois qu’il a reçu les autorisations.

Partie du fichier de configuration contenant le lien vers une copie légitime de Minecraft

Par la suite, le Trojan supprime son lien de la liste des applications et le remplace par le lien de l’application authentique. Des traces discrètes du Trojan demeurent quant à elles dans la liste des applications installées et dans la liste des administrateurs du périphérique :

Le bouton de suppression du malware est inactif et les tentatives de retrait des autorisations se soldent sur un comportement tout à fait étrange du périphérique : l’écran se bloque puis s’éteint pendant un certain temps. Quand l’écran se rallume, le périphérique affiche un menu de paramètres et rien n’indique la tentative récente de retrait des autorisations d’administration à l’application.

Protection contre l’analyse

Le recours à diverses techniques de protection du code contre l’analyse confirme le sérieux avec lequel les cybercriminels ont abordé le développement de Trojan-SMS.AndroidOS.Podec. Outre l’ajout de classes parasites et le recours à l’obfuscation, les individus malintentionnés ont utilisé un dispositif de protection légitime cher qui complique fortement l’obtention du code source de l’application Android. Ce dispositif est un outil de contrôle de l’intégrité du code. Il masque les appels de toutes les méthodes ainsi que la manipulation des champs de classe. Il chiffre également toutes les lignes.

Voici un exemple de code protégé.

Le même code, sans la protection :

Administration du Trojan

L’administration du comportement du Trojan-SMS.AndroidOS.Podec s’opère à l’aide de serveurs de commande. Le Trojan contacte le serveur via le protocole HTTP et attend en réponse un SMS contenant les instructions qui vont gérer son comportement. Trojan-SMS.AndroidOS.Podec utilise deux listes de noms de domaines de serveur de commande : une principale et une de réserve. Le choix d’un centre de commande en particulier s’opère selon un algorithme aléatoire. Si le serveur principal n’a pas réagi après trois jours, c’est la liste de noms de réserve qui sera utilisée. On se trouve donc en présence d’un système flexible de communication avec les serveurs de commande qui permet de déjouer le blocage éventuel de certains noms de domaine.

Les noms de domaines des serveurs de commande et tout le trafic (HTTP et SMS) sont chiffrés à l’aide d’un algorithme de chiffrement AES en mode CBC/NoPadding avec une clé de 128 bits. La clé de chiffrement et le vecteur d’initialisation se trouvent à l’origine dans le fichier fXUt474y1mSeuULsg.kEaS (le nom de ce fichier varie en fonction de la modification du malware), situé dans le dossier assets de l’application originale. Le fichier contient principalement du texte parasite. Les informations utiles sont reprises entre des balises, par exemple [a]chaîne[/a].

Les chaînes reprises entre les balises fournissent tous les paramètres requis pour le chiffrement (clé et vecteur) sous forme chiffrée. Elles sont déchiffrées ultérieurement à l’aide de simples substitutions d’une sous-chaîne par une autre.

Les commandes déchiffrées forment un document XML dont les balises définissent une commande en particulier tandis que les paramètres figurent dans le contenu des balises. Sélection des actions que Trojan-SMS.AndroidOS.Podec peut exécuter via les commandes :

  1. collecte d’informations sur le périphérique (opérateur, IMEI, numéro de téléphone, langue de l’interface, pays et ville de résidence, etc.) ;
  2. récupération de la liste des applications installées ;
  3. récupération d’informations sur USSD ;
  4. envoi de SMS ;
  5. définition de filtre pour les messages entrants ;
  6. définition de filtres pour les appels entrants et sortants :
  7. affichage de publicités (notification séparée, ouverture de pages, boîtes de dialogue et autres types d’affichage de contenu publicitaire).
  8. suppression des messages définis ;
  9. suppression des entrées définies sur les appels ;
  10. chargement sur le serveur des individus malintentionnés du code HTML source des pages qu’ils ont désignées ;
  11. exécution d’attaques DDoS, augmentation du compteur de visites de sites ;
  12. abonnement d’utilisateurs à du contenu payant ;
  13. mise à jour automatique ;
  14. réalisation d’appels ;
  15. déchargement des messages entrants selon les conditions définies par le centre de commande ;
  16. suppression de l’application définie par le centre de commande.

Un simple survol du code exécutable du malware met en évidence le nombre élevé de fonctions pour HTML et HTTP. Outre les fonctions standard pour ce genre de Trojan (envoi et interception de SMS, possibilité de réaliser des appels et de manipuler les journaux des SMS et des appels), Trojan-SMS.AndroidOS.Podec contient des fonctions d’accès configurable à des pages Internet et du transfert de leur code au serveur des individus malintentionnés. Ce qui distingue vraiment ce Trojan, c’est la fonction de lecture des images CAPTCHA.

Le schéma global du fonctionnement de Trojan-SMS.AndroidOS.Podec est repris ci-dessous.

La fonction d’interaction avec les ressources Internet est à l’origine de deux types de menaces :

  1. Le Trojan contient des fonctions qui permettent de réaliser une attaque DDoS de type HTTP Flood élémentaire. Les lignes responsables de cette option dans le fichier de configuration ressemblent à ceci :

    Le lien obtenu est chargé, la fonction sleep() avec le paramètre « seconds » est invoquée et le processus se répète le nombre de fois indiqué par le paramètre « limit ».

    Vu que la méthode utilisée par les individus malintentionnés permet de configurer la fréquence et le nombre des requêtes, cette fonction n’est pas réservée uniquement aux attaques DDoS. Elle permet également de gonfler les compteurs de visites et d’obtenir ainsi plus de revenus tirés de la publicité et des partenariats.

  2. Une des possibilités les plus dangereuses de Trojan-SMS.AndroidOS.Podec est le recours à des règles configurables de visites de pages Internet avec possibilité de détection des CAPTCHA. Il est possible ainsi d’abonner l’utilisateur du périphérique à son insu à des services chers. Il s’agit d’une fonction unique du Trojan qui mérite une étude un peu plus poussée.

Abonnements payants

Il existe deux modèles principaux d’abonnement au contenu d’une ressource Internet :

  • Pseudo-abonnement. Dans ce modèle, l’utilisateur doit accéder à la ressource Internet et saisir son numéro de téléphone. Il reçoit ensuite un SMS qui lui propose de payer le service en envoyant un message quelconque par SMS. Une fois que le message a été envoyé, une somme, qui varie en fonction des tarifs pratiqués par l’opérateur de téléphonie mobile, est retirée du compte personnel de l’abonné. Ces messages sont envoyés à intervalles réguliers et l’utilisateur doit décider lui-même à chaque fois de répondre au message. Voilà pourquoi ce modèle est souvent désigné par l’expression pseudo-abonnement.
  • Abonnement mobile Dans ce cas, l’utilisateur saisit son numéro de téléphone sur un site Internet et attend de recevoir un SMS contenant un code de confirmation. Ce code doit ensuite être saisi sur le site de l’opérateur en guise d’acceptation des conditions de l’abonnement. Par la suite, l’opérateur débitera le montant indiqué dans les conditions de l’abonnement du compte personnel de l’abonné selon une fréquence définie. Il existe dans l’Internet russophone plusieurs partenariats qui proposent des services de consolidation pour ce genre de paiement. Autrement dit, lors de la mise en place d’un service offrant une possibilité d’abonnement payant pour le contenu, les individus malintentionnés ne sont pas tenus de contacter les opérateurs de téléphonie mobile vu que ce sont les responsables du partenariat qui se charge de ce travail. Celui qui opte pour cette méthode devra accepter une réduction de ces revenus (de 40 à 50 % en moyenne), mais il renforcera la confidentialité de ses transactions financières.

L’abonnement de l’utilisateur à du contenu payant à l’aide d’un Trojan peut lui occasionner de grandes perte. Dans le cas des pseudo-abonnements, le tarif de chaque SMS de confirmation est compris entre 0,5 e 10 dollars. S’agissant des abonnements mobiles, le coût est défini au cas par cas via le partenariat, directement avec l’opérateur de téléphonie mobile. Les éléments les plus inquiétants sont la fréquence et la discrétion des retraits : si l’utilisateur a été abonné à plusieurs sources de "contenu", il risque de passer du temps à comprendre ce qui se passe avec son compte de téléphonie mobile.

Exemple de fonctionnement du Trojan

Nous avons été en mesure d’intercepter l’interaction entre Trojan-SMS.AndroidOS.Podec et son centre de commande et dans le cadre de cette session, il utilisait le schéma suivant :

  • Le Trojan visitait le site RuMaximum.com qui offre des services de test des utilisateurs. Pour recevoir les résultats du test, l’utilisateur doit s’abonner aux services du site.
  • Le Trojan utilise une requête GET pour imiter les réponses aux questions et à la fin, suit un lien qui ressemble à http://rumaximum.com/result.php?test=0&reply[1]=0&reply[2]=0&reply[3]=0&reply[4]=0&reply[5] =0&reply[6]=0&reply[7]=0&reply[8]=0&reply[9]=0&reply[10]=0. Ce lien mène au document Internet suivant :
  • Une fois que le numéro de téléphone a été saisi, une page de renvoie unique de l’opérateur de téléphonie s’ouvre. Elle invite l’utilisateur a saisir le texte du CAPTCHA et le code de confirmation repris dans le SMS envoyé au numéro de téléphone. Le Trojan remplit les deux champs et confirme ainsi l’abonnement. L’utilisateur est ensuite redirigé via le système de commerce pour plateforme mobile totmoney.ru vers les résultats du test.

Le Trojan réalise toutes ces actions automatiquement sur la base de la configuration envoyée depuis le serveur des cybercriminels. La victime ne voit rien de ces transactions et ne se doute pas qu’une telle activité a eu lieu sur son périphérique.

Fonction d’abonnement payant

La configuration XML envoyée depuis le serveur des individus malintentionnés contient un champ responsable de l’abonnement de l’utilisateur au contenu payant. Ce champ ressemble à ceci :

Analysons ce champ de configuration en détail :

  1. verify – grande ligne avec le séparateur "-S-". Contient les informations indispensables pour obtenir la valeur CAPTCHA.

    -verify[0] – si ce champ n’a pas la valeur "null", la lecture du CAPTCHA est indispensable, dans le cas contraire, le traitement se poursuit. Il peut contenir le fichier de l’image dans un codage base64 (pour le traitement des images statiques et CAPTCHA) ou un identificateur d’image ;
    – verify[1] – clé du service "http://antigate.com", utilisé pour identifier le CAPTCHA indispensable à l’autorisation sur le service ;
    – verify[2] – longueur minimale de l’image, utilisée à des fins de service ;
    – verify[3] – longueur maximale de l’image, utilisée à des fins de service ;
    – verify[4] – appartenance linguistique des symboles illustrés sur l’image.

  2. service – le service sollicité ;
  3. search – grande ligne avec le séparateur "-S-". Intervient dans les recherches de sous-lignes dans le lien visité et permet adopter différentes solutions sur la méthode d’abonnement requise en fonction des résultats de la recherche ;
  4. images – n’est pas utilisé dans cette version ;
  5. actions – grande ligne avec le séparateur "-S-". Contient les liens finaux que le service utilise pour initialiser/terminer le processus d’abonnement ;
  6. type – type de requête ;
  7. source – responsable de l’obligation d’envoyer le code source de la page au serveur des cybercriminels ;
  8. domain – en cas de besoin d’obligation d’envoi du code source de la page, indique le serveur de commande vers lequel l’envoi a lieu.

L’interface Observable est utilisée pour obtenir le code HTML des pages et l’envoyer au serveur des individus malintentionnés. Elle peut recevoir, le cas échéant, les informations requises lors du chargement de la page à l’aide d’un JavaScript.

Les individus malintentionnés doivent obtenir le code source des pages pour analyser leur structure et réaliser la configuration adéquate du module d’abonnement payant. De plus, cette source de codes source permet de recevoir le code de la page de la manière dont elle pourrait être affichée à la victime. L’analyse de la page en vue de l’exécution d’une commande d’abonnement est plus simple pour les individus malintentionnés.

La fonction de souscription à des abonnements payants se trouve dans la classe CustomWebView, qui hérite de la classe WebViewClient. Les méthodes onLoadResource, utilisée pour recevoir le lien de l’image, et onPageFinished, utilisées pour le post-traitement de la ressource chargée, y sont redéfinies. Le post-traitement repose sur l’analyse de la configuration et la visite ultérieure des liens nécessaires à l’aide de la fonction loadUrl. Le cas échéant, le module de traitement de CAPTCHA est sollicité.

Contournement du CAPTCHA

Les exigences imposées à la mise en forme des ressources Internet sur lesquelles le mécanisme de souscription se déroulera varient en fonction des partenariats. Ainsi, certains imposent l’utilisation d’un module CAPTCHA qui permet de confirmer que la demande n’est pas réalisée par un robot. Dans la majorité des cas, le partenariat redirige le navigateur vers le site de l’opérateur où l’utilisateur est invité à confirmer sa demande d’abonnement en saisissant le CAPTCHA. Comme nous l’avons déjà dit, Trojan-SMS.AndroidOS.Podec se distingue par sa capacité à déjouer la protection CAPTCHA.

Le module de traitement de CAPTCHA interagit avec le service Antigate.com qui propose des services d’identification manuelle du texte sur les images. Voici comment se décrit ce service :

„Antigate.Com est un service d’identification manuelle du texte des images. Le fonctionnement est très simple : votre application charge l’image dans notre système et vous recevez la réponse après quelques secondes.”

Source antigate.com

Autrement dit, un collaborateur du service lit le texte du CAPTCHA. D’après les données d’Antigate.com, la majorité des collaborateurs se trouve en Inde.

Source antigate.com

Répartition des collaborateurs d’Antigate.com par pays

Les échanges entre le Trojan et Antigate.com s’opèrent via le service HTTP API : l’image contenant le texte à déchiffrer est envoyée à l’aide d’une requête POST, puis des requêtes GET se chargent de surveiller le résultat du déchiffrement. Le résultat renvoyé (s’il a bien entendu été renvoyé dans un délai raisonnable) est placé dans les liens du champ "actions" de la configuration reçue et la fonction loadUrl() l’utilise pour réaliser le transfert.

Si le mécanisme d’abonnement requiert une confirmation par SMS, le Trojan utilise le filtre installé par les individus malintentionnés pour rechercher le message qui contient le code de confirmation et il en extrait le code à l’aide d’expressions régulières.

Schéma général de la souscription

Schéma général de la souscription payante

Le module de souscription au contenu payant contient l’Observer SubscribeService, à l’écoute des événements d’écriture dans l’interface "HTMLOUT" et si cette fonction reçoit des données (page chargée), elle les envoie au serveur des individus malintentionnés à l’aide de la classe Submiter, qui a hérité de la classe AsyncTask. De plus, SubscribeService accepte également les paramètres de la commande du gestionnaire, initialise CustomWebView et lance le traitement de la tâche à l’aide de SubscribeTask. SubscribeTask lance CustomWebView où se produit le traitement des paramètres saisis et où la décision sur le mécanisme de souscription est prise. Le cas échéant, le module CaptchaProcessor est invoqué. Il est chargé de l’interaction avec le service d’identification du texte et du traitement des requêtes qui imposent la saisie d’un code de confirmation et des caractères repris dans le CAPTCHA.

Conclusion

Sur la base des échantillons de Trojan-SMS.AndroidOS.Podec que nous avions déjà reçus, nous pouvons affirmer que le Trojan traverse une phase de développement active. Le code est soumis à du réusinage, de nouvelles fonctions sont introduites et l’architecture du module est refondue.

Nous pensons que ce Trojan est développé par un groupe de développeurs pour Android en étroite coopération avec des experts du référencement noir spécialisé dans l’escroquerie et la création et rentabilisation illicites de trafic. Cette hypothèse repose sur les éléments suivants :

  1. diffusion sur le réseau "Vkontakte" à l’aide de mécanismes d’ingénierie sociale ;
  2. utilisation d’un module de protection commercial ;
  3. mode de retrait inhabituel des fonds de la victime, notamment via le contournement des CAPTCHA.

Le code de la version de Trojan-SMS.AndroidOS.Podec que nous avons analysée contient une fonction qui n’est pas encore utilisée mais qui offre des possibilités aux auteurs de virus pour plus tard. Il y a par exemple la fonction auxiliaire isRooted() qui permet de vérifier si le propriétaire du périphérique détient les privilèges root. Cette fonction n’est pas utilisée dans le code principal du Trojan, ce qui laisse supposer l’apparition dans les nouvelles versions d’une fonction liée à l’utilisation des privilèges de l’utilisateur root.

Les utilisateurs des solutions de Kaspersky Lab sont déjà protégés contre toutes les versions actuelles de Trojan-SMS.AndroidOS.Podec. Ceci étant dit, nous recommandons aux utilisateurs d’installer les applications uniquement depuis des magasins officiels comme Google Play. Il ne faut jamais céder aux provocations des auteurs de virus et télécharger des applications gratuites et piratées. Le risque financier lié au téléchargement et à l’installation du Trojan est de loin supérieur au coût de la version légale de l’application.

Nous tenons à remercier  la société "Mobilnye Telesistemy" et plus spécialement les ses spécialistes en contrôle du trafic des partenariats pour leur contribution à la rédaction de ce rapport.

Posts similaires

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *