Un site qui ralentit sans raison, des pics de trafic nocturnes, des pages indésirables indexées par Google, un compte administrateur inconnu dans WordPress : avant de restaurer à l’aveugle, il faut comprendre ce qui s’est passé. Les journaux (logs) du serveur web sont la boîte noire de votre site. Ils enregistrent chaque requête, et donc chaque tentative d’attaque.
Ce guide présente une méthode d’analyse pragmatique, avec les commandes utiles, pour un hébergement mutualisé (accès aux logs via le panneau d’administration ou SSH) comme pour un serveur dédié.
L’essentiel en 30 secondes
- Le journal d’accès dit qui a demandé quoi, quand, avec quel résultat ; le journal d’erreurs révèle les comportements anormaux du code.
- Cherchez les POST inhabituels, les accès à des fichiers PHP inconnus, les rafales sur
wp-login.phpetxmlrpc.php, les chaînes d’injection. - Croisez avec les dates de modification des fichiers du site.
- Mettez en place une surveillance continue plutôt qu’une analyse après coup.
Comprendre une ligne de journal d’accès
Au format dit « combined », très répandu :
203.0.113.45 - - [12/Jan/2026:03:14:07 +0100] "POST /wp-login.php HTTP/1.1" 200 4521 "-" "Mozilla/5.0 ..."
- adresse IP du client ;
- date et heure ;
- méthode (GET, POST), chemin demandé, protocole ;
- code de réponse (200 succès, 301/302 redirection, 403 interdit, 404 introuvable, 500 erreur serveur) ;
- taille de la réponse ;
- page d’origine (referer) ;
- agent utilisateur (navigateur ou robot déclaré).
Les signaux d’attaque à rechercher
| Signal | Ce que cela peut indiquer |
|---|---|
| Rafales de POST sur wp-login.php | Attaque par force brute sur les comptes |
| Requêtes sur xmlrpc.php | Force brute amplifiée ou abus de pingback |
| Centaines de 404 sur des chemins variés | Scanner automatique cherchant des failles connues |
Chaînes comme ../, UNION SELECT, <script> |
Tentatives d’injection ou de traversée de répertoires |
| Accès réussi (200) à un .php inconnu dans uploads | Webshell probable : alerte rouge |
| POST vers un fichier d’extension ou de thème inhabituel | Exploitation d’une faille d’extension |
| Agent utilisateur vide ou outils de scan | Activité automatisée malveillante |
Les commandes utiles
Sur un fichier access.log (adaptez le nom et le chemin à votre hébergeur) :
Les adresses les plus actives
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -20
Les requêtes POST, par chemin
grep '"POST ' access.log | awk '{print $7}' | sort | uniq -c | sort -rn | head -30
Les tentatives sur la page de connexion
grep -E 'wp-login.php|xmlrpc.php' access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head
Les fichiers PHP appelés dans les uploads
grep -E '/wp-content/uploads/.*\.php' access.log
Les motifs d’injection courants
grep -iE "union.*select|\.\./|<script|base64_decode|eval\(" access.log
L’activité d’une adresse suspecte, dans l’ordre
grep '^203.0.113.45 ' access.log | less
Le journal d’erreurs
Le journal d’erreurs PHP (souvent error_log) révèle des fonctions appelées de façon anormale, des inclusions de fichiers inattendus, ou des erreurs dans des fichiers que vous ne connaissez pas. Attention : ce fichier peut contenir des chemins et des informations sensibles. Il ne doit jamais être accessible publiquement depuis le web, vérifiez-le.
Croiser avec le système de fichiers
Une fois une date suspecte identifiée, recherchez les fichiers modifiés autour de cette date :
find . -type f -name "*.php" -newermt "2026-01-10" ! -newermt "2026-01-13"
Comparez aussi les fichiers du cœur WordPress et des extensions avec les versions officielles (outils de vérification d’intégrité). Un fichier PHP dans wp-content/uploads, du code obscurci ou des fonctions comme eval sur des données encodées sont des indices forts.
Méthode d’investigation en 6 étapes
- Préserver : copiez les journaux avant toute action (ils tournent et s’effacent).
- Dater : identifiez le premier signe anormal (fichier modifié, page indésirable, alerte).
- Remonter dans les journaux autour de cette date.
- Identifier le point d’entrée : extension vulnérable, compte compromis, formulaire.
- Mesurer l’étendue : fichiers ajoutés, comptes créés, données exfiltrées.
- Corriger : restauration saine, correction de la faille, changement de tous les secrets, puis surveillance renforcée.
Mettre en place une surveillance continue
- conservation des journaux sur une durée suffisante (en cohérence avec vos obligations et le RGPD, les journaux contenant des adresses IP) ;
- pare-feu applicatif qui bloque et journalise les attaques connues ;
- alertes sur les connexions administrateur, la création de comptes, la modification de fichiers ;
- surveillance de disponibilité ;
- revue régulière des tendances (pic de 404, de POST, d’erreurs 500).
Questions fréquentes
Où trouver les journaux sur un hébergement mutualisé ?
Dans le panneau d’administration de l’hébergeur (rubrique statistiques ou journaux bruts), ou en SSH lorsqu’il est disponible. Leur durée de conservation y est souvent limitée : téléchargez-les régulièrement si besoin.
Des milliers de 404 signifient-ils que mon site est piraté ?
Non, c’est le bruit de fond normal d’Internet : des robots testent en permanence des chemins connus. C’est un accès réussi à un fichier anormal qui doit alerter.
Faut-il bloquer les adresses IP attaquantes ?
Ponctuellement, oui, mais les attaquants changent d’adresse en permanence. Un pare-feu applicatif et des correctifs à jour sont plus efficaces.
Les journaux contiennent-ils des données personnelles ?
Oui, les adresses IP en sont. Leur conservation doit être limitée et justifiée par la sécurité.
Mon site a été piraté, pouvez-vous intervenir ?
Oui : analyse, nettoyage, correction et durcissement. Voir aussi notre guide pour sécuriser WordPress.
Besoin d’un accompagnement ?
MPCÂBLE Solutions Informatiques (MPCSI) accompagne particuliers, entreprises, associations et collectivités depuis Gaudiès, en Ariège : sur site en Occitanie, principalement dans un rayon de 40 km (Pamiers, Foix, Mirepoix, Saverdun, Castelnaudary), et à distance partout en France. Demandez un devis gratuit ou appelez le 05 32 42 99 98.
