Scanner un WordPress à la recherche de malware

Outils en ligne, plugins, inspection manuelle : comment scanner un WordPress infecté et ce qu'aucun scanner ne voit.

Par WP-Detox 8 min de lecture
Loupe révélant des malwares cachés dans les pages d'un site WordPress

« Scanner mon site » sonne comme un geste unique, du genre passer un antivirus sur un ordinateur. Sauf qu’il n’existe pas un seul scan WordPress. Il en existe trois familles, qui regardent des choses différentes depuis des endroits différents. Un scanner externe voit ce que voit Google. Un plugin de sécurité fouille les fichiers du serveur. La vérification manuelle compare votre installation à une référence connue. Chacun a ses angles morts, et c’est en les combinant qu’on obtient un vrai diagnostic. Voici comment scanner sérieusement, et pourquoi un scan « propre » ne prouve jamais qu’un site l’est.

Famille 1 : les scanners externes, ce que voit un visiteur

Ces outils chargent vos pages depuis l’extérieur, comme le ferait un navigateur ou le robot de Google. Aucun accès à vos fichiers : ils n’analysent que la sortie publique du site.

Les plus utiles :

  • Sucuri SiteCheck : vous entrez l’URL, il charge le site et signale les redirections suspectes, le contenu injecté visible, le JavaScript malveillant et la présence sur des listes noires.
  • VirusTotal : soumettez l’URL, il agrège le verdict de dizaines de moteurs antivirus et services de réputation.
  • Google Safe Browsing : tapez https://transparencyreport.google.com/safe-browsing/search et entrez votre domaine pour savoir si Google considère votre site comme dangereux. C’est ce statut qui déclenche l’écran rouge d’avertissement dans Chrome.

Ce qu’ils détectent bien

Les scanners externes sont bons sur tout ce qui est visible côté visiteur : une redirection vers un site de casino, un script injecté dans le <head>, une page truffée de spam, une alerte de blacklist. Si votre site renvoie ses visiteurs ailleurs ou affiche du contenu que vous n’avez jamais écrit, ils le repèrent vite.

Leur angle mort

Ils sont aveugles aux fichiers du serveur. Une backdoor PHP planquée dans wp-content/uploads, un compte admin pirate, un code qui ne se déclenche que pour le robot de Google (cloaking) ou seulement à certaines heures : rien de tout ça n’apparaît à un scanner externe qui charge votre page d’accueil à un instant T. Un site peut afficher « aucune menace détectée » côté visiteur et rester profondément compromis sur le serveur.

Famille 2 : les plugins de scan, ce qui se passe sur le serveur

Ici, on change de point de vue. Un plugin de sécurité s’installe dans WordPress et inspecte les fichiers depuis l’intérieur. Il lit le disque, compare, cherche des motifs suspects.

Les références :

  • Wordfence : compare les fichiers du cœur, des plugins et des thèmes à leurs versions officielles, et cherche des signatures de malwares connues.
  • MalCare : scanne sur ses propres serveurs (pour ne pas alourdir le site) et repère du code malveillant que les scans à base de signatures ratent parfois.
  • Le scanner Sucuri (l’extension, distincte de SiteCheck) : vérifie l’intégrité des fichiers et surveille les modifications.

Ce qu’ils détectent bien

Un plugin voit ce que l’externe ne voit jamais : un fichier du cœur modifié, un .php étranger dans uploads, une signature de backdoor connue, un changement récent inattendu. Pour une première passe sur le serveur sans accès SSH, ça rend service. C’est souvent l’outil qui confirme une intuition quand vous cherchez à savoir si votre WordPress est piraté.

Leur angle mort

Le piège est structurel : le plugin tourne à l’intérieur du site infecté. Si le pirate contrôle déjà le serveur, il peut masquer ses fichiers au scanner, exclure ses propres chemins, ou désactiver l’extension en douce. Et comme ces outils s’appuient largement sur des signatures, une backdoor obfusquée ou inédite passe sous le radar. Les faux positifs arrivent aussi : un plugin légitime qui utilise base64_decode pour de bonnes raisons peut être signalé à tort. Un scan plugin « propre » rassure, il ne prouve rien.

Famille 3 : l’inspection manuelle, la vérification de référence

C’est l’approche la plus fiable, parce qu’elle ne cherche pas à reconnaître le mal : elle vérifie que le bien est intact. Le principe est simple : comparer votre installation à une version connue comme propre, puis traquer ce qui dépasse.

Vérifier l’intégrité du cœur avec WP-CLI

Si vous avez un accès SSH et WP-CLI, une seule commande compare tous les fichiers du cœur WordPress à leurs sommes de contrôle officielles :

wp core verify-checksums

Tout fichier modifié, ajouté ou manquant dans le cœur remonte aussitôt. C’est la méthode la plus rapide pour savoir si le cœur de WordPress a été altéré, et elle ne dépend d’aucune base de signatures.

Repérer les fichiers récemment modifiés

Si vous connaissez la date approximative de l’intrusion, listez les fichiers PHP modifiés sur les quinze derniers jours :

find . -name '*.php' -mtime -15 -ls

Un fichier du cœur ou d’un plugin modifié récemment, alors que vous n’avez rien touché, est un signal fort.

Chercher les motifs de code malveillant

Le code de backdoor est presque toujours obfusqué. Quelques fonctions reviennent constamment et se cherchent en une commande :

grep -rEl "eval\(|base64_decode\(|gzinflate\(|str_rot13\(" wp-content/

eval( exécute une chaîne comme du code PHP, base64_decode( décode une charge utile cachée. Quand les deux se trouvent dans un fichier sans commentaires ni en-tête, le doute n’est plus vraiment permis. Pour le détail des cachettes et des motifs, voyez notre guide pour trouver et supprimer une backdoor.

Son angle mort

L’inspection manuelle demande un accès serveur, du temps, et l’œil pour distinguer un vrai positif d’un faux. Elle reste faillible, aussi : un grep ne capture pas une obfuscation qu’il ne connaît pas, et une date de modification peut être falsifiée pour faire passer un fichier pour ancien.

Quel scan pour quel cas

Inutile de tout lancer à l’aveugle. Selon ce que vous constatez :

  • Vos visiteurs sont redirigés, ou Google affiche une alerte : commencez par un scanner externe (Sucuri SiteCheck + statut Safe Browsing). C’est le plus rapide pour confirmer un problème visible.
  • Tout semble normal en façade mais vous avez un doute (un fichier bizarre en FTP, un comportement étrange) : un plugin de scan côté serveur, puis une vérification des checksums.
  • Vous voulez un verdict sérieux avant de nettoyer : la vérification manuelle du cœur (wp core verify-checksums) est incontournable, c’est la seule qui ne dépend d’aucune signature.

La limite que tous les scanners partagent

Voici ce que peu d’outils disent franchement : un scan « propre » ne prouve pas qu’un site est propre.

Les scanners externes ne voient pas le serveur. Les plugins tournent dans le site infecté et reposent sur des signatures qu’une backdoor obfusquée ou inédite contourne. Même l’inspection manuelle ne capture que ce qu’elle sait chercher. Aucune des trois familles ne garantit à elle seule qu’il ne reste rien.

Une backdoor bien faite est conçue pour ça : passer les scans. Fragmentée sur plusieurs fichiers inoffensifs pris séparément, encodée d’une façon non standard, ou planquée dans la base de données plutôt que dans les fichiers, elle survit à un scanner qui cherche des signatures connues.

En pratique, ne vous fiez jamais à un seul outil. Croisez les trois angles : un scan externe pour le côté visiteur, un scan serveur pour les fichiers, une vérification des checksums pour l’intégrité du cœur. Trois verdicts « rien à signaler » valent bien mieux qu’un seul. Et si le moindre signe persiste (du spam qui réapparaît, une redirection intermittente, des comptes inconnus), partez du principe que quelque chose a échappé au scan, pas que le site est sain.

FAQ

Un scan en ligne suffit-il à savoir si mon site est infecté ? Non. Un scanner externe ne voit que la sortie publique du site : redirections, contenu injecté, blacklist. Il est aveugle aux fichiers du serveur, donc à la plupart des backdoors. Il faut le compléter par un scan côté serveur et une vérification de l’intégrité du cœur.

Pourquoi mon plugin de sécurité ne trouve rien alors que le site est clairement piraté ? Parce que le plugin tourne à l’intérieur du site infecté et s’appuie sur des signatures connues. Un pirate qui contrôle le serveur peut masquer ses fichiers, et le code obfusqué ou inédit échappe aux signatures. Un scan plugin négatif n’est pas une preuve d’innocence.

Comment vérifier les fichiers du cœur WordPress moi-même ? Avec un accès SSH et WP-CLI, la commande wp core verify-checksums compare tous les fichiers du cœur à leurs sommes de contrôle officielles et signale le moindre écart. C’est la vérification la plus fiable, car elle ne dépend d’aucune base de signatures.

Un scan « aucune menace détectée » veut-il dire que mon site est propre ? Pas nécessairement. Aucun scanner ne garantit l’absence totale de menace, surtout face à une backdoor obfusquée ou fragmentée. Si des symptômes persistent malgré un scan propre, considérez que quelque chose a été manqué et poussez l’inspection plus loin.


Chez WP-Detox, on ne se contente pas d’un scan : on croise les trois angles (externe, serveur, intégrité du cœur), justement parce qu’aucun outil seul ne suffit. On cherche ce que les scanners automatiques ratent, on remplace les fichiers au lieu de leur faire confiance, et on régénère tous les accès. Le scan est gratuit, le nettoyage prend environ 30 minutes, c’est 149 € HT, remboursé si le site n’est pas propre. Pour la vue d’ensemble, commencez par le guide complet quand WordPress est piraté.

À lire ensuite