Récupérer un site WordPress hacké

Les attaques de sites se multiplient et la rançon du succès planétaire de WordPress expose d’autant plus ses utilisateurs.

Je l’ai déjà dit, commencez par utiliser des thèmes et extensions de qualité et qui sont maintenus dans le temps. Si une extension est trop ancienne, cherchez une alternative rapidement pour limiter les risques.

Ce n’est pas la taille qui compte

Mais venons-en à l’objet de ce billet : le site d’un client d’un ami qui s’est ramassé une attaque en bonne et due forme avec à la clé la perte des données. Et bien entendu pas de sauvegarde car chez OVH, on vous vend de l’espace disque qui ne sert pas à grand chose et des accélérateurs bien inutiles quand les données sont perdues plutôt qu’une vraie solution de sauvegarde.

L’offre de MonArobase est tarifée dans les mêmes eaux mais propose de vrais outils pour sauvegarder et restaurer son site en cas de problème. Voilà pourquoi il faut arrêter de regarder les chiffres et s’attacher au service fourni par son hébergeur.

Retrouver ses données

Si le site n’est pas trop récent il y a de bonnes chances que le cache de Google et que les « snapshots » d’Archive.org soient d’un grand secours.

En effet, dans le cas qui m’intéresse ici, nous avions bien un export du site (fait via WordPress en XML) datant de quelques semaines mais rien d’autre. Et contrairement à ce que vous pensez, cela ne suffit pas. C’est la sauvegarde de la base de données qui compte véritablement !

L’export WordPress contient tous les contenus saisis mais comment récupérer les personnalisations du thème, les « sliders » programmés dans les extensions, etc ?

Après avoir réinstallé un WordPress, rétabli le thème et les extensions et importé les données XML il manque le retour de quelques textes récents, des styles personnalisés et quelques éléments comme les « sliders ».

Récupérer avec style(s)

Un petit tour sur Archive.org et je retrouve un instantané du site quelques jours avant l’attaque. Je lorgne la source HTML de cette « copie » et ne tarde pas à y découvrir plein de choses intéressantes : les ajouts à la feuille de styles (en vrac) et les « sliders » (en code brut).

recuperation-styles

Copier. Collé. Les styles sont de retour dans la personnalisation du thème utilisé.

Surf and sliders

Pour les « sliders » (ici l’extension LayserSlider), l’opération est moins marrante mais tout à fait faisable. On retrouve le code détaillé qui permet d’identifier les diapos, leur contenu et le paramétrage.

sliders

Un peu de nettoyage pour identifier les éléments, un peu de logique et on peut vite retrouver les informations importantes pour les réintégrer.

recuperation-slide

parametrage-slider

Textes à cache-cache

Les derniers textes qui ne sont pas dans la sauvegarde peuvent être retrouvés dans le cache Google si le site a été indexé et que le hack est récent.

Une recherche avec l’opérateur « site: » suivi du nom de domaine liste les pages. Il suffit ensuite d’afficher le cache et recopier les contenus.

Plus compliqué qu’une sauvegarde

Ce billet ne vise pas à détailler toutes les opérations menées (parfois assez techniques) mais à donner quelques idées pour retrouver ses données.

Reste que mettre en place, en amont, une stratégie de sauvegarde, manuelle ou automatique, est bien plus pratique !

Si vous voulez sauvegarder vos données à la main, pensez au minimum à télécharger le contenu de votre FTP et à réaliser un export de la base de données. Seule véritable sauvegarde intégrale. Mais par principe, pensez à aller dans les options du thème et celles extensions majeures pour réaliser un export des données correspondantes.

Si vous souhaitez automatiser les sauvegardes vous pouvez envisager BackWPup ou WordPress Backup to DropBox.

La solution la plus pratique reste une sauvegarde au niveau du serveur telle que celle que propose MonArobase sur ses offres d’hébergement, quel que soit l’outil utilisé (WordPress, Magento, etc).

WordPress, traduction de thèmes et extensions

Malheureusement, ce n’est pas parce que l’on achète ses thèmes et extensions WordPress plutôt que de les voler récupérer sur des sites peu fréquentables que l’on obtient une version francisée du module.

Pour mes besoins personnels et ceux de clients,je me suis donc lancé dans la traduction de quelques thèmes et extensions dont voici la liste et le « changelog ».
Les futures mises à jour seront publiées ici.

Thème Meteor pour WordPress

Commercialisé par Der Design sur ThemeForest, le thème Meteor pour WordPress est élégant et dispose d’un système de mise en page original.

Meteor en français

