Comment réparer un site WordPress piraté ?
WordPress c’est sympa, c’est pratique, mais quand ça se fait pirater, c’est la galère. Mais pas de panique, je vais te montrer comment nettoyer tout ça et remettre ton site sur pieds.
Quels sont les symptômes d’un site piraté ?
Modifications inexplicables du site
- Contenu Altéré : Des articles modifiés, des liens douteux ajoutés, ou même des pages entières qui apparaissent ou disparaissent. C’est le signe classique d’une compromission. Check les révisions de tes articles pour repérer des modifications non-autorisées. Dans le cas du piratage par mots clés japonais, les pirates injectent du contenu SEO en japonais dans tes meta titles et descriptions. C’est vicieux parce que ça change pas forcément l’apparence de ton site, mais ça sabote ton SEO. Google commence à voir ton site comme une source de spam en japonais.
- Nouveaux Utilisateurs : Des comptes administrateurs ou éditeurs inconnus. Va direct dans
wp_users
etwp_usermeta
dans ta base de données pour voir si y’a des intrus. - Configurations Modifiées : Des changements dans tes fichiers
.htaccess
,wp-config.php
ou dans les options de la base de données. Un œil aguerri peut détecter des redirections suspectes ou des modifications dans les réglages de WordPress.
Performance en berne (surcharge du CPU)
- Chargement Lent : Si ton site met une éternité à charger, c’est peut-être dû à des scripts malveillants qui s’exécutent en arrière-plan. Utilise des outils comme GTmetrix ou Google PageSpeed Insights pour analyser les performances de ton site.
- Consommation Excessive de Ressources Serveur : Une utilisation anormale de la CPU ou de la mémoire sur ton hébergement peut indiquer une activité malveillante. Jette un œil aux logs de ton serveur pour déceler des anomalies.
Alertes de Sécurité
Notifications d’Antivirus
- Alertes Antivirus : Lorsque toi ou tes visiteurs recevez des notifications d’antivirus en accédant à ton site, c’est un indicateur clair d’une infection. Ces alertes peuvent signaler la présence de malwares, des scripts malveillants ou des tentatives de phishing. C’est une indication que ton site distribue, volontairement ou non, du contenu potentiellement dangereux
Avertissements de Navigateur
- Avertissements des Navigateurs : Les navigateurs comme Chrome et Firefox sont assez malins pour détecter et avertir les utilisateurs quand ils tombent sur un site compromis. Si ton site déclenche ces alertes, c’est un signe que quelque chose de pas net se trame dans les coulisses.
Blacklistage par Google
- Google bloque le site tant qu’il n’est pas réparé : Si Google blackliste ton site, tu seras averti via la Search Console Google (à condition que tu ais déjà enregistré ton site dedans). Ça veut généralement dire que ton site distribue des malwares ou se livre à du phishing. C’est le moment de passer en mode urgence, car si tu ne fais rien, ton site disparaîtra alors totalement des résultats de recherche.
Intervention de l’Hébergeur et site hors ligne
- Blocage par l’Hébergeur : Parfois, c’est ton hébergeur qui tire la sonnette d’alarme. Si Netcraft ou une autre autorité de cybersécurité informe ton hébergeur d’une activité suspecte, il peut bloquer ton serveur pour contenir la menace.
- Communication avec l’Hébergeur : Si ton hébergeur bloque ton site, entre en contact avec lui rapidement via le support par téléphone ou en ouvrant un ticket. Ils peuvent te fournir des infos sur la nature du problème et comment le résoudre. Parfois, ils peuvent même t’aider dans le processus de nettoyage, mais la, ça dépendra clairement de l’hébergeur.
Comment reconnaître un fichier malveillant injecté par le pirate, d’un fichier normal ?
Quand un pirate s’infiltre dans ton site, il peut laisser derrière lui des fichiers qui ressemblent à ceux que tu connais, mais avec une petite touche toxique. Alors, comment les repérer ?
Emplacement des Fichiers
Si tu trouves un fichier PHP là où tu devrais normalement avoir des images ou des médias, c’est suspect. C’est comme si tu trouvais un livre de cuisine dans la section des thrillers de ta bibliothèque. Ça colle pas.
Les Noms Énigmatiques
Des fichiers avec des noms bizarres ou qui imitent ceux de WordPress, mais avec une petite différence ? C’est souvent un indice que le fichier n’est pas là pour faire le bien.
Les Dates Qui Parlent
Un fichier que tu sais que tu n’as pas touché depuis des lustres, mais qui montre une date de modification récente, ça devrait te faire lever un sourcil. Attention, les dates peuvent aussi être manipulées dans certains cas.
Exemple de code malveillant injecté par un pirate
Imaginons. Tu ouvres un fichier PHP, et tu tombes sur quelque chose comme ça :
@eval(base64_decode("dW5jb2RlZCBzdHVmZg=="));
Pourquoi c’est louche ?
- L’utilisation d’
eval()
: C’est un peu la porte ouverte à toutes les fenêtres.eval()
exécute n’importe quel code PHP qu’on lui donne. Dans un fichier WordPress normal, c’est rare et risqué. - Le décodage Base64 : Voir
base64_decode()
est un drapeau rouge. C’est souvent utilisé pour cacher du code malveillant. Si tu vois ça, pose-toi des questions.
Contenu d’un fichier php piraté avec du code malveillant
Explication du code
- Fonction
zdagcytnxk
- Cette fonction convertit une chaîne hexadécimale en texte ASCII. Pour chaque paire de caractères dans la chaîne hexadécimale, elle les convertit en un caractère ASCII à l’aide de
chr(hexdec(...))
. - Utilisation : pour déchiffrer des chaînes de texte encodées en hexadécimal.
- Cette fonction convertit une chaîne hexadécimale en texte ASCII. Pour chaque paire de caractères dans la chaîne hexadécimale, elle les convertit en un caractère ASCII à l’aide de
- Fonction
tmwbizhkce
- Effectue l’opération inverse de
zdagcytnxk
. Elle prend une chaîne ASCII et la convertit en hexadécimal en utilisantdechex(ord(...))
. - Utilisation : pour encoder des textes en hexadécimal.
- Effectue l’opération inverse de
- Fonction
yrohkjacgq
- Cette fonction essaie d’ouvrir un fichier en mode écriture. Si
fopen
échoue, elle utilise une version obfusquée defile_put_contents
(notée par les caractères hexadécimaux). - Utilisation : pour écrire dans un fichier, avec une méthode de secours si
fopen
n’est pas disponible.
- Cette fonction essaie d’ouvrir un fichier en mode écriture. Si
- Fonction
bqcsxpfout
- Calcule la taille d’un fichier et la retourne dans des unités lisibles (B, KB, MB, etc.). Elle utilise une chaîne hexadécimale pour appeler
filesize
. - Utilisation : pour obtenir la taille d’un fichier de manière conviviale.
- Calcule la taille d’un fichier et la retourne dans des unités lisibles (B, KB, MB, etc.). Elle utilise une chaîne hexadécimale pour appeler
- Fonction
dlukeptrfo
- Récupère la dernière date de modification d’un fichier et la retourne au format « d/m/y – H:i:s ». L’appel à
filemtime
est également masqué sous forme hexadécimale. - Utilisation : pour obtenir la dernière date de modification d’un fichier.
- Récupère la dernière date de modification d’un fichier et la retourne au format « d/m/y – H:i:s ». L’appel à
Analyse Globale
- Le code utilise des techniques d’obfuscation (comme
\x66\x75\x6E
pourfunction_exists
) pour masquer les noms de fonction PHP courants. Ceci est généralement utilisé pour éviter la détection par des outils d’analyse de code automatique. - La variable
$pass
est un exemple de stockage de données encodées. Elle pourrait être utilisée pour une sorte d’authentification ou de vérification, mais sans le contexte complet, difficile de pouvoir affirmer l’objectif exact.
D’ailleurs, lors de ce piratage, le pirate avait laissé à plusieurs reprises, une chaîne de caractères chiffré en MD5 :
Par curiosité, j’ai testé cette chaîne dans un décodeur en ligne et voici le résultat :
C’était en réalité, la signature du pirate qui se nomme « nekohacker ».
Comment nettoyer la base de données en cas d’injection de code malveillant ?
Créer un backup en cas de problèmes
Avant de te lancer, assure-toi d’avoir une copie de ta base de données. Si quelque chose tourne mal pendant le nettoyage, tu auras de quoi repartir sinon, ça peut être fatale et tu peux perdre définitivement certaines données et casser ton site avec une belle erreur 500.
Détecter les injections de code
Ouvre ta base de données avec un outil comme phpMyAdmin. Jette un œil dans wp_posts
et wp_options
. Tu vas chercher des trucs qui n’ont rien à faire là comme des liens bizarres, du JavaScript sorti de nulle part, des suites de caractères qui ressemblent à du charabia (comme du base64 vu plus haut).
Détecter le code injecté dans la base de données grâce aux requêtes SQL :
SELECT * FROM wp_posts WHERE post_content LIKE '%base64_decode(%';
Cette requête va te lister tous les posts qui contiennent la chaîne base64_decode(
. C’est une fonction souvent utilisée dans les injections de code pour exécuter du contenu encodé.
SELECT * FROM wp_posts WHERE post_content LIKE '%http://%';
Cette requête recherche des liens commençant par « http », ce qui peut indiquer des liens externes ajoutés. Tu peux aussi ajuster pour chercher « https ».
SELECT * FROM wp_posts WHERE post_content LIKE '%<script>%';
Cette requête cherche les balises <script>
dans le contenu de tes articles.
SELECT * FROM wp_options WHERE option_value LIKE '%base64_decode(%';
Comme pour les posts, cela cherche des encodages base64 qui pourraient cacher du code malveillant.
Changement des accès
Après une intrusion, il faut changer les serrures. Ici, ça veut dire changer tous les mots de passe. Et n’oublie pas de mettre à jour les clés de salage dans ton wp-config.php
.
Techniques avancées pour sécuriser ton site WordPress
Protéger wp-config.php
Le fichier wp-config.php
, c’est le cœur de ton site WordPress. Pour le blinder, tu peux ajouter des règles dans ton fichier .htaccess
.
Code pour .htaccess
:
<files wp-config.php> order allow,deny deny from all </files>
Pourquoi c’est important :
Ce code bloque l’accès direct à wp-config.php
depuis le web, le rendant accessible seulement depuis le serveur.
Désactiver l’édition des fichiers via l’admin
WordPress te permet de trifouiller les fichiers de thèmes et plugins depuis l’admin. Désactiver ça, c’est une couche de sécu en plus.
Code pour wp-config.php
:
define('DISALLOW_FILE_EDIT', true);
Ce que ça fait :
Ça coupe l’accès à l’éditeur de fichiers dans l’interface admin, empêchant de modifier des fichiers sensibles directement.
Sécuriser les permissions des fichiers et dossiers (CHMOD)
Les permissions, c’est crucial. Faut que ça soit serré pour éviter les accès non autorisés.
Comment s’y prendre :
- Les dossiers devraient être en
755
ou750
. - Les fichiers devraient être en
644
ou640
. - Le fichier
wp-config.php
peut même être en600
.
C’est du sérieux, ajuster les permissions limite les possibilités qu’un hacker modifie tes fichiers.
Récapitulatif des différentes permissions d’écriture et lecture
Type | Permission | CHMOD | Description |
---|---|---|---|
Fichier | Lecture | 4 | Permet de lire le fichier. |
Fichier | Écriture | 2 | Permet d’écrire ou de modifier le fichier. |
Fichier | Exécution | 1 | Permet d’exécuter le fichier comme un programme. |
Dossier | Lecture | 4 | Permet de lister le contenu du dossier. |
Dossier | Écriture | 2 | Permet d’ajouter ou de supprimer des fichiers du dossier. |
Dossier | Exécution | 1 | Permet d’accéder aux fichiers dans le dossier. |
Les permissions CHMOD recommandées pour sécuriser son installation WordPress
Type | CHMOD | Description |
---|---|---|
Dossiers | 755 ou 750 | Permet la lecture, l’écriture et l’exécution pour le propriétaire, et la lecture et l’exécution pour les autres. Plus sécurisé en empêchant l’écriture non propriétaire. |
Fichiers | 644 ou 640 | Permet la lecture et l’écriture pour le propriétaire, et la lecture pour les autres. Empêche l’écriture non propriétaire. |
wp-config.php | 600 | Permet la lecture et l’écriture uniquement pour le propriétaire. Sécurité maximale pour ce fichier sensible. |
Dossiers en 755
ou 750
- Pourquoi
755
ou750
? : Les dossiers de ton site WordPress ont besoin d’être accessibles, mais pas modifiables par n’importe qui. Avec755
, le propriétaire (toi) peut lire, écrire et exécuter, tandis que les autres peuvent seulement lire et exécuter. - La Différence avec
750
: Si tu mets750
, tu restreins l’accès encore plus, empêchant les utilisateurs du groupe et les autres utilisateurs de modifier tes dossiers. C’est un cran supplémentaire en termes de sécurité, surtout si tu es dans un environnement d’hébergement partagé.
Fichiers en 644
ou 640
- Raison pour
644
: Tes fichiers WordPress doivent être lus et modifiés par toi, mais seulement lus par les autres.644
c’est le réglage standard pour ça. Ça permet d’éviter que quelqu’un d’autre sur ton serveur puisse les modifier. - Pourquoi envisager
640
? : En optant pour640
, tu renforces la sécurité. Ça empêche même les autres utilisateurs de ton groupe de lire tes fichiers. C’est utile si tu veux un contrôle plus strict.
wp-config.php
en 600
- La Logique derrière
600
:wp-config.php
est comme le coffre-fort de ton site WordPress. Il contient des infos super sensibles, comme les détails de ta base de données. Avec600
, tu t’assures que seul le propriétaire du fichier (encore une fois, toi) peut le lire et le modifier. - Maximiser la Sécurité : En le mettant en
600
, tu empêches tout accès non autorisé, même en lecture. C’est comme avoir un cadenas numérique sur les informations les plus critiques de ton site.
Voilà, tu as maintenant une bonne base pour réparer et sécuriser ton site WordPress après un piratage. Mais souviens-toi, ces manœuvres peuvent être complexes. Si tu sens que c’est trop tendu ou si ton site reste dans les griffes des pirates malgré tes efforts, n’hésite pas à me contacter.
FAQ
J'ai repéré des connexions bizarres sur mon site WordPress. C'est grave ?
Ça peut être un signe d'attaque par force brute. Garde un œil sur les tentatives de connexion échouées et change tes mots de passe pour plus de sécurité.
Mon site redirige tout seul vers un autre site. Que faire ?
Vérifie tes fichiers .htaccess et wp-config.php pour des lignes de code étranges. Parfois, un plugin ou un thème vérolé peut aussi être le coupable.
C'est possible de savoir qui a hacké mon site WordPress ?
C'est compliqué. Les hackers masquent souvent leurs traces. Mais tu peux jeter un œil aux logs du serveur pour trouver des indices.
Des erreurs bizarres apparaissent sur mon site, c'est une injection SQL ça ?
Possible. Si tu vois des trucs louches et des erreurs inattendues, c'est peut-être une injection SQL. Vérifie ta base de données pour des modifications étranges.
Je crains les attaques DDoS sur mon WordPress, des conseils ?
Utilise des services comme Cloudflare qui offrent une protection DDoS, et assure-toi que ton hébergement a aussi des mesures de défense.
Comment je sais ce qu'un hacker a changé sur mon site ?
Compare les fichiers actuels de ton site avec une sauvegarde récente. Les outils de suivi de version peuvent aussi t'aider à détecter les modifications.
Faut-il que je dise à mes utilisateurs que le site a été piraté ?
Oui, surtout si leurs données perso sont en jeu. C'est une question de confiance et parfois une obligation légale.