Supprimer malware WordPress : sécuriser le FTP et l’accès au serveur

Quand un WordPress est compromis, on pense d’abord à la page d’accueil. Pourtant, dans beaucoup de cas, le vrai point de bascule se situe ailleurs, dans les accès. Un compte FTP trop permissif, des identifiants réutilisés, un serveur accessible sans garde-fous, et le “malware” n’a même pas besoin d’être sophistiqué. Il lui suffit d’obtenir un canal d’écriture, puis de transformer l’infrastructure à petit bruit.

J’ai déjà vu des sites “infectés” dont la trace initiale était en réalité un accès oublié. Un ancien développeur avait conservé des identifiants FTP, ou un script d’automatisation fonctionnait encore, mais avec des droits trop larges. Résultat, un webshell ou des scripts modifiés finissaient par s’exécuter à la moindre visite. La suppression du contenu malicieux est indispensable, mais sans sécuriser l’accès, on supprime un feu pour en rallumer un autre.

Ce billet se concentre sur deux axes très concrets: comment avancer pour supprimer malware WordPress, et surtout comment sécuriser le FTP et l’accès au serveur afin d’empêcher le retour. On parlera aussi des pièges fréquents, des compromis, et de ce que j’estime raisonnable de vérifier selon les scénarios.

Distinguer l’attaque d’un incident “accès”

La première erreur que je vois chez les équipes, c’est de confondre la cause et le symptôme. Oui, vous trouverez des fichiers modifiés dans WordPress, parfois même des URLs externes dans des scripts. Mais avant de lancer une chasse aux fichiers, il faut s’assurer que le vecteur d’entrée est compris.

Un malware WordPress peut arriver via plusieurs portes, par exemple un plugin vulnérable, un mot de passe faible, une faille applicative, ou une configuration exposée. Mais quand le sujet touche explicitement le FTP, la question devient presque mécanique: qui peut déposer des fichiers sur le serveur, et avec quel niveau de droits?

Si votre FTP permet l’écriture dans des répertoires sensibles, si le compte FTP est générique, ou si les identifiants sont partagés, vous augmentez fortement la surface d’attaque. Un attaquant n’a pas besoin de déchiffrer des bases de données quand il peut déposer une charge utile dans un dossier accessible par le web.

À ce stade, j’aime poser un diagnostic simple: “Le site était-il en capacité d’être modifié par des comptes dont on ne maîtrise plus la liste et les habitudes?” Si la réponse est floue, c’est souvent là que se cache le problème.

Les signaux qui orientent vers le FTP (ou l’accès serveur)

Certains indices ne prouvent pas l’intrusion, mais ils orientent. Une attaque par script déployé via FTP ou via un accès serveur laisse souvent des traces qui ressemblent à du “dépôt” plutôt qu’à un “hack de logique applicative”.

Voici les signaux les plus utiles, ceux que j’ai appris à regarder en premier, parce qu’ils donnent une direction sans exiger d’être expert forensique.

    Fichiers nouvellement créés, ou dont les dates ne collent pas avec votre planning de publication (scripts dans des dossiers inattendus, fichiers PHP “utilitaires” ajoutés à la volée). Identifiants FTP utilisés pour des horaires incohérents, ou comptes FTP inconnus dans le panneau d’hébergement. Présence de fichiers dont le nom ressemble à de l’obfuscation, parfois avec des extensions PHP ou des “stubs” légers. Modification d’éléments de config ou de comportements WordPress qui n’ont rien à voir avec vos thèmes et plugins (exécution conditionnelle, redirections, ajout de code dans des fichiers racine).

Si plusieurs de ces points sont présents, l’axe “supprimer malware WordPress” doit être accompagné d’un “bloquer le canal d’entrée”, sinon la compromission revient avec une régularité frustrante.

Avant de toucher au serveur: couper l’urgence, garder des preuves