Les fichiers de traduction « fr_FR.mo » et « fr_FR.po » sont à déposer dans le dossier « wp-content/plugins/meteor/includes/languages ».

Télécharger les fichiers de traduction

Extension WordPress Table Rates pour WooCommerce

Si vous avez une boutique en ligne qui fonctionne à l’aide WooCommerce, l’extension Table Rates for WooCommerce créée par Ryan Fletcher permet de définir des tables de frais de livraison en fonction du montant du panier.

La traduction fait partie intégrante de l’extension disponible sur WordPress.org.

Thème Jupiter pour WordPress

Parmi les thèmes les plus téléchargés et les plus complets en termes de fonctionnalités, le thème Jupiter pour WordPress est remarquable pour son interface de composition des pages et sa grande simplicité.

Jupiter en français

Les fichiers de traduction « fr_FR.mo » et « fr_FR.po » sont à déposer dans le dossier « wp-content/plugins/jupiter/languages ». À thème complet, traduction longue… La traduction est donc incomplète et encore en cours (notamment en ce qui concerne les forums).

Télécharger les fichiers de traduction

Complétez ces traductions

Si vous notez des erreurs ou si vous complétez ces fichiers, n’hésitez pas à m’envoyer vos mises à jour !

WordPress Hack SEO : achetez vos thèmes et plugins !

C’est mon index qui me l’a dit

En voulant contrôler l’indexation dans les moteurs de recherche du site d’un nouveau client, j’ai découvert à mon grand désarroi que les résultats de recherche renvoyaient une description pas très catholique conforme au contenu du site et à ses balises dédiées.

resultats-hack-seo

À la première vérification de base, en affichant la source des pages en question, aucune trace de ce texte frauduleux.

Quelqu’un a donc “hacké” les résultats de recherche, vicieux et peu évident à détecter dans la mesure où il faut regarder les résultats de recherche avec la commande “site:…” dans le moteur de recherche !

Maintenant, il faut comprendre comment cela a été fait et restaurer un “fonctionnement” normal.

Si c’est gratuit, ça peut te coûter cher !

À partir de cet instant, il va falloir faire de la “rétroingénierie” pour trouver comment fonctionne ce hack !

Le site tourne sous WordPress, est habillé par un thème “commercial” et utilise quelques extensions gratuites.

Mes soupçons sont vite dirigés vers le thème WordPress qui affiche dans l’administration une bannière “WP…er” que je ne connais pas.
“WP…er” est apparemment un site qui se targue de fournir gratuitement des thèmes WordPress commerciaux. Pas très légal tout ça ?!

Mes recherches sur “wordpress hack seo” confirment mes doutes sur le fait que le thème puisse être responsable de cela mais ne fournissent pas de clés vers une solution.

Image pas très pieuse

Plutôt convaincu par le risque potentiel d’un produit payant rendu gratuit par de bonnes âmes, je commence par acheter le thème auprès de sources officielles.

Je compare les dossiers des deux thèmes et découvre dès la racine un dossier “images” contenant un visuel nommé “social.png” dont mon Mac ne sait étrangement pas afficher l’aperçu. Tiens, ce dossier n’est pas dans la version commerciale du site ?
Bien inspiré, je tente le tout pour le tout et ouvre l’image suspecte dans un éditeur de texte (TextMate 2 en l’occurrence).

Ô surprise, cette image renferme du code PHP très louche : tout est sur une ligne, les fonctions et variables ont des noms incompréhensibles…

social-png-raw

C’est malin comme technique, ce n’est absolument pas l’image de « pub » que j’avais aperçue, mais un autre fichier « inclus » dans une des fonctions PHP du thème, modifiée pour l’occasion.

Téléphone, maison !

Après de longues minutes à remettre l’indentation de ce code à plat et à tenter de déchiffrer son fonctionnement, voici mes constatations :

  • ce fichier enregistre des informations codées dans les options de WordPress (table MySQL “wp_options”)
  • il envoie (et va chercher) des données via la librairie “Curl” de PHP vers des serveurs aux adresses bien trop cryptées pour être honnêtes
  • il envoie un email (au contenu non déterminé) qui a pour objet “Phone Home”

phone-home-social

Avec le nommage abscon des fonctions et variables et le découpage en dizaines d’actions il est particulièrement difficile d’établir tout ce que fait réellement ce code malicieux. Une chose est sûre : il est responsable de l’altération des résultats de recherche.

Autres (quasi) certitudes :
le hack n’a altéré aucun des fichiers du site (pas de dates de modification bizarres)
aucune modification directe du contenu (rien de visible sur les pages ni dans la source du code HTML affiché)
aucune modification / transmission de codes d’accès (utilisateurs WordPress car mot de passe cryptés, et codes FTP car non stockés)

