NettoyageIncidentPublié le · mis à jour le · 14 min

Comment nettoyer un WordPress hacké : le guide complet, étape par étape

Un site piraté se nettoie dans un ordre précis. Supprimer des fichiers dans la précipitation efface les indices qui disent par où l'attaquant est entré, et laisse souvent en place la porte dérobée qui le fera revenir. Voici les réflexes à avoir avant de toucher au site, les neuf étapes du nettoyage, et ce qu'il faut faire après.

Sources : FAQ « My site was hacked » de WordPress.org, guide de Google pour les sites piratés et documentation de WP-CLI (en anglais).

L'essentiel en 30 secondes

Premier geste
Une copie complète de l'état infecté (fichiers et base), gardée hors du serveur
À ne pas faire
Supprimer des fichiers au hasard ou restaurer une sauvegarde sans savoir par où l'attaquant est entré
Le cœur
Réinstallé à l'identique par FTP : l'outil de réinstallation de l'administration laisse les fichiers ajoutés
Mots de passe
Changés deux fois : dès la découverte, puis une fois le site propre
Google
Demander le réexamen seulement quand le site est propre et la faille corrigée

Avant de toucher au site : quatre réflexes

Si vous doutez encore du piratage, commencez par les symptômes et la première heure. S'il est confirmé, ces quatre gestes prennent moins d'une heure et conditionnent tout le reste.

1

Noter ce que vous voyez

