{"id":469,"date":"2018-01-07T22:51:43","date_gmt":"2018-01-07T21:51:43","guid":{"rendered":"http:\/\/www.smarinier.net\/?p=469"},"modified":"2024-01-15T11:03:41","modified_gmt":"2024-01-15T10:03:41","slug":"virus-piratage-wordpress-histoire-dune-infestation-et-de-leur-eradication","status":"publish","type":"post","link":"https:\/\/www.smarinier.net\/virus-piratage-wordpress-histoire-dune-infestation-et-de-leur-eradication\/","title":{"rendered":"\u00ab\u00a0Virus\u00a0\u00bb et piratage WordPress : histoire d&rsquo;une infestation et de leur \u00e9radication"},"content":{"rendered":"<p class=\"p1\">Ces derni\u00e8res ann\u00e9es, WordPress a comport\u00e9 &#8211; il faut le reconna\u00eetre &#8211; de nombreuses failles (ou bien dans ses plugins et autres th\u00e8mes) permettant \u00e0 des opportunistes malfaisants<span class=\"Apple-converted-space\">\u00a0 <\/span>de prendre le contr\u00f4le de serveurs utilisant WordPress, victime de son succ\u00e8s.<\/p>\n<p class=\"p1\">Je prot\u00e9geais simplement mon site par des mots de passe complexes, des mises \u00e0 jour WordPress r\u00e9guli\u00e8res, et une strat\u00e9gie simple consistant \u00e0 mettre le moins de plugins possible. Tr\u00e8s r\u00e9cemment, j&rsquo;ai \u00e9t\u00e9 victime de nombreuses infestations, que l\u2019on peut comparer &#8211; pour faire simple &#8211; \u00e0 des virus informatiques. Ils ont des strat\u00e9gies assez similaires : prendre le contr\u00f4le de fa\u00e7on relativement discr\u00e8te, laisser fonctionner normalement le WordPress (afin que le responsable ne s\u2019en rende pas compte) puis d\u00e9clencher le fonctionnement de l\u2019exploitation du site au moment opportun, et massivement.<\/p>\n<p class=\"p1\">Un WordPress disposant de la capacit\u00e9 d\u2019envoyer des emails, il devient par ailleurs une cible de choix., et permet ainsi la g\u00e9n\u00e9ration de mails de spam en masse, le temps que vous soyez blacklist\u00e9s!<\/p>\n<p class=\"p1\">Ayant \u00e9t\u00e9 averti simultan\u00e9ment par mon h\u00e9bergeur et par Google, j\u2019ai pu identifier, bloquer, et effacer assez rapidement les processus d\u00e9clench\u00e9s par les \u00ab\u00a0virus\u00a0\u00bb en deux ou trois jours. Depuis, je les vois essayer encore de prendre le contr\u00f4le, mais les protections mises en place les emp\u00eachent de proc\u00e9der.<\/p>\n<p class=\"p1\">Vous me direz \u00ab\u00a0pourquoi n&rsquo;as-tu-pas mis tous les plugins de s\u00e9curit\u00e9 ?\u00a0\u00bb. Certes&#8230;<\/p>\n<p class=\"p1\">Je suis relativement peu enclin \u00e0 utiliser ces \u00ab\u00a0plugin de s\u00e9curit\u00e9\u00a0\u00bb, souvent payants, alourdissant parfois consid\u00e9rablement le fonctionnement naturel de votre WordPress, et ne garantissant pas finalement \u00e0 100% l\u2019\u00e9tanch\u00e9it\u00e9 de votre site Web. Par ailleurs ces plugins existent par dizaines, sont tous relativement bien not\u00e9s : lequel choisir ? Les mettre tous sans savoir ce qui est fait pr\u00e9cis\u00e9ment ? Ceux que j&rsquo;ai pu voir vous avertissent juste \u00ab\u00a0il y a un probl\u00e8me\u00a0\u00bb, mais ne vous disent pas d&rsquo;o\u00f9 vient le probl\u00e8me, ni comment enlever le virus.<\/p>\n<p class=\"p1\">Vous pouvez bien s\u00fbr proc\u00e9der avec ces plugins si vous en \u00eates content. Mettez en commentaire les r\u00e9f\u00e9rences du plugins s&rsquo;il a fait ses preuves pour vous.<\/p>\n<p class=\"p1\">Mais voil\u00e0, je suis vieux jeu, et je voulais comprendre ce qui \u00e9tait arriv\u00e9, et comment l&rsquo;\u00e9viter.<\/p>\n<p class=\"p1\">Je tiens \u00e0 pr\u00e9ciser que je ne suis pas un sp\u00e9cialiste de la s\u00e9curit\u00e9 WordPress. Les \u00ab\u00a0virus\u00a0\u00bb (pour faire simples) que j&rsquo;ai pu d\u00e9couvrir correspondent \u00e0 des technologies de maintenant. Ils y en a certainement d&rsquo;autres et il y en aura d&rsquo;autres.<\/p>\n<p class=\"p1\">Bref, si vous ma\u00eetrisez un peu les commandes syst\u00e8me et que vous vous int\u00e9ressez au sujet, je vous propose de vous d\u00e9crire ce que j\u2019ai pu constater et les d\u00e9marches manuelles mises en oeuvre.<\/p>\n<h1 class=\"p1\">1) Qui attaque ?<\/h1>\n<p class=\"p1\">Avec la g\u00e9olocalisation IP, j\u2019ai obtenu des adresses d\u2019un peu partout dans le monde (Indon\u00e9sie, Russie, Pays de l\u2019Est\u2026), mais aussi beaucoup la France. Difficile dans ce contexte de savoir si les attaques ne viennent pas aussi de sites infect\u00e9s qui seraient utilis\u00e9es comme des machines zombies.<\/p>\n<p class=\"p1\">Le niveau de code que j\u2019ai pu voir d\u00e9montre un certain niveau de technicit\u00e9, concentr\u00e9 effectivement sur du code vaguement cach\u00e9, mais surtout, sachant s&rsquo;ins\u00e9rer dans l&rsquo;arborescence de WordPress . Ce n\u2019est pas non plus l\u2019oeuvre d\u2019un g\u00e9nie de l\u2019informatique. Les outils d&rsquo;injection SQL sont facilement trouvables, et ont \u00e9t\u00e9 adapt\u00e9s j&rsquo;imagine par ces codeurs. Personnellement je pense qu\u2019il y aurait plus malin pour v\u00e9ritablement se \u00ab\u00a0cacher dans WordPress\u00a0\u00bb, mais je pense que \u00e7a n&rsquo;est pas leur but. Il n&rsquo;ont pas besoin de faire tr\u00e8s malin. La masse des sites WordPress pas forc\u00e9ment bien prot\u00e9g\u00e9s et pas forc\u00e9ment bien surveill\u00e9s doit leur suffit.<\/p>\n<p class=\"p1\">Bref, il semblerait que tout ceci soit plut\u00f4t un empilement de briques (techniques d\u2019injection, obsfucateur de code PHP, robots pour d\u00e9terminer les sites WordPress). Probablement, ce sont des sets d\u2019outils vendus sur le Dark Web (ou m\u00eame pas), \u00e0 destination de phishers ou spammers, qui ont besoin de disposer d\u2019un grand nombre de sites sous leur contr\u00f4le pour \u00e9mettre des mails en masse, des pages web de redirection, et utiliser ainsi de nouvelles adresses IP non blacklist\u00e9es.<\/p>\n<p class=\"p1\">Dans tous les cas, dites-vous que vous n\u2019\u00eates pas face \u00e0 un humain, mais \u00e0 des robots qui vous ont identifi\u00e9 comme une cible potentielle et qui va re-essayer continuellement de vous attaquer. M\u00eame une fois \u00e9radiqu\u00e9s, votre serveur a \u00e9t\u00e9 identifi\u00e9 par des scanners comme \u00e9tant un WordPress. Si en plus l\u2019injection ou l\u2019attaque a fonctionn\u00e9 au moins une fois, alors on peut imaginer que vous \u00eates not\u00e9s dans des fichiers avec une petite croix verte et l&rsquo;annotation \u00ab\u00a0pigeon!. Longtemps apr\u00e8s mon nettoyage, m\u00eame si toutes leurs tentatives \u00e9chouent, je vois encore les robots buter b\u00eatement sur mon serveur.<\/p>\n<h1 class=\"p1\">2) D\u00e9sinformer (dans la mesure du possible)<\/h1>\n<p class=\"p1\">Il y a plusieurs indices qui informeront l\u2019attaquant que vous \u00eates un WordPress. Il n\u2019est pas n\u00e9cessaire de lui faciliter la t\u00e2che.<\/p>\n<h2 class=\"p1\">2.1) Fichiers d\u2019informations<\/h2>\n<p class=\"p1\">Les fichiers \u00ab\u00a0<strong>readme.html<\/strong>\u00a0\u00bb et \u00ab\u00a0<strong>licence.txt<\/strong>\u00a0\u00bb \u00e0 la racine de votre WordPress comportent des informations de version qui permettrait au robot attaquant d\u2019adapter sa strat\u00e9gie. Vous pouvez d\u00e9j\u00e0 les effacer, mais chaque mise \u00e0 jour de WordPress vous les remettra.<\/p>\n<p class=\"p1\">Je vous conseille donc plut\u00f4t d\u2019en interdire l\u2019acc\u00e8s.<\/p>\n<p class=\"p1\">Editez le fichier .htaccess \u00e0 la racine du WordPress et ajoutez:<\/p>\n<pre class=\"code\">&lt;Files licence.txt&gt;\r\n\torder deny,allow\r\n\tdeny from all\r\n\tallow from none\r\n&lt;\/Files&gt;\r\n&lt;Files readme.html&gt;\r\n\torder deny,allow\r\n\tdeny from all\r\n\tallow from none\r\n&lt;\/Files&gt;<\/pre>\n<h2 class=\"p1\">2.2) Version en &lt;meta&gt;<\/h2>\n<p class=\"p1\">Par ailleurs, WordPress fournit une information dont je ne vois pas personnellement l\u2019utilit\u00e9, dans chacune des pages produites:<\/p>\n<pre class=\"code\">&lt;meta name=\"generator\" content=\"WordPress x.x.x\" \/&gt;<\/pre>\n<h2 class=\"p5\">2.3) Version des scripts et CSS<\/h2>\n<p class=\"p5\">WordPress versionne vos scripts et CSS. Ceci a juste pour objectif de permettre aux utilisateurs fr\u00e9quents de ne pas avoir de probl\u00e8me de cache avec vos scripts et CSS, lors des mises \u00e0 jour.<\/p>\n<p class=\"p5\">Pour ces deux derniers points, je vous propose d&rsquo;\u00e9diter le fichier \u00ab\u00a0functions.php\u00a0\u00bb de votre th\u00e8me et ajoutez \u00e0 la fin:<\/p>\n<pre class=\"code\">\/\/ - remove wordpress generator\r\n\/\/ hide the meta tag generator from head and rss\r\nfunction _filter_disable_wp_version() {\r\n   return '';\r\n}\r\nadd_filter('the_generator','_filter_disable_wp_version');\r\nremove_action('wp_head', 'wp_generator');\r\n\r\n\/\/ - hide version information\r\n\/\/ Remove WP version from Styles &amp; scripts : replace with CRC\r\nadd_filter( 'style_loader_src', '_filter_no_ver', 9999 );\r\nadd_filter( 'script_loader_src', '_filter_no_ver', 9999 );\r\n\r\nfunction _filter_no_ver( $query ) {\r\n\tif ( strpos( $query, 'ver=' ) !== false ) {\r\n\t\tglobal $wp_version;\r\n\t\t$query = remove_query_arg( 'ver', $query );\r\n\t\t$query = add_query_arg('ver', crc32($wp_version.NONCE_KEY), $query);\r\n\t}\r\n\treturn $query;\r\n}<\/pre>\n<h1 class=\"p7\">3) Prot\u00e9ger l\u2019authentification<\/h1>\n<p class=\"p7\">Dans la grande majorit\u00e9 des cas, votre WordPress est certainement administr\u00e9 depuis chez vous, depuis un nombre d\u2019endroit fini par vous, ou par un nombre limit\u00e9 de personnes. Si ce n\u2019est pas le cas, il vous faudra imp\u00e9rativement mettre des syst\u00e8mes d\u2019authentifications renforc\u00e9s (double facteur par exemple).<\/p>\n<p class=\"p7\">Sinon, si vous avez des adresses IP fixes, vous pouvez prot\u00e9ger l\u2019authentification par adresse IP. Ce n\u2019est pas fiable \u00e0 100%, mais cela exigerait un niveau d\u2019agressivit\u00e9 et de technicit\u00e9 qui ne sera certainement pas en oeuvre contre votre site.<\/p>\n<p class=\"p7\">Dans le .htaccess \u00e0 la racine de votre site, ajoutez la section suivante, et mettez autant de \u00ab\u00a0allow from\u00a0\u00bb \u2026 que vous avez d\u2019adresse IP utilis\u00e9es par vous-m\u00eame et vos administrateurs:<\/p>\n<pre class=\"code\">&lt;Files wp-login.php&gt;\r\n\torder deny,allow\r\n\tdeny from all\r\n\t# ajoutez ici vos adresses IP publiques\r\n\tallow from x.x.x.x\r\n\tallow from y.y.y.y\r\n\t# etc\u2026\t\r\n&lt;\/Files&gt;\r\n\r\n<\/pre>\n<h1 class=\"p7\">4) Eviter xmlrpc<\/h1>\n<p class=\"p7\">Ce fichier est \u00e0 l\u2019origine de nombreux probl\u00e8mes de failles de s\u00e9curit\u00e9, il y a de tr\u00e8s fortes chances que vous n\u2019en ayez pas besoin, si vous ne faites pas interagir votre site WordPress avec des applications Mobile par exemple. Si c&rsquo;est toutefois le cas, alors il vous faudra mettre des syst\u00e8mes de protections plus pouss\u00e9s.<\/p>\n<p class=\"p7\">Dans le .htaccess \u00e0 la racine de votre site, ajoutez la section suivante:<\/p>\n<pre class=\"code\">&lt;Files xmlrpc.php&gt;\r\n\torder deny,allow\r\n\tdeny from all\r\n\tallow from none\r\n&lt;\/Files&gt;<\/pre>\n<h1 class=\"p7\">5) Bloquer la modification et cr\u00e9ation de fichiers<\/h1>\n<p class=\"p7\">La m\u00e9thode peut s\u2019av\u00e9rer un peu radicale et contraignante \u00e0 l\u2019usage, mais c\u2019est la plus s\u00fbre fa\u00e7on d\u2019emp\u00eacher toute modification de fichier, comme on le verra plus loin, ou tout ajout de fichier non voulu sur votre site.<\/p>\n<p>Je vous la conseille si :<\/p>\n<p>&#8211; vous g\u00e9rez (un peu comme moi) votre site assez rarement<\/p>\n<p>&#8211; vous ne faites pas confiance dans les plugins de s\u00e9curit\u00e9<\/p>\n<p class=\"p7\">Inconv\u00e9nient important, vous devrez g\u00e9rer ces droits lors des modifications de fichiers, ou bien lors des mises \u00e0 jour de WordPress.<\/p>\n<p class=\"p7\">Le principe est de mettre votre site enti\u00e8rement en \u00ab\u00a0Read\/only\u00a0\u00bb.<\/p>\n<p class=\"p7\">Placez vous \u00e0 la racine de votre WordPress, et tapez les commandes suivantes (ou copiez\/collez):<\/p>\n<p class=\"p7\">(si les commandes chmod se plaignent, pr\u00e9fixez la commande par la commande sudo)<\/p>\n<pre class=\"code\">#Prot\u00e9ger le site contre l\u2019\u00e9criture:\r\n# notez la valeur fournie par la commande stat:\r\nstat -f \"%p\" %77%70%2d%63%6f%6e%74%65%6e%74\/uploads\r\nchmod -R ugo-w .\r\nchmod -R <i>valeur_stat<\/i> %77%70%2d%63%6f%6e%74%65%6e%74\/uploads\r\n<\/pre>\n<p class=\"p7\">Si vous utilisez des caches, remettez les droits d\u2019\u00e9criture aussi sur ceux-ci.<\/p>\n<p class=\"p7\">Avant une mise \u00e0 jour WordPress, il conviendra de remettre le site en mode \u00e9criture:<\/p>\n<pre class=\"code\"># Remettre tout le site en mode \"\u00e9criture autoris\u00e9e\"\r\nchmod -R ugo+w .\r\n<\/pre>\n<p class=\"p7\">Une fois termin\u00e9:<\/p>\n<pre class=\"code\"># Reprot\u00e9ger le site\r\nchmod -R ugo-w .\r\nchmod -R <i>valeur_stat<\/i> %77%70%2d%63%6f%6e%74%65%6e%74\/uploads\r\n<\/pre>\n<p class=\"p7\">Idem si vous voulez travailler sur votre th\u00e8me (\u00e9dition CSS, fichiers\u2026), vous pouvez remettre le droit d\u2019\u00e9criture sur le dossier des th\u00e8mes:<\/p>\n<pre class=\"code\">chmod -R ugo+w %77%70%2d%63%6f%6e%74%65%6e%74\/themes\/\r\n# reprot\u00e9ger le dossier de th\u00e8mes\r\nchmod -R ugo-w %77%70%2d%63%6f%6e%74%65%6e%74\/themes\/\r\n<\/pre>\n<h1 class=\"p7\">6) V\u00e9rifier que vous n\u2019\u00eates pas infect\u00e9s<\/h1>\n<p class=\"p7\">Les manipulations qui suivent impliquant beaucoup de manipulations de fichiers ou de suppression, mettez votre site en mode \u00ab\u00a0\u00e9criture autoris\u00e9e\u00a0\u00bb si vous vous apercevez que vous \u00eates infect\u00e9s.<\/p>\n<p class=\"p7\">Plusieurs infections sont possibles, que j\u2019ai pu constater (je n\u2019ai pas surveill\u00e9 mon site pendant au moins 1 an !):<\/p>\n<h2 class=\"p7\">6.1) V\u00e9rifier que vous n\u2019avez pas des utilisateurs clandestins<\/h2>\n<p class=\"p7\">V\u00e9rifiez avec votre administrateur WordPress la liste des utilisateurs.<\/p>\n<p class=\"p7\">Si vous en avez effectivement, supprimez-les ! Cela signifie que votre WordPress est sensible \u00e0 l\u2019injection SQL. Il faut v\u00e9rifier tous vos plugins et extensions (sont ils \u00e0 jours? sont-ils bien recommand\u00e9s ?). Mettez bien \u00e0 jour votre WordPress.<\/p>\n<p class=\"p7\">Si quelques jours plus tard (en g\u00e9n\u00e9ral 24 ou 48h suffisent), des administrateurs r\u00e9apparaissent, il va vous falloir monter de niveau. Prot\u00e9gez par adresse IP votre authentification (votre chapitre 3), d\u00e9sactivez vos extensions, et remettez les en place toutes les 48 h, afin de d\u00e9terminer celle qui est la faille de s\u00e9curit\u00e9. Une fois que vous l\u2019avez identifi\u00e9e, vous devrez la supprimer ou s\u2019adresser \u00e0 son d\u00e9veloppeur.<\/p>\n<h2 class=\"p7\">6.2) Les favicon malicieux<\/h2>\n<h3 class=\"p7\">6.2.1) Les favicon avec du code<\/h3>\n<p class=\"p7\">Le virus positionne des fichiers \u00ab\u00a0favicon\u00a0\u00bb qui sont en fait du code, qui seront discr\u00e8tement inclus dans des fichiers PHP. Ces fichiers se positionnent au hasard, au fin fond des dossiers, et les scripts PHP les incluant peuvent \u00eatre n\u2019importe o\u00f9 sur votre site.<\/p>\n<p class=\"p7\">Si vous \u00eates infect\u00e9s par ces favicons, il faut aussi \u00e9radiquer les fichiers qui les incluent.<\/p>\n<p class=\"p7\">Pour identifier les favicons douteux:<\/p>\n<p class=\"p7\">A la racine de votre site:<\/p>\n<pre class=\"code\">find . -name \"favicon_*.ico\"\r\n<\/pre>\n<p class=\"p7\">Les fichiers sont de la forme \u00ab\u00a0favicon_\u00a0\u00bb + un codehexadecimal_arbitraire + \u00ab\u00a0.ico\u00a0\u00bb<\/p>\n<p class=\"p7\">Exemple:<\/p>\n<p class=\"p8\"><span class=\"s3\">%77%70%2d%69%6e%63%6c%75%64%65%73\/js\/favicon_b8ac3e.ico<\/span><\/p>\n<p class=\"p7\">Exemple de contenu code du fichier favicon:<\/p>\n<p><a href=\"https:\/\/www.smarinier.net\/%77%70%2d%63%6f%6e%74%65%6e%74\/uploads\/2018\/01\/virus_favicon.jpg\"><img fetchpriority=\"high\" decoding=\"async\" class=\"alignnone wp-image-472 size-full\" src=\"https:\/\/www.smarinier.net\/%77%70%2d%63%6f%6e%74%65%6e%74\/uploads\/2018\/01\/virus_favicon.jpg\" alt=\"\" width=\"665\" height=\"529\" srcset=\"https:\/\/www.smarinier.net\/%77%70%2d%63%6f%6e%74%65%6e%74\/uploads\/2018\/01\/virus_favicon.jpg 665w, https:\/\/www.smarinier.net\/%77%70%2d%63%6f%6e%74%65%6e%74\/uploads\/2018\/01\/virus_favicon-300x239.jpg 300w\" sizes=\"(max-width: 665px) 100vw, 665px\" \/><\/a><\/p>\n<p><strong>Ces fichiers sont \u00e0 supprimer!<\/strong><\/p>\n<p class=\"p7\">Soit vous les effacez un par un, soit vous pouvez employer la m\u00eame commande pour le faire massivement:<\/p>\n<pre class=\"code\">find . -name \"favicon_*.ico\" -print -exec rm {} \\;\r\n<\/pre>\n<h3 class=\"p7\">6.2.2) Les include favicon<\/h3>\n<p class=\"p7\">Ces includes sont plac\u00e9s en t\u00eate des fichiers PHP, et incluent le code contenu dans des fichiers favicon. Le nom favicon ne saute pas aux yeux, car il est al\u00e9atoirement encod\u00e9 artificiellement en UTF-8.<\/p>\n<p class=\"p7\">La commande include est mise en mode silencieux (au cas o\u00f9 vous auriez effac\u00e9 le favicon), et g\u00e9n\u00e9ralement encadr\u00e9e par deux commentaires.<\/p>\n<p class=\"p7\">Exemple de code:<\/p>\n<pre class=\"code\">\/*7015e*\/\r\n\r\n@include \"\\x2fs\\x72v\\x2fd\\x61t\\x61\/\\x77e\\x62\/\\x76h\\x6fs\\x74s\\x2fw\\x77w\\x2el\\x65s\\x63a\\x72n\\x65t\\x73d\\x65n\\x61t\\x2ec\\x6fm\\x2fh\\x74d\\x6fc\\x73\/\\x6ci\\x76r\\x65d\\x6fr\\x2da\\x74e\\x6ci\\x65r\\x2ff\\x61v\\x69c\\x6fn\\x5f9\\x61f\\x62f\\x36.\\x69c\\x6f\";\r\n\r\n\/*7015e*\/\r\n<\/pre>\n<p class=\"p7\">Pour identifier les fichiers:<\/p>\n<pre class=\"code\">find . -name \"*.php\" -exec grep -l -e \"@include.*\\\\\\\\x\" {} \\;\r\n<\/pre>\n<p class=\"p7\"><b>Tout le bout de code infectieux (@include et les deux commentaires) est \u00e0 effacer du fichier, sans supprimer le fichier lui-m\u00eame.<\/b><\/p>\n<h2 class=\"p7\">6.3) Les fichiers de prise de contr\u00f4le de votre base de donn\u00e9es<\/h2>\n<p class=\"p7\">Les deux fichiers incrimin\u00e9s sont db_model.php et db_connector.php. Comment\u00e9s avec beaucoup d&rsquo;humour \u00ab\u00a0DO NOT REMOVE THIS FILE\u00a0\u00bb, ces fichiers prennent all\u00e8grement le contr\u00f4le de votre base de donn\u00e9es.<\/p>\n<p class=\"p7\">Les appels se font via des commandes GET avec des param\u00e8tres \u00ab\u00a0sort\u00a0\u00bb. On les retrouve dans les logs apache (access.log) avec des valeurs vaguement encod\u00e9es du param\u00e8tre sort.<\/p>\n<p class=\"p7\">Les deux fichiers sont effectivement de vrais Open Source. Le db_connector est bien de John Lim, mais il a \u00e9t\u00e9 modifi\u00e9 pour ne plus \u00eatre simplement un script destin\u00e9 \u00e0 \u00eatre inclus, mais une page active. Pour en \u00eatre s\u00fbr, regardez \u00e0 la fin du script, si vous avez des commandes PHP en dehors des classes ou des fonctions:<\/p>\n<p class=\"p7\">Exemple de fin de fichier:<\/p>\n<pre class=\"code\">    $pager = new ADODB_Pager();\r\n    $pager-&gt;render_pagelinks()\r\n<\/pre>\n<p class=\"p7\"><b>Ces fichiers sont \u00e0 supprimer.<\/b><\/p>\n<p class=\"p7\">#pour les identifier:<\/p>\n<pre class=\"code\">find . -name db_model.php -or -name db_connector.php\r\n<\/pre>\n<p class=\"p7\">#pour les effacer en m\u00eame temps<\/p>\n<pre class=\"code\">find . -name db_model.php -or -name db_connector.php -print -exec rm {} \\;\r\n<\/pre>\n<h2 class=\"p7\">6.4) Les fichiers de cibles de spam<\/h2>\n<p class=\"p7\">Ces fichiers sont pr\u00e9vus pour \u00eatre d\u00e9clench\u00e9s par des emails de SPAM envoy\u00e9s en masse. Si vous en avez, m\u00eame supprim\u00e9s, vous aurez encore des tentatives d&rsquo;acc\u00e8s pendant plusieurs jours.<\/p>\n<p class=\"p7\">Il y en a de plusieurs sortes:<\/p>\n<h3 class=\"p7\">6.4.1) Les \u00ab\u00a0alphabet\u00a0\u00bb<\/h3>\n<p class=\"p7\">Il y en a de plusieurs sortes. Alors pour les rep\u00e9rer il suffit de recherche la s\u00e9quence \u00ab\u00a0$alphabet\u00a0\u00bb dans le code. Comme c&rsquo;est un peu l\u00e9ger (il se peu qu&rsquo;un d\u00e9veloppeur de plugins aient utilis\u00e9 cette s\u00e9quence), il vous faudra aller voir dans le code. Quand \u00ab\u00a0alphabet\u00a0\u00bb est destin\u00e9 \u00e0 faire de l&rsquo;obsfucation douteuse, comme on peut le voir dans les exemples suivants, n&rsquo;h\u00e9sitez pas.<span class=\"Apple-converted-space\">\u00a0\u00a0<\/span><\/p>\n<p class=\"p7\">Exemple de code1:<\/p>\n<p><a href=\"https:\/\/www.smarinier.net\/%77%70%2d%63%6f%6e%74%65%6e%74\/uploads\/2018\/01\/virus_alphabet1.jpg\"><img decoding=\"async\" class=\"alignnone wp-image-473 size-full\" src=\"https:\/\/www.smarinier.net\/%77%70%2d%63%6f%6e%74%65%6e%74\/uploads\/2018\/01\/virus_alphabet1.jpg\" alt=\"\" width=\"403\" height=\"202\" srcset=\"https:\/\/www.smarinier.net\/%77%70%2d%63%6f%6e%74%65%6e%74\/uploads\/2018\/01\/virus_alphabet1.jpg 403w, https:\/\/www.smarinier.net\/%77%70%2d%63%6f%6e%74%65%6e%74\/uploads\/2018\/01\/virus_alphabet1-300x150.jpg 300w\" sizes=\"(max-width: 403px) 100vw, 403px\" \/><\/a><\/p>\n<p class=\"p7\"><b>Tout ce bout de code est \u00e0 effacer du fichier, sans supprimer le fichier lui-m\u00eame.<\/b><\/p>\n<p class=\"p7\">Exemple de code 2<b>:<\/b><\/p>\n<p><a href=\"https:\/\/www.smarinier.net\/%77%70%2d%63%6f%6e%74%65%6e%74\/uploads\/2018\/01\/virus_alphabet2.jpg\"><img decoding=\"async\" class=\"alignnone wp-image-474 size-full\" src=\"https:\/\/www.smarinier.net\/%77%70%2d%63%6f%6e%74%65%6e%74\/uploads\/2018\/01\/virus_alphabet2.jpg\" alt=\"\" width=\"378\" height=\"204\" srcset=\"https:\/\/www.smarinier.net\/%77%70%2d%63%6f%6e%74%65%6e%74\/uploads\/2018\/01\/virus_alphabet2.jpg 378w, https:\/\/www.smarinier.net\/%77%70%2d%63%6f%6e%74%65%6e%74\/uploads\/2018\/01\/virus_alphabet2-300x162.jpg 300w\" sizes=\"(max-width: 378px) 100vw, 378px\" \/><\/a><\/p>\n<p class=\"p7\"><b>Dans ce cas, le fichier ne contient que le code infectieux, il est \u00e0 supprimer.<\/b><\/p>\n<p class=\"p7\">#pour les identifier<\/p>\n<pre class=\"code\">find . -name \"*.php\" -exec grep -l -e \"\\\\$alphabet =\" {} \\;\r\n<\/pre>\n<h3 class=\"p7\">6.4.2) Les \u00ab\u00a0base64\u00a0\u00bb<\/h3>\n<p class=\"p7\">Tout le code est en base64, d&rsquo;o\u00f9 le nom que je donne ici.<\/p>\n<p class=\"p7\">Exemple de code:<\/p>\n<p><a href=\"https:\/\/www.smarinier.net\/%77%70%2d%63%6f%6e%74%65%6e%74\/uploads\/2018\/01\/virus_base64.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-475 size-full\" src=\"https:\/\/www.smarinier.net\/%77%70%2d%63%6f%6e%74%65%6e%74\/uploads\/2018\/01\/virus_base64.jpg\" alt=\"\" width=\"737\" height=\"605\" srcset=\"https:\/\/www.smarinier.net\/%77%70%2d%63%6f%6e%74%65%6e%74\/uploads\/2018\/01\/virus_base64.jpg 737w, https:\/\/www.smarinier.net\/%77%70%2d%63%6f%6e%74%65%6e%74\/uploads\/2018\/01\/virus_base64-300x246.jpg 300w\" sizes=\"(max-width: 737px) 100vw, 737px\" \/><\/a><\/p>\n<p class=\"p7\">Pour les identifier:<\/p>\n<pre class=\"code\">grep -r -e \"create_function.*base64_decode\" .\r\n<\/pre>\n<p class=\"p7\"><b>Ces fichiers sont \u00e0 supprimer.<\/b><\/p>\n<h3 class=\"p7\">6.4.3) G\u00e9n\u00e9rateur de redirection (htaccess\/Google)<\/h3>\n<p class=\"p7\">Je le nomme comme cela car il y a un test \u00e9trange avec le cookie &lsquo;google&rsquo; dont je ne vois pas bien l&rsquo;int\u00e9r\u00eat.<\/p>\n<p class=\"p7\">Ce code change les droits du fichier .htaccess, et cr\u00e9e apparemment des fichiers de redirection vers d&rsquo;autres sites.<\/p>\n<p class=\"p7\">Exemple de code:<\/p>\n<p><a href=\"https:\/\/www.smarinier.net\/%77%70%2d%63%6f%6e%74%65%6e%74\/uploads\/2018\/01\/virus_google.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-476 size-large\" src=\"https:\/\/www.smarinier.net\/%77%70%2d%63%6f%6e%74%65%6e%74\/uploads\/2018\/01\/virus_google-1024x448.jpg\" alt=\"\" width=\"640\" height=\"280\" srcset=\"https:\/\/www.smarinier.net\/%77%70%2d%63%6f%6e%74%65%6e%74\/uploads\/2018\/01\/virus_google-1024x448.jpg 1024w, https:\/\/www.smarinier.net\/%77%70%2d%63%6f%6e%74%65%6e%74\/uploads\/2018\/01\/virus_google-300x131.jpg 300w, https:\/\/www.smarinier.net\/%77%70%2d%63%6f%6e%74%65%6e%74\/uploads\/2018\/01\/virus_google-768x336.jpg 768w, https:\/\/www.smarinier.net\/%77%70%2d%63%6f%6e%74%65%6e%74\/uploads\/2018\/01\/virus_google.jpg 1082w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/><\/a><\/p>\n<p class=\"p7\"># pour les identifier<\/p>\n<pre class=\"code\">grep -r -e \"\\$_COOKIE.*google\" .\r\n<\/pre>\n<p class=\"p7\"><b>Ces fichiers sont \u00e0 supprimer!<\/b><\/p>\n<h2 class=\"p7\">6.5) Les g\u00e9n\u00e9rateurs de fichiers<\/h2>\n<p class=\"p7\">Ces fichiers g\u00e9n\u00e8rent des blocs entiers de code, qu&rsquo;il va falloir supprimer. Ils constituent un dossier au nom improbable qui devrait vous para\u00eetre suspect. (voir ci-apr\u00e8s).<\/p>\n<p class=\"p7\">Ces fichiers sont en quelque sorte des auto-dezipeurs. Ils contiennent leur contenu ZIP dans un base 64, qu&rsquo;ils vont installer tranquillement. Si vous supprimez les fichiers ainsi g\u00e9n\u00e9r\u00e9s q-et que vous laissez le g\u00e9n\u00e9rateur, il se re-g\u00e9n\u00e8rera. En effet, un robot sera charg\u00e9 du d\u00e9clenchement.<\/p>\n<p class=\"p7\">Je pense que leur strat\u00e9gie est : poser un g\u00e9n\u00e9rateur, le laisser un bon moment. Pass\u00e9 ce long moment, un robot appel le g\u00e9n\u00e9rateur. S&rsquo;il n&rsquo;est pas rejet\u00e9 par un 404, c&rsquo;est bingo. Le site est mal prot\u00e9g\u00e9, donc on va pouvoir l&rsquo;utiliser pendant un bon moment&#8230; Les fichiers sont donc g\u00e9n\u00e9r\u00e9s, et le spam faisant r\u00e9f\u00e9rence \u00e0 ces pages g\u00e9n\u00e9r\u00e9es peut commencer.<\/p>\n<p>Exemple de code:<\/p>\n<p><a href=\"https:\/\/www.smarinier.net\/%77%70%2d%63%6f%6e%74%65%6e%74\/uploads\/2018\/01\/virus_gen.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-477 size-full\" src=\"https:\/\/www.smarinier.net\/%77%70%2d%63%6f%6e%74%65%6e%74\/uploads\/2018\/01\/virus_gen.jpg\" alt=\"\" width=\"466\" height=\"511\" srcset=\"https:\/\/www.smarinier.net\/%77%70%2d%63%6f%6e%74%65%6e%74\/uploads\/2018\/01\/virus_gen.jpg 466w, https:\/\/www.smarinier.net\/%77%70%2d%63%6f%6e%74%65%6e%74\/uploads\/2018\/01\/virus_gen-274x300.jpg 274w\" sizes=\"(max-width: 466px) 100vw, 466px\" \/><\/a><\/p>\n<p class=\"p7\">#Pour les identifier<\/p>\n<pre class=\"code\">grep -r -e \"file_put_contents.*\\.zip\" .\r\n<\/pre>\n<p class=\"p9\"><span class=\"s5\"><b>Ces fichiers sont \u00e0 supprimer! Mais vraisemblablement, ils ont g\u00e9n\u00e9r\u00e9s une arborescence de fichiers, correspondant au nom que l&rsquo;on voit dans file_put_contents. Supprimez les aussi.<\/b><\/span><\/p>\n<h2 class=\"p7\">6.6) Les GLOBALS-GLOBALS<\/h2>\n<p class=\"p7\">Je les appelle comme cela car les petits malins utilisent une obsfucation de code bas\u00e9e sur les $GLOBALS. Ca pique les yeux quand on regarde le code, ce qui laisse \u00e0 supposer que l&rsquo;on peut les supprimer relativement sans se tromper (ou alors c&rsquo;est du code qui m\u00e9rite d&rsquo;\u00eatre effac\u00e9!).<\/p>\n<p class=\"p7\">Exemple de code:<\/p>\n<p><a href=\"https:\/\/www.smarinier.net\/%77%70%2d%63%6f%6e%74%65%6e%74\/uploads\/2018\/01\/virus_global.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-478 size-full\" src=\"https:\/\/www.smarinier.net\/%77%70%2d%63%6f%6e%74%65%6e%74\/uploads\/2018\/01\/virus_global.jpg\" alt=\"\" width=\"704\" height=\"511\" srcset=\"https:\/\/www.smarinier.net\/%77%70%2d%63%6f%6e%74%65%6e%74\/uploads\/2018\/01\/virus_global.jpg 704w, https:\/\/www.smarinier.net\/%77%70%2d%63%6f%6e%74%65%6e%74\/uploads\/2018\/01\/virus_global-300x218.jpg 300w\" sizes=\"(max-width: 704px) 100vw, 704px\" \/><\/a><\/p>\n<p class=\"p7\"># pour les identifier<\/p>\n<pre class=\"code\">grep -l -r \"\\$GLOBALS\\[\\$GLOBALS\" .\r\n<\/pre>\n<p class=\"p9\"><span class=\"s5\"><b>Ces fichiers sont \u00e0 supprimer!<\/b><\/span><\/p>\n<h2 class=\"p7\">6.7) Les redirecteurs<\/h2>\n<p class=\"p7\">Plac\u00e9s par une des pr\u00e9c\u00e9dentes engeance, selon toute vraisemblance, ils sont l\u00e0 pour \u00e9mettre une redirection (redirection ou iframe). Comme votre site n&rsquo;est pas encore identifi\u00e9 par les antispams MAIL, ils s&rsquo;appuient sur votre site pour \u00e9mettre la page sur votre site, avec la redirection vers leur site (phishing, vente de pilules, etc&#8230;).<\/p>\n<p class=\"p7\">Alors cette fois ce sont de simples pages sans code. Il ne vont pas faire grand mal, si ce n&rsquo;est que votre site est utilis\u00e9 \u00e0 des fins malhonn\u00eates, et qu&rsquo;il risque \u00e0 terme par \u00eatre blacklist\u00e9.<\/p>\n<p class=\"p7\">Exemple de page 1:<\/p>\n<p><a href=\"https:\/\/www.smarinier.net\/%77%70%2d%63%6f%6e%74%65%6e%74\/uploads\/2018\/01\/virus_redirect1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-479 size-full\" src=\"https:\/\/www.smarinier.net\/%77%70%2d%63%6f%6e%74%65%6e%74\/uploads\/2018\/01\/virus_redirect1.jpg\" alt=\"\" width=\"718\" height=\"58\" srcset=\"https:\/\/www.smarinier.net\/%77%70%2d%63%6f%6e%74%65%6e%74\/uploads\/2018\/01\/virus_redirect1.jpg 718w, https:\/\/www.smarinier.net\/%77%70%2d%63%6f%6e%74%65%6e%74\/uploads\/2018\/01\/virus_redirect1-300x24.jpg 300w\" sizes=\"(max-width: 718px) 100vw, 718px\" \/><\/a><\/p>\n<p class=\"p7\">Exemple de page 2:<\/p>\n<p><a href=\"https:\/\/www.smarinier.net\/%77%70%2d%63%6f%6e%74%65%6e%74\/uploads\/2018\/01\/virus_redirect2.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-480 size-full\" src=\"https:\/\/www.smarinier.net\/%77%70%2d%63%6f%6e%74%65%6e%74\/uploads\/2018\/01\/virus_redirect2.jpg\" alt=\"\" width=\"497\" height=\"70\" srcset=\"https:\/\/www.smarinier.net\/%77%70%2d%63%6f%6e%74%65%6e%74\/uploads\/2018\/01\/virus_redirect2.jpg 497w, https:\/\/www.smarinier.net\/%77%70%2d%63%6f%6e%74%65%6e%74\/uploads\/2018\/01\/virus_redirect2-300x42.jpg 300w\" sizes=\"(max-width: 497px) 100vw, 497px\" \/><\/a><\/p>\n<p><span class=\"s5\"><b>Ces fichiers sont \u00e0 supprimer!<\/b><\/span><\/p>\n<p class=\"p7\">Pour les identifier, utilisez le script fourni ci-apr\u00e8s.<\/p>\n<h2 class=\"p7\">7) Script de v\u00e9rification<\/h2>\n<p class=\"p7\">J&rsquo;ai \u00e9crit un script PHP qui va lancer toutes les v\u00e9rifications \u00e9nonc\u00e9es pr\u00e9c\u00e9demment (sauf 6.1). Il suffit de l&rsquo;ex\u00e9cuter au moins une fois sur un site.<\/p>\n<p>S&rsquo;ex\u00e9cute simplement dans votre dossier WordPress en mode commande, ou pr\u00e9fix\u00e9 de la commande PHP, ou bien en mode web, pour ceux qui n&rsquo;ont pas acc\u00e8s au mode commande.<\/p>\n<p>N&rsquo;h\u00e9sitez pas \u00e0 me contacter \u00e0 ce sujet.<\/p>\n<h1>Conclusion<\/h1>\n<p>N&rsquo;h\u00e9sitez pas \u00e0 me faire part de vos commentaires. Si vous trouvez d&rsquo;autres virus, je vous invite \u00e0 m&rsquo;envoyer les fichiers.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ces derni\u00e8res ann\u00e9es, WordPress a comport\u00e9 &#8211; il faut le reconna\u00eetre &#8211; de nombreuses failles (ou bien dans ses plugins et autres th\u00e8mes) permettant \u00e0 des opportunistes malfaisants\u00a0 de prendre le contr\u00f4le de serveurs utilisant WordPress, victime de son succ\u00e8s. Je prot\u00e9geais simplement mon site par des mots de passe [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":493,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[39],"tags":[],"class_list":["post-469","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-wordpress"],"_links":{"self":[{"href":"https:\/\/www.smarinier.net\/%77%70%2d%6a%73%6f%6e\/wp\/v2\/posts\/469","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.smarinier.net\/%77%70%2d%6a%73%6f%6e\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.smarinier.net\/%77%70%2d%6a%73%6f%6e\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.smarinier.net\/%77%70%2d%6a%73%6f%6e\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.smarinier.net\/%77%70%2d%6a%73%6f%6e\/wp\/v2\/comments?post=469"}],"version-history":[{"count":10,"href":"https:\/\/www.smarinier.net\/%77%70%2d%6a%73%6f%6e\/wp\/v2\/posts\/469\/revisions"}],"predecessor-version":[{"id":700,"href":"https:\/\/www.smarinier.net\/%77%70%2d%6a%73%6f%6e\/wp\/v2\/posts\/469\/revisions\/700"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.smarinier.net\/%77%70%2d%6a%73%6f%6e\/wp\/v2\/media\/493"}],"wp:attachment":[{"href":"https:\/\/www.smarinier.net\/%77%70%2d%6a%73%6f%6e\/wp\/v2\/media?parent=469"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.smarinier.net\/%77%70%2d%6a%73%6f%6e\/wp\/v2\/categories?post=469"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.smarinier.net\/%77%70%2d%6a%73%6f%6e\/wp\/v2\/tags?post=469"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}