Quand on suspecte une compromission, on a deux objectifs qui se contredisent parfois: arrêter le mal et conserver suffisamment d’indices pour ne pas travailler à l’aveugle. Le bon dosage dépend de la criticité du site et de votre capacité à analyser.

Dans une situation de production, je commence souvent par isoler le site pour éviter l’exécution continue. Une mise en maintenance courte peut suffire, ou une règle de pare-feu temporaire qui réduit l’exposition. Le but est simple: limiter les visites pendant que vous inspectez.

Ensuite, je veille à conserver les éléments qui font gagner du temps. Sans faire de l’enquête au sens strict, prenez des captures de l’état des fichiers et des logs pertinents. Si vous ne le faites pas, vous finirez par devoir refaire une relecture de tout, ce qui augmente le risque d’oublier un fichier modifié.

Concrètement, retenez cette règle d’atelier: avant toute suppression massive, sauvegardez, archivez et documentez. Une archive propre, ça peut servir plus tard quand vous devez prouver la chronologie ou remonter une action.

Supprimer malware WordPress, oui, mais de façon contrôlée

Supprimer malware WordPress n’est pas une opération “tout effacer puis réinstaller” systématiquement. Sur certains sites, réinstaller entièrement peut être rapide et propre, mais ce n’est pas toujours le meilleur compromis. Par exemple, si vous avez une base de données volumineuse, ou des données métier à récupérer, “tout casser” puis restaurer peut être plus risqué que procéder fichier par fichier.

J’ai une approche pragmatique, basée sur le risque et le temps:

1) Si vous avez une sauvegarde récente et fiable de l’ensemble (fichiers et base), la réinstallation via restauration est souvent la voie la plus sûre. 2) Si la sauvegarde n’est pas fiable, ou si vous devez comprendre la contamination, une analyse ciblée est préférable, au moins pour identifier comment les charges malicieuses s’exécutent.

Le point central, c’est l’identification du point d’exécution. Souvent, le malware ne se contente pas d’être “présent”, il cherche à agir au moment où WordPress ou le serveur traite une requête.

Ne vous fiez pas uniquement à l’apparence des fichiers. J’ai déjà vu des charges utiles minifiées, masquées par des structures “normales” et des espaces qui rendent la lecture trompeuse. Par contre, vous pouvez repérer des motifs typiques comme l’usage de fonctions douteuses, des inclusions conditionnelles, ou des appels à des URL externes.

Une fois les fichiers suspects localisés, vous passez à la suppression ou au remplacement. Dans une approche propre, vous remplacez aussi les fichiers WordPress “stock” par des versions connues et vérifiées, et vous réinitialisez les thèmes et plugins à leurs états d’origine, plutôt que de “nettoyer au pinceau”. Le nettoyage partiel peut laisser des morceaux en place.

Restaurer WordPress sans rouvrir la porte

Quand on revient sur une installation, un piège revient souvent: remplacer des fichiers, changer un mot de passe, puis réactiver des accès oubliés. C’est là que la sécurisation du FTP et de l’accès serveur devient le cœur du problème, pas une section “bonus”.

Si le malware utilisait un chemin d’écriture, il suffit qu’il retrouve le même compte, le même répertoire, ou le même schéma d’authentification. Dans ce cas, vous pouvez supprimer le malware une semaine puis le revoir deux jours plus tard, comme si votre intervention n’avait servi à rien.

J’ai vu des cas où le site revenait “infecté” après restauration. La cause était simple: un compte FTP avait été reconfiguré automatiquement par l’hébergement, mais avec les mêmes identifiants. Ou bien un script d’intégration continue déposait encore des fichiers, sans contrôle du contenu et sans signature. Tant que ces systèmes n’étaient pas verrouillés, la restauration ne faisait que remettre à zéro, pas casser le mécanisme d’intrusion.

La règle que je recommande est claire: une restauration doit s’accompagner d’une rotation des secrets et d’une revue des accès. Sinon, vous “remontez” une maison, mais vous laissez la clé sous le paillasson.

