La plupart des gens nettoient un site piraté, constatent que le spam a disparu et passent à autre chose. Une semaine plus tard, il est de retour. La cause est souvent une porte dérobée : un petit morceau de code que l'attaquant a planté pour pouvoir revenir à volonté, quoi que vous ayez supprimé. Si vous venez de nettoyer un site, ou si la même infection revient sans cesse, c'est peut-être l'étape que vous avez manquée.

Avant de chercher : faites une sauvegarde complète du site tel qu'il est maintenant, fichiers et base de données. C'est une preuve, et elle vous permet d'annuler une erreur. Si vous n'avez pas encore confirmé que le site est piraté, commencez par la vérification en cinq minutes.

Ce qu'est une porte dérobée

Une porte dérobée est tout moyen de rentrer dans un site sans passer par la connexion normale. Ce peut être un fichier qui accepte les commandes de l'attaquant, un compte administrateur supplémentaire, une tâche planifiée qui télécharge de nouveaux malwares ou quelques lignes cachées dans un fichier légitime. Elles ont un but commun : survivre à votre nettoyage.

C'est pourquoi supprimer seulement les pages de spam ou le script de redirection répare rarement un piratage. Ce sont les symptômes. La porte dérobée est ce qui permet à l'attaquant de garder le contrôle.

Où se cachent les portes dérobées

Les attaquants choisissent des endroits qui paraissent normaux ou que l'on ouvre rarement. Voici les plus courants :

  • Le dossier uploads. Il ne doit contenir que des médias. Un fichier PHP dans wp-content/uploads est presque toujours illégitime, et des noms comme image.jpg.php sont un déguisement courant.
  • Le dossier des plugins « must-use ». Les fichiers de wp-content/mu-plugins se chargent à chaque requête et n'apparaissent pas dans la liste normale des plugins.
  • Des plugins et thèmes factices ou modifiés. Un dossier au nom crédible que vous n'avez jamais installé, ou des lignes ajoutées à la fin de functions.php dans votre thème actif.
  • Les dossiers du cœur de WordPress. Un fichier étranger dans wp-includes ou wp-admin, souvent avec un nom qui ressemble à celui d'un fichier du cœur.
  • wp-config.php. Du code placé avant la première ligne ou après la dernière.
  • Les fichiers de configuration du serveur. Un réglage auto_prepend_file dans .user.ini ou php.ini exécute un fichier avant chaque page. Des règles injectées dans .htaccess sont une autre méthode favorite.
  • Des comptes administrateurs supplémentaires. Un administrateur que vous n'avez pas créé, parfois avec une adresse e-mail qui ressemble à une partie de votre propre domaine.
  • Les tâches planifiées. Un événement cron WordPress qui appelle une fonction inconnue peut recréer une porte dérobée supprimée, selon un calendrier.
  • La base de données. Du code stocké dans une option ou un article, avec un petit chargeur ailleurs qui l'exécute. Une analyse de fichiers ne le voit jamais.

Comment chercher les portes dérobées

Les commandes ci-dessous ne font que lire votre site. Lancez-les via SSH depuis le dossier WordPress, généralement public_html. Elles nécessitent WP-CLI, que la plupart des hébergeurs gérés incluent.

1. Comparer les fichiers du cœur et des plugins avec les copies officielles

wp core verify-checksums
wp plugin verify-checksums --all

Tout fichier signalé comme modifié, ou comme ne devant pas exister, mérite un coup d'œil. Les plugins premium qui ne sont pas sur wordpress.org ne peuvent pas être vérifiés de cette façon.

2. Chercher des fichiers PHP là où il ne devrait y en avoir aucun

find wp-content/uploads -name "*.php"
ls -la wp-content/mu-plugins

Chaque résultat dans uploads demande une explication. Tout élément dans mu-plugins que vous n'avez pas ajouté vous-même est un signe d'alerte fort.

3. Vérifier ce qui a changé récemment

find . -type f -name "*.php" -mtime -14

Comparez la liste avec l'historique de vos mises à jour. Un fichier modifié un jour où vous n'avez rien fait, surtout dans un dossier de plugin que vous n'avez jamais touché, mérite d'être ouvert.

4. Vérifier les comptes et les tâches planifiées

wp user list --role=administrator
wp cron event list

Cherchez un administrateur que vous ne reconnaissez pas et des événements cron dont vous ne pouvez pas expliquer le nom.

5. Lire les fichiers de configuration

cat .htaccess
cat .user.ini
head -n 20 wp-config.php

Le fichier .htaccess ne doit contenir que les règles WordPress standard et ce que vous avez ajouté volontairement. .user.ini ne doit pas exister, sauf si votre hébergeur ou vous l'avez créé. Dans wp-config.php, rien ne doit apparaître avant la ligne d'ouverture.

6. Chercher des fonctions suspectes, puis lire le fichier

grep -RIl --include="*.php" -E "eval\(|base64_decode\(" wp-content

Ces fonctions apparaissent aussi dans de nombreux plugins légitimes, donc une correspondance est une piste, pas une preuve. Ouvrez chaque fichier et lisez-le. Une porte dérobée combine généralement une telle fonction avec des données provenant de la requête du visiteur, ce qu'un plugin légitime fait rarement.

Ce qu'un scanner peut et ne peut pas vous dire

Un scanner qui compare à des motifs de malwares connus détecte beaucoup de portes dérobées, mais pas les portes sur mesure, et il ne peut pas prouver qu'un site est propre. Considérez un résultat propre comme une bonne nouvelle, pas comme une garantie, et continuez à vérifier dans le temps.

Que faire quand vous en trouvez une

  1. Ne la supprimez pas simplement. Copiez le fichier dans un dossier de quarantaine en dehors de la racine web pour pouvoir le lire plus tard. Retirez-le ensuite du site.
  2. Fermez la voie par laquelle elle est entrée. Une porte dérobée est plantée par un moyen, généralement un plugin obsolète, un mot de passe volé ou une connexion d'hébergement faible. Si vous laissez cela ouvert, l'attaquant en plante une autre.
  3. Changez tous les identifiants. Hébergement, SFTP et clés SSH, mot de passe de la base de données, chaque administrateur WordPress et les clés de sécurité dans wp-config.php. Faites-le dans cet ordre.
  4. Remplacez, ne réparez pas. Réinstallez le cœur, les plugins et les thèmes à partir de copies saines, comme décrit dans Comment supprimer un malware d'un site WordPress.
  5. Vérifiez à nouveau. Refaites les commandes ci-dessus après 24 heures et après une semaine. Un fichier ou un administrateur qui revient signifie que quelque chose a été manqué.

Si le site contient des données clients, ou si l'infection revient malgré tout cela, un spécialiste peut reconstruire le site à partir de sources saines. C'est plus lent, mais c'est le moyen le plus sûr de supprimer une porte dérobée introuvable.

Comment SiftWP vous aide

SiftWP effectue chaque semaine des vérifications comme celles-ci via SSH, sans aucun plugin sur votre site. Il examine l'intégrité des fichiers du cœur, les nouveaux fichiers dans uploads/, les changements de la base de données et les motifs de malwares, et un agent IA examine chaque constat. Les fichiers suspects sont mis en quarantaine, jamais supprimés, et tout ce qui est risqué attend votre accord.

Commencez avec des crédits gratuits, sans carte bancaire