Ce qui vous fait penser à un piratage (redirection, alerte Google, compte inconnu, message de l'hébergeur), quand vous l'avez remarqué, et ce qui a changé récemment sur le site : une extension installée, un thème modifié. La documentation de WordPress.org fait de ce relevé la première étape : il guidera toute la suite, que vous nettoyiez seul ou non.

2

Copier l'état infecté

Téléchargez tous les fichiers et un export de la base de données, et rangez-les hors du serveur. Cette copie sale ne sera jamais remise en ligne : elle sert à comprendre l'attaque et à revenir en arrière si le nettoyage casse quelque chose.

3

Analyser votre propre ordinateur

Un poste infecté peut voler vos accès FTP ou WordPress au moment où vous les tapez. Passez un antivirus complet sur chaque ordinateur qui se connecte au site avant de changer les mots de passe, sinon les nouveaux partiront aussi.

4

Prévenir l'hébergeur

Sur un hébergement mutualisé, d'autres sites du serveur peuvent être touchés, et l'hébergeur a parfois déjà isolé le vôtre. Il peut aussi vous fournir les journaux d'accès du serveur, indispensables pour trouver la porte d'entrée.

Les 9 étapes du nettoyage

Les commandes indiquées utilisent WP-CLI, l'outil en ligne de commande de WordPress, disponible chez la plupart des hébergeurs. La vérification des extensions ne couvre que celles publiées sur WordPress.org (documentation) : les extensions payantes n'ont pas d'empreinte publique.

1

Restreindre l'accès au site

Mettez le site en maintenance ou protégez-le par mot de passe au niveau de l'hébergement, pour que vos visiteurs ne reçoivent plus de code malveillant. Google recommande de mettre le site en quarantaine pendant le nettoyage. Ne supprimez encore aucun fichier.

2

Couper les accès de l'attaquant

Changez tous les mots de passe : comptes administrateurs WordPress, FTP ou SFTP, panneau de l'hébergeur, base de données. Remplacez les clés de sécurité de wp-config.php par un jeu neuf (générateur officiel de WordPress.org) : toutes les sessions ouvertes sont déconnectées, celle de l'attaquant comprise. Listez enfin les administrateurs pour repérer un compte que vous n'avez pas créé.

wp user list --role=administrator --fields=ID,user_login,user_email,user_registered
3

Repérer les fichiers modifiés ou ajoutés

Comparez le cœur et les extensions gratuites aux empreintes officielles de WordPress.org : tout fichier modifié ou ajouté ressort. Cherchez aussi du PHP là où il n'a rien à faire, à commencer par le dossier des médias. Un scanner externe fait ce travail sans rien exécuter et couvre les fichiers que la comparaison ignore.

wp core verify-checksums
wp plugin verify-checksums --all
find wp-content/uploads -name '*.php'
4

Trouver la porte d'entrée

Dans les journaux d'accès du serveur, remontez jusqu'à la première requête suspecte : date, adresse IP, fichier visé. Les entrées les plus fréquentes sont une extension ou un thème non à jour, une version piratée (« nulled ») ou un mot de passe deviné. Sans cette réponse, le site sera réinfecté par le même chemin, même parfaitement nettoyé.

5

Réinstaller le cœur à l'identique

Téléchargez la même version de WordPress que celle du site, puis remplacez entièrement wp-admin et wp-includes par FTP. Le bouton de réinstallation de l'administration écrase les fichiers existants mais laisse ceux que l'attaquant a ajoutés. Gardez wp-config.php, après l'avoir relu ligne par ligne.

6

Remplacer extensions et thèmes

Supprimez chaque extension et chaque thème, puis réinstallez-les depuis leur source officielle : WordPress.org, ou le compte client de l'éditeur pour les versions payantes. Ne « désinfectez » jamais un fichier à la main : une ligne oubliée suffit. Une version piratée ne se nettoie pas, elle se supprime.

7

Inspecter ce qui ne se remplace pas

Restent les fichiers propres à votre site : wp-config.php, les .htaccess de tous les dossiers, le dossier des médias, wp-content/mu-plugins (chargé automatiquement, souvent oublié) et le code personnalisé du thème enfant. Ce sont les cachettes préférées des portes dérobées.

8

Nettoyer la base de données

Vérifiez les comptes administrateurs, les options siteurl et home (une redirection y est vite cachée), les widgets et contenus qui contiennent des balises script ou iframe inconnues, et les tâches planifiées de WordPress, qu'une porte dérobée utilise pour se réinstaller.

wp cron event list
9

Mettre à jour, puis changer les mots de passe une seconde fois

Mettez à jour WordPress, les extensions et les thèmes, supprimez ceux qui sont désactivés, activez la double authentification sur les comptes administrateurs. Changez ensuite tous les mots de passe une seconde fois : ceux de la première étape ont pu être interceptés pendant le nettoyage.

Où se cachent les portes dérobées

Une porte dérobée est un petit bout de code qui redonne l'accès à l'attaquant après votre nettoyage. Elle est rarement là où l'infection se voit. Les détails techniques sont dans notre guide webshells et portes dérobées.

EmplacementCe qu'on y trouveCe qui doit alerter
wp-content/uploads/Un fichier PHP déguisé en image ou rangé dans un dossier de dateAucun fichier PHP n'a sa place ici
wp-content/mu-plugins/Une extension « obligatoire » invisible dans la liste des extensionsTout fichier que vous n'avez pas installé
wp-config.phpUn include vers un fichier caché, du code ajouté en tête ou en finComparer avec wp-config-sample.php
.htaccess (tous les dossiers)Une redirection des visiteurs venant de Google, ou l'exécution de PHP dans uploadsToute règle que vous ne savez pas expliquer
functions.php, header.php, footer.phpDu code chargé sur chaque pageUn bloc obfusqué (base64, eval, gzinflate)
Base de donnéesUn administrateur inconnu, un script dans un widget, une tâche planifiéeDates de création, auteurs, contenus récents

Restaurer une sauvegarde : quand c'est la bonne option

Restaurer une sauvegarde est souvent le chemin le plus court, à trois conditions. Elle doit dater d'avant l'infection, ce qui suppose de connaître la date de la première intrusion, souvent antérieure aux premiers symptômes. La faille par laquelle l'attaquant est entré doit être corrigée juste après la restauration, sinon il revient par le même chemin en quelques jours. Enfin, les mots de passe et les clés de sécurité doivent être changés, car la sauvegarde contient les anciens.

Pensez aussi à ce que vous perdez : commandes, commentaires et contenus publiés depuis la date de la sauvegarde. Sur une boutique, il est souvent préférable de nettoyer le site en place plutôt que de perdre des commandes.

Après le nettoyage

Google. Si Google affiche un avertissement, le rapport Problèmes de sécurité de la Search Console donne des exemples de pages touchées. Ne demandez le réexamen qu'une fois les modifications de l'attaquant supprimées, la faille corrigée et le site remis en ligne. Selon Google, le réexamen prend quelques jours pour un logiciel malveillant et jusqu'à plusieurs semaines pour du spam. La marche à suivre est détaillée dans « Ce site peut être piraté » : que faire.

Données personnelles. Si l'attaquant a pu lire des données de clients ou de membres (comptes, commandes, formulaires), le RGPD impose de notifier la violation à la CNIL dans les 72 heures après en avoir pris connaissance, et d'informer les personnes concernées si le risque pour elles est élevé (articles 33 et 34 du RGPD).

Surveillance. Une porte dérobée oubliée se manifeste généralement dans les jours qui suivent. Rescannez le site au bout d'une semaine puis d'un mois, et appliquez les mesures du guide de durcissement de WordPress ou de notre checklist en 10 points.

# Clés de sécurité neuves pour wp-config.php (générateur officiel)
curl -s https://api.wordpress.org/secret-key/1.1/salt/

Nettoyer soi-même ou se faire aider

Ce guide suffit si vous êtes à l'aise avec le FTP et la base de données, et si le site n'est pas critique. Faites appel à quelqu'un si le site a déjà été réinfecté après un premier nettoyage, s'il s'agit d'une boutique, si vous n'avez pas de sauvegarde, ou si vous n'avez plus accès à l'administration. Notre Nettoyage accompagné suit exactement ces étapes, au forfait de 249 € net, avec une sauvegarde vérifiée avant toute action et une mise en quarantaine réversible plutôt que des suppressions.

Savoir ce qui est infecté avant de nettoyer

Le scan unique analyse les fichiers et une partie de la base de votre WordPress, et classe chaque élément en menace confirmée, à vérifier ou informatif. Si une menace est confirmée, le Nettoyage accompagné (249 €) remet le site en état pour vous : sauvegarde vérifiée, quarantaine réversible et remplacement par les versions officielles.

Paiement unique, sans abonnement. Il faut créer un compte et installer sur le site notre extension de connexion, qui fonctionne en lecture seule. Le scan ne vérifie ni le serveur ni les secrets : ces étapes restent à faire.