Sécuriser le FTP: l’enjeu, les choix et les compromis

Le FTP est un protocole qui, historiquement, transporte l’authentification de manière non chiffrée. Aujourd’hui, dans la plupart des environnements, on préfère SFTP (sur SSH) ou FTPS, selon ce que votre hébergeur supporte. Si vous êtes encore en FTP “classique”, je considère cela comme un risque significatif.

Même en SFTP, vous pouvez rester vulnérable si les droits sont trop larges ou si les identifiants ne sont pas gérés correctement. La sécurité n’est pas uniquement une question de protocole, c’est aussi une question de granularité.

image

Avant de modifier quoi que ce soit, vérifiez ce que vous avez réellement en place:

    Plusieurs comptes FTP existent-ils, ou un compte générique sert à tout le monde? Les comptes ont-ils accès à la racine complète du serveur ou seulement à un sous-répertoire? Des comptes sont-ils inactifs mais conservés par habitude? Les mots de passe sont-ils uniques et non partagés?

Sur un site WordPress, je privilégie un modèle “moindre privilège”. Les comptes d’écriture ne devraient pas avoir accès à des zones inutiles. Par exemple, les processus qui ne font que déposer des fichiers dans wp-content ne devraient pas toucher à la configuration serveur, aux logs, ou aux répertoires temporaires sensibles. Dans une logique de réduction de surface, c’est souvent le point qui change la donne.

Rotation des identifiants: quand et quoi changer

Après suspicion de compromission, il faut considérer que certains secrets ont pu être vus, réutilisés, ou https://gardewp.fr/nettoyage-malware-wordpress/ détournés. La rotation des identifiants n’est pas une punition, c’est un reset de confiance.

Je recommande généralement de changer:

    le mot de passe du compte WordPress, le mot de passe de l’utilisateur base de données, les clés API si elles existent, et les identifiants d’accès serveur, incluant FTP/SFTP.

Attention toutefois au compromis opérationnel. Si vous utilisez des outils automatisés, une rotation peut casser le déploiement. C’est normal, mais il faut le planifier, par exemple en coupant temporairement l’automatisation pendant la maintenance, puis en mettant à jour les secrets dans vos outils.

J’ai aussi vu des équipes qui changeaient uniquement le mot de passe WordPress. Résultat, le vecteur d’écriture restait identique, donc le malware revenait. Le bon réflexe consiste à traiter l’ensemble des chemins par lesquels quelqu’un peut déposer ou modifier du contenu.

Bonnes pratiques SFTP et droits d’écriture

Même si l’hébergeur vous propose une interface simple, la configuration réelle mérite d’être vérifiée. Les détails font la différence.

Par exemple, un compte SFTP peut avoir un accès limité au seul répertoire correspondant à votre site. Dans ce cas, la suppression du malware devient plus “durable” parce que la charge utile a moins de possibilités pour se déplacer, s’accrocher, ou redéposer du code ailleurs.

Autre point souvent négligé: les permissions UNIX. Si un compte peut écrire dans des dossiers où il ne devrait pas, et si ces dossiers sont exécutés par le serveur (PHP), l’impact d’une compromission explose. Le “moindre privilège” doit se traduire en droits système, pas uniquement en règles d’interface.

Enfin, pensez au modèle d’équipe. Si vous donnez un accès SFTP à trois personnes différentes, il faut savoir qui fait quoi, et surtout pouvoir désactiver une personne sans toucher aux autres. Un compte partagé rend la traçabilité impossible, et complique la rotation rapide des secrets.

Mettre l’accès serveur sous contrôle: SSH, comptes, et journalisation

Quand on parle d’accès au serveur, le sujet n’est pas seulement “qui a un mot de passe”. C’est aussi:

    comment on authentifie, comment on limite ce qui est exécuté, comment on détecte.

