Le cœur de WordPress, c'est-à-dire les fichiers livrés avec une version donnée, est identique sur tous les sites qui l'utilisent. Cette uniformité rend la vérification d'intégrité possible. Si votre copie de wp-login.php ne correspond pas à l'officielle octet pour octet, quelque chose l'a modifiée, et rien de légitime ne devrait jamais en avoir besoin.
Comment ça marche
WordPress.org publie une somme de contrôle, une courte empreinte cryptographique, pour chaque fichier du cœur de chaque version publiée. Une vérification d'intégrité télécharge cette liste et la compare aux fichiers de votre serveur. Une correspondance signifie que le fichier n'a pas changé depuis sa sortie de WordPress.org. Une différence signifie qu'il a été modifié, ajouté ou supprimé après l'installation, ce qui ne devrait jamais arriver aux fichiers du cœur.
La vérification n'a pas besoin de comprendre ce que fait un changement. Elle doit seulement savoir que le fichier n'est pas ce qu'il devrait être. C'est une question plus simple que « ce code est-il malveillant ? », et sa réponse est nette.
Pourquoi elle détecte ce que les autres contrôles manquent
Un scanner de malwares à signatures cherche des motifs malveillants connus. Il peut manquer du code sur mesure ou bien obscurci qu'il n'a jamais vu. Les attaquants le savent, et un geste courant consiste à ajouter quelques lignes à un fichier du cœur comme index.php ou un fichier de wp-includes, où la modification passe inaperçue. La comparaison de sommes de contrôle signale cette modification quelle que soit la façon dont le code est déguisé : elle est donc efficace contre les portes dérobées nouvelles ou écrites à la main qui ne correspondent encore à aucune signature.
C'est un complément à l'analyse de malwares, pas un remplacement. Les sommes de contrôle ne voient ni un plugin malveillant ni un article de spam dans la base de données : une analyse complète combine donc les deux.
Comment la lancer vous-même
Avec SSH et WP-CLI, placez-vous dans le dossier de WordPress et lancez :
wp core verify-checksums
Un site sain affiche un message de réussite. Sinon, chaque problème est listé avec sa raison, par exemple un fichier qui ne correspond pas à sa somme de contrôle, ou un fichier qui ne devrait pas exister. Quelques remarques :
- Elle vérifie les dossiers du cœur et les fichiers à la racine. Elle ne vérifie pas
wp-content, où se trouvent vos thèmes, plugins et fichiers téléversés, et elle ignorewp-config.php. - Si votre site utilise une langue autre que l'anglais, ajoutez
--locale=fr_FR(par exemple) pour comparer avec la bonne version. - Pour les plugins du répertoire WordPress.org,
wp plugin verify-checksums --allfait le même travail. Les plugins premium et sur mesure n'ont pas de sommes de contrôle publiques.
Sans WP-CLI, téléchargez la même version exacte de WordPress sur wordpress.org, décompressez-la et comparez ses dossiers wp-admin et wp-includes à ceux de votre site avec n'importe quel outil de comparaison ou diff -r.
Ce qu'une différence signifie vraiment
Considérez toute différence dans wp-admin ou wp-includes comme à examiner sans attendre. Rien ne devrait jamais y être modifié à la main : un changement indique donc généralement un fichier compromis, et parfois une mise à jour corrompue. Voici les cas :
- « File doesn't verify against checksum » signifie qu'un fichier du cœur a été altéré. Comparez-le à une copie saine pour voir exactement ce qui a été ajouté.
- « File should not exist » signifie qu'un fichier en trop se trouve parmi ceux du cœur. Ouvrez-le. Des fichiers PHP inconnus dans les dossiers du cœur sont un signe fort de porte dérobée.
- Des ajouts inoffensifs existent aussi. Un hébergeur peut ajouter un fichier
error_log, et certains propriétaires supprimentreadme.htmloulicense.txtvolontairement. On peut les ignorer une fois qu'on sait pourquoi ils sont là.
Si un vrai fichier du cœur a été modifié, ne corrigez pas seulement ce fichier. Quelqu'un avait un accès en écriture : trouvez comment, comme l'explique comment réparer un site WordPress piraté.
Restaurer des fichiers du cœur sains
Faites d'abord une sauvegarde. Ensuite, depuis le dossier de WordPress, wp core download --force --skip-content remplace les fichiers du cœur par des copies saines de votre version installée et ne touche ni à wp-content ni à wp-config.php. Relancez ensuite la vérification pour confirmer qu'elle réussit. Remplacer les fichiers du cœur ne supprime pas une porte dérobée cachée dans un plugin, un thème ou la base de données : enchaînez donc avec une analyse complète.
L'intégrité des fichiers du cœur est l'un des contrôles que SiftWP exécute chaque semaine via SSH, affiché sous le nom core.checksums dans son journal d'analyse. Il compare votre installation aux sommes de contrôle officielles de WordPress.org automatiquement et signale tout élément inattendu, sans plugin sur votre site et sans que vous ayez à penser à le lancer.