A la recherche de l’exploit

J’ai bien essayé d’utiliser les extensions TAC et Exploit Scanner pour trouver d’autres failles amenées avec le thème piraté, mais sans succès. Pire que ça, les deux outils ne détectent absolument rien de suspect !

Eliminer, nettoyer et sécuriser

La meilleure solution pour se débarrasser du problème et de ses conséquences consisterait à reconstruire le site de zéro, en installant toutes les distributions officielles (WordPress, thème et extensions) et en n’important surtout rien de l’ancien site par mesure de précaution maximale.
Malheureusement, cette option sera un dernier recours pour moi, car c’est un énorme travail vue la quantité de contenus et la complexité de la configuration du thème et des extensions.

Je préfère “prendre le risque” de me borner à un grand ménage et attendre quelques jours afin de mesurer son efficacité et décider si, oui ou non, la réinstallation complète est absolument nécessaire !

Supprimer les ajouts

Dans le code malicieux on trouve les références à deux entrées dans la base de données de WordPress : “WP_CLIENT_KEY” et “wp_data_newa” dans la table “wp_options”. Elles ne sont utilisées par rien d’autre donc aucun scrupule à les supprimer.

wplocker-database

Restaurer des fichiers propres

Dans le doute, je remplace tous les fichiers d’installation de WordPress (à l’exception de “wp-config.php”) ainsi que ceux du thème et des extensions.
Cette opération est sans risque majeur dans la mesure où tout ce qui concerne la configuration et la personnalisation du site se trouve dans la base de données.

Sécuriser l’installation

SI je suis certain que les codes FTP n’ont pu être volés ou que ceux de la base de données ne présentent aucun risque (car utilisés en “local” par le serveur), il n’en n’est pas de même pour ceux des utilisateurs et les clés d’authentification WordPress (situées dans le fichier “wp-config.php”).

Je modifie donc tous les mots de passe des utilisateurs WordPress et génère de nouvelles clés par le biais de l’API WordPress (il suffit de remplacer les lignes correspondantes dans “wp-config.php”).

Accélérer le retour à la normale

Maintenant que les causes sont traitées, il faut s’attaquer aux conséquences : rétablir des résultats de recherche non corrompus !
Cette étape est la plus incertaine : impossible de connaître le délai exact pour que le moteur de recherche élimine les informations indésirables.

Pour me donner le maximum de chances, j’utilise les outils webmaster pour réaliser les opérations suivantes :
– soumission d’un nouveau fichier “sitemap”
– suppression de l’index des pages peu importantes ou mal positionnées

Désormais il n’y a plus qu’à attendre !

Pirater ça peut faire mal !

J’enfonce une porte ouverte mais vouloir à tout prix gagner quelques euros (ici, 55$) peut coûter cher : déclassement dans les moteurs de recherche, image de la marque écornée vis à vis des internautes, coût de la réparation, etc…

Si vous n’avez pas les moyens de vous payer un logiciel, considérez plutôt les alternatives moins chères voire gratuites ! Ce n’est pas parce que ce n’est pas cher que c’est moins bon…

Combien d’amis ou de voisins se sont ramassé un malware car ils pensaient que Photoshop était la meilleure solution pour retoucher les yeux rouges du chat sur la photo de Noël alors que d’autres solutions bien plus adaptées et abordables font le job ?
Pensez-y et faites réfléchir vos connaissances avant d’aller voler un logiciel hors de prix et parfois bien mal adapté et de prendre des risques considérables avec ses données personnelles (piratage ou perte pure et simple) !

Résultats : après 5 jours, tout est revenu à la normale. Alors si cet article vous donne les clés pour rendre un thème piraté sain, je ne l’encourage absolument pas, par sécurité et par respect pour le travail des développeurs.

Mise à jour : Merci à @doopix qui signale ce lien très instructif au sujet des thèmes WordPress gratuits.

WordPress 2.0.6, compatible Safari !

Parmi les nouveautés de la dernière mouture de [WordPress](http://wordpress.org/ (2.0.6), on découvre enfin un semblant d’éditeur HTML qui propose quelques-unes des fonctionnalités de TinyMCE aux utilisateurs de Safari !

Parmi les autres changements, on notera surtout un mise à jour importante de la sécurité (qui, à elle seule, rend la mise à jour nécessaire), le filtrage des commentaires pour que ceux-ci ne viennent pas démonter votre belle mise en page et quelques améliorations dédiées aux développeurs.