En général, vous voulez un accès SSH minimal, idéalement avec des clés plutôt qu’avec des mots de passe. Si votre hébergeur accepte des restrictions, activez-les: limitation par adresse IP, désactivation de l’accès pour des comptes inutiles, et journalisation suffisamment détaillée pour investiguer.

Je sais que certains hébergeurs rendent la main limitée. Dans ce cas, gardez votre énergie sur ce que vous contrôlez: les comptes et la configuration des accès (SFTP, FTP, web admin), la rotation des mots de passe, et la réduction des droits.

image

La journalisation est un vrai sujet. Une fois le site nettoyé, vous devez pouvoir répondre à deux questions: qui a écrit, et quand. Sans logs d’accès pertinents, vous risquez de découvrir la même faille plusieurs fois.

Exemple concret: une contamination revenue après nettoyage

Un cas typique que j’ai rencontré ressemble à ceci. Le site est “nettoyé” via suppression de quelques fichiers. Le contrôle superficiel passe, le site redevient accessible. Deux jours plus tard, mêmes symptômes, parfois à un niveau différent, redirect plus agressif ou redirections vers une page externe.

En creusant, on a découvert que l’accès FTP de l’ancien intervenant n’avait jamais été désactivé. Le mot de passe avait certes changé entre temps, mais l’ancien compte avait continué à fonctionner pour des raisons d’interface d’hébergement (recréation automatique, ou persistance dans une config). Le malware s’était re-déposé dans un répertoire, puis avait réactivé son comportement.

Ce qui a tout réglé n’a pas été “un nouveau scanner”. Ça a été la fermeture du canal d’écriture, avec:

    suppression de comptes FTP inutiles, rotation des identifiants, restriction de droits au strict nécessaire, et revue des automatisations de déploiement.

Le nettoyage avait été correct, mais incomplet. Le canal d’accès restait ouvert.

Protéger le site après suppression: durcir l’écosystème

Même si le sujet principal ici est le FTP et l’accès serveur, il faut rappeler un point. La suppression malware WordPress n’est pas seulement un “nettoyage”, c’est une remise en état sécurisée.

Dans la pratique, cela implique aussi de mettre WordPress, thèmes et plugins à jour, et surtout d’enlever ce qui n’est plus utilisé. Un plugin obsolète, c’est une autre porte, parfois indirecte: un attaquant obtient un shell via une faille applicative, puis utilise ensuite le FTP ou des chemins de dépôt pour amplifier.

Sans faire de liste interminable, retenez l’idée suivante: chaque composant ajouté augmente la surface d’attaque. Après incident, j’aime faire une purge et ne garder que ce qui est nécessaire, puis verrouiller les accès.

Vérifier sans se tromper: ce que vous devez observer après la remise en ligne

Une fois les fichiers nettoyés et les accès corrigés, il faut valider que vous ne rouvriez pas une exécution silencieuse. Les tests “visuels” ne suffisent pas toujours, car certains malwares agissent sur des conditions, comme certains user agents, un chemin précis, ou un moment particulier.

Je recommande d’observer plusieurs signaux:

    la stabilité du comportement sur plusieurs pages, l’absence de nouvelles écritures non attendues, et la cohérence des logs d’accès.

Si vous avez une instrumentation légère, gardez-la active pendant quelques jours. Parfois, un retour de malware se manifeste par une nouvelle vague d’uploads, souvent dans les mêmes répertoires.

Voici une petite checklist que j’utilise quand le site repasse en production, pour éviter le faux sentiment de sécurité:

    Vérifier que les comptes FTP/SFTP inutiles sont supprimés, et que seuls des comptes dédiés subsistent. Confirmer que les comptes d’écriture ont un accès limité au répertoire du site, pas à l’ensemble des fichiers. Contrôler que les identifiants WordPress et la base ont été remplacés, et que les mots de passe ne sont pas réutilisés. Revenir aux versions propres des thèmes et plugins (remplacement ou mise à jour), sans “patch au hasard”. Surveiller les logs d’accès et d’erreurs pendant 48 à 72 heures pour détecter une reprise d’écriture.

