- Isoler immédiatement le site (mode maintenance ou suspension)
- Changer TOUS les mots de passe sans exception
- Scanner et identifier les fichiers malveillants
- Nettoyer ou restaurer depuis une sauvegarde saine
- Identifier la faille d'entrée et colmater définitivement
Comment savoir si votre site est compromis
Un site WordPress hacké ne se manifeste pas toujours de façon évidente. Les attaquants modernes cherchent à rester discrets le plus longtemps possible pour exploiter les ressources du serveur (crypto-mining, spam, phishing) sans que vous ne vous en rendiez compte.
Signes visibles
- Le site redirige vers un site inconnu ou affiche des pages de phishing
- Du contenu spam (liens vers des pharmacies, casinos, sites adultes) apparaît dans les pages
- Une alerte "Site trompeur" de Google Chrome s'affiche aux visiteurs
- Votre hébergeur a suspendu le compte ou envoyé une alerte de malware
Signes discrets (à vérifier activement)
- Des comptes administrateurs WordPress que vous n'avez pas créés
- Des fichiers PHP dans des dossiers qui ne devraient en contenir aucun (
/uploads/,/images/) - Google Search Console signale des URLs inconnues indexées sur votre domaine
- Des pics inexpliqués de trafic ou de charge serveur
Urgence : Chaque minute compte. Un site compromis peut être utilisé pour attaquer d'autres sites, envoyer du spam ou héberger du phishing, ce qui entraîne le blacklistage de votre domaine et de votre IP d'hébergement.
Étape 1 : Isoler le site immédiatement
Avant toute chose, empêchez les visiteurs d'être exposés au contenu malveillant et limitez les dégâts potentiels.
- Passer en mode maintenance : installez un plugin de maintenance ou ajoutez un fichier
.maintenanceà la racine WordPress - Révoquer tous les accès FTP/SSH : changez les mots de passe immédiatement, ou demandez à votre hébergeur de suspendre l'accès
- Prendre une snapshot du serveur : avant de nettoyer quoi que ce soit, conservez une copie forensique pour analyser l'attaque plus tard
# Créer un fichier maintenance WordPress (à la racine)
echo "" > .maintenance
# Ou bloquer l'accès au public via Nginx
location / {
return 503;
}
Étape 2 : Changer tous les mots de passe
C'est non négociable. Tous les mots de passe, sans exception, doivent être changés car vous ne savez pas encore comment l'attaquant est entré : il a peut-être accès à plusieurs vecteurs.
- Mot de passe WordPress admin : tous les comptes, pas seulement le vôtre
- Mot de passe base de données MySQL : et mettre à jour
wp-config.phpen conséquence - Mot de passe FTP/SFTP : via le panel de votre hébergeur
- Mot de passe du panel d'hébergement (cPanel, Plesk, etc.)
- Clés secrètes WordPress : les régénérer dans
wp-config.phpinvalide toutes les sessions actives
# Régénérer les clés secrètes WordPress
# Allez sur https://api.wordpress.org/secret-key/1.1/salt/
# Et remplacez les lignes correspondantes dans wp-config.php
define('AUTH_KEY', 'nouvelle-clé-générée-ici');
define('SECURE_AUTH_KEY', 'nouvelle-clé-générée-ici');
define('LOGGED_IN_KEY', 'nouvelle-clé-générée-ici');
define('NONCE_KEY', 'nouvelle-clé-générée-ici');
Étape 3 : Scanner et identifier les fichiers malveillants
Il faut maintenant cartographier l'étendue de l'infection. Plusieurs approches complémentaires :
Via un plugin de sécurité (si l'admin est encore accessible)
Wordfence est le scanner le plus complet pour WordPress. Il compare chaque fichier de votre installation avec les fichiers officiels de WordPress.org et signale les différences.
# Via WP-CLI (en ligne de commande)
wp plugin install wordfence --activate
wp wordfence scan --type=full
Via le serveur directement
# Trouver les fichiers PHP modifiés récemment (7 derniers jours)
find /var/www/html -name "*.php" -mtime -7 -ls
# Chercher les patterns typiques de backdoors
grep -r "eval(base64_decode" /var/www/html --include="*.php"
grep -r "system(" /var/www/html --include="*.php"
grep -r "exec(" /var/www/html --include="*.php"
grep -r "passthru(" /var/www/html --include="*.php"
# Fichiers PHP dans le dossier uploads (toujours suspect)
find /var/www/html/wp-content/uploads -name "*.php"
Backdoors cachées : Les attaquants insèrent souvent du code dans des fichiers légitimes (functions.php, wp-config.php) et créent des fichiers avec des noms inoffensifs (wp-cache.php, index.php dans /uploads/). Vérifiez tous les fichiers modifiés, pas seulement les fichiers inconnus.
Étape 4 : Nettoyer ou restaurer
Option A : Restaurer depuis une sauvegarde saine (recommandé)
Si vous avez une sauvegarde antérieure à l'infection (vérifiez la date de compromission dans les logs), la restauration est plus fiable qu'un nettoyage manuel.
- Restaurez les fichiers WordPress depuis la sauvegarde
- Restaurez la base de données depuis la sauvegarde
- Mettez à jour WordPress, tous les plugins et thèmes immédiatement après
- Supprimez les plugins et thèmes inutilisés
Option B : Nettoyage manuel
- Supprimez tous les fichiers PHP inconnus identifiés dans le scan
- Réinstallez WordPress core en écrasant les fichiers existants
- Réinstallez chaque plugin et thème depuis les sources officielles
- Nettoyez la base de données des contenus et comptes malveillants
# Réinstaller WordPress core sans toucher à wp-content et wp-config
wp core download --force
# Supprimer les comptes admin inconnus
wp user list --role=administrator
wp user delete ID_SUSPECT --reassign=ID_ADMIN_LEGITIME
# Nettoyer les options WordPress corrompues
wp option get siteurl
wp option get home
Étape 5 : Identifier et colmater la faille d'entrée
C'est l'étape la plus importante et la plus souvent sautée. Sans identifier comment l'attaquant est entré, votre site sera re-compromis dans les heures qui suivent.
Analyser les logs d'accès
# Chercher les requêtes POST suspectes dans les logs Apache/Nginx
grep "POST" /var/log/apache2/access.log | grep -v "wp-login\|wp-cron\|xmlrpc" | tail -100
# Chercher les accès à des fichiers PHP dans des répertoires suspects
grep "\.php" /var/log/nginx/access.log | grep "uploads\|images\|cache" | tail -50
# Identifier l'IP d'attaque la plus fréquente
awk '{print $1}' /var/log/apache2/access.log | sort | uniq -c | sort -rn | head -20
Vecteurs d'entrée les plus courants
- Plugin ou thème vulnérable : vérifiez les CVE récents pour vos plugins via WPScan
- Mot de passe admin faible : credential stuffing ou brute force sur wp-login.php
- Upload de fichier malveillant : formulaire de contact ou plugin d'upload mal configuré
- Injection SQL : via un plugin vulnérable, accès direct à la base
- Hébergement partagé compromis : un autre site sur le même serveur était infecté
Évitez la prochaine fois avec CyberGuard
CyberGuard surveille votre site WordPress en temps réel : détection d'injections, blocage des tentatives de connexion brute force, alerte immédiate en cas de comportement suspect, avant que l'infection ne s'installe.
Protéger mon site maintenant →