Retour au blog Agences Web - 8 min

Détecter un piratage sur un site client avant qu’il ne le découvre

Repérez un WordPress compromis : compte admin inconnu, PHP dans uploads, fichiers modifiés, problème de sécurité dans Search Console.

Un piratage de site client se voit souvent avant que le client reçoive un appel de ses propres clients : un utilisateur administrateur que personne n’a créé, un fichier .php dans wp-content/uploads, ou une URL de production qui redirige vers un autre domaine. Dans Search Console, le rapport Sécurité et actions manuelles affiche un problème de sécurité ou une action manuelle. Ces signes ne se valent pas, mais chacun justifie d’ouvrir une note de compromission le jour même.

Ce que vous relevez avant de modifier quoi que ce soit

  1. Heure, fuseau, URL exacte, code HTTP. Une redirection 301 vers un domaine inconnu se note avec l’en-tête Location, pas avec un le site est bizarre.
  2. Liste des utilisateurs WordPress : identifiant, e-mail, rôle, date d’inscription s’il figure. Tout administrateur absent de votre registre d’accès est une ligne de la note.
  3. Fichiers PHP modifiés récemment hors mise à jour connue : wp-config.php, index.php à la racine, functions.php, et tout .php sous uploads.
  4. Comptes SFTP et utilisateurs du panneau d’hébergement : une clé ou un utilisateur ajouté.
  5. Capture du robots.txt et de la page d’accueil. Des liens cachés ou un cloaking (autre contenu pour Googlebot que pour un navigateur) se voient en comparant les deux.

Ne changez pas les mots de passe avant d’avoir copié ces éléments. Vous pouvez, en revanche, bloquer l’écriture si l’hébergeur le permet, le temps de finir la note. Le ménage vient ensuite, dans l’ordre décrit pour nettoyer un WordPress infecté.

Où les signes apparaissent

EndroitSigneCe que ça ne prouve pas à lui seul
WordPress, utilisateursAdmin inconnu, e-mail extérieurUn prestataire précédent non retiré du registre
wp-content/uploadsFichiers .php, .ico qui sont du PHP, dossiers au nom aléatoireRien d’anodin : un média légitime n’est pas du PHP
Accueil301 ou meta refresh vers un autre hôteUne migration mal finie, à confirmer avec le client
Search ConsoleProblème de sécurité, action manuelleL’étendue : seules les URL citées sont sûres d’être signalées
NavigateurPage d’avertissement Safe BrowsingQue toutes les URL sont touchées
JournauxPOST répétés vers xmlrpc.php ou wp-login.phpUne compromission réussie : ça peut n’être qu’une tentative

Le cloaking SEO (pages parasites, liens sortants cachés) se cherche aussi avec un détecteur de piratage SEO : comparez le HTML servi à un visiteur et celui qui intéresse un moteur. Une extension de sécurité qui affiche rien à signaler ne clôt pas la note si un admin inconnu est là.

La note de compromission

C’est le livrable, une page, pas un roman. En-tête : site, heure de détection, qui a détecté. Puis les preuves brutes (utilisateur, chemin de fichier, code HTTP, extrait d’en-tête). Puis l’hypothèse d’entrée, marquée comme hypothèse : extension non mise à jour, thème obtenu hors du répertoire officiel, mot de passe réutilisé, compte d’hébergement sans second facteur. Puis le périmètre supposé : fichiers seuls, ou fichiers et base (comptes, options siteurl, contenus injectés).

Décidez ensuite de la restauration : sauvegarde d’avant la date du premier fichier douteux, pas la sauvegarde de cette nuit si elle a déjà copié les fichiers infectés. Après restauration : nouveaux mots de passe WordPress, base, SFTP, panneau ; nouvelles clés dans wp-config.php (AUTH_KEY et les suivantes) ; sessions détruites. Tant que l’entrée (compte hébergeur, poste d’un salarié) n’est pas coupée, la restauration ne tient pas.

Prévenir le client sans minimiser

Le message au client reprend la note : ce qui est constaté, ce que vous avez isolé, si des données de formulaire ont pu être lues, et si vous demandez un réexamen dans Search Console. Ne promettez pas aucun vol de données si vous n’avez pas lu les journaux. Dites ce que vous avez vérifié et ce que vous n’avez pas pu vérifier.

Si Google affiche un avertissement au public, la vérification et la demande de réexamen suivent le parcours de site signalé par Google. Vous ne demandez le réexamen qu’une fois les URL citées propres. Un second signalement sur les mêmes URL retarde la levée.

Rangez la note dans le dossier du client, à côté de la sauvegarde utilisée et de la liste des mots de passe changés (les noms des comptes, pas les secrets). Le mois suivant, l’audit d’extensions sert à voir si la porte d’entrée est revenue. La note, elle, reste le document qui dit ce qui a été fait ce jour-là.

Questions fréquentes

Par quoi commencer si l’on soupçonne une compromission ?

Par une note horodatée et une copie des preuves, pas par un nettoyage. Relevez les utilisateurs, la date des fichiers PHP récemment modifiés et le code HTTP de l’accueil. Effacer trop tôt détruit ce qui permet de savoir jusqu’où aller dans la restauration.

Search Console affiche un problème de sécurité. Que faire ?

Ouvrez Sécurité et actions manuelles, notez les URL citées, et ne demandez pas un réexamen tant que ces URL ne renvoient plus le contenu signalé. Un réexamen sur un site encore infecté prolonge le blocage.

Un thème nulled est-il une piste suffisante ?

C’est une porte d’entrée fréquente, pas une preuve que le site est propre une fois le thème changé. Traitez-le comme un site à restaurer depuis une sauvegarde saine, puis changez les mots de passe et les clés d’authentification.

Surveiller mes URL