Cette séquence n’élimine pas toute possibilité de récidive, mais elle réduit fortement le risque immédiat et accélère la détection si quelque chose persiste.

Les erreurs qui font échouer la sécurisation (même bonne intention)

Quand on a déjà vécu un incident, on croit être prudent. Pourtant, certaines habitudes conduisent directement à l’échec.

La première erreur, c’est de “réinstaller” sans verrouiller l’accès. On remplace des fichiers, mais on garde les mêmes canaux d’écriture, et l’attaquant revient.

La deuxième erreur, c’est de changer uniquement un mot de passe. Si plusieurs secrets ont été exposés, ou si un compte technique continue de fonctionner, le risque reste entier.

La troisième erreur, c’est de faire confiance aux permissions sans les valider. Une interface peut sembler restreinte, mais les droits systèmes peuvent permettre plus qu’attendu.

Enfin, il y a le piège de l’outillage. Certaines automatisations de déploiement réinjectent des fichiers à partir d’un dépôt. Si un secret reste compromis, ou si le pipeline n’est pas contrôlé, vous pouvez ré-déployer du code non désiré.

Dans chacun de ces cas, la correction est moins “spectaculaire” que la suppression du malware, mais elle fait gagner la bataille sur le long terme.

Recommandation de méthode: une chronologie simple et efficace

Si vous devez organiser le chantier, je conseille une chronologie qui sépare l’action “stop” et l’action “durcir”. L’objectif est d’éviter de nettoyer puis de rouvrir sans vous en rendre compte.

Vous pouvez raisonner en trois phases: D’abord isoler et conserver des indices, ensuite nettoyer en remplaçant plutôt qu’en bricolant, et enfin verrouiller les accès, surtout FTP et serveur, puis surveiller.

Cette approche se tient même quand on manque de temps. Elle force à traiter la cause présumée (l’accès) et pas seulement l’effet visible (les fichiers modifiés).

Et si vous n’êtes pas sûr d’où vient l’intrusion?

Parfois, vous n’avez pas assez d’éléments pour attribuer l’intrusion à une faille spécifique. Dans ce cas, la sécurisation de l’accès est votre meilleure assurance, parce qu’elle s’applique quelle que soit la porte d’entrée initiale.

En pratique, vous réduisez les chances de réinfection en:

    supprimant les comptes inutiles, limitant les droits d’écriture, tournant les secrets, et en surveillant.

Pour le volet “supprimer malware WordPress”, vous pouvez combiner nettoyage avec remplacement des composants critiques. Par exemple, remplacer WordPress par une base saine, puis réinstaller uniquement ce qui est nécessaire. C’est parfois plus long, mais c’est souvent plus propre que d’espérer trouver chaque fragment.

Dernier point: documenter ce que vous avez fait

Après un incident, la mémoire devient fragile. Un mois plus tard, on ne sait plus exactement quel compte FTP avait été utilisé, si les logs ont été supprimés, ou quel mot de passe a été tourné. Or, pour gérer un éventuel retour, la précision change tout.

Je recommande de noter rapidement:

    les accès qui ont été modifiés, les comptes supprimés, la date de rotation, et les observations de logs.

Ce travail semble administratif, mais il vous évite une deuxième enquête au milieu d’un deuxième incident.

La suppression malware WordPress est une étape indispensable, mais elle n’a de valeur que si le canal d’accès est réellement fermé. Sécuriser le FTP, limiter les droits, supprimer les comptes inutiles, et verrouiller l’accès serveur, c’est ce qui transforme une opération de nettoyage en véritable reprise de contrôle. Si vous faites ces gestes avec méthode, vous réduisez la probabilité de récidive, et vous gagnez du temps au prochain incident, parce que vous aurez déjà construit un système plus résilient.