Vous vous souvenez de la bande dessinée Lucky Luke, le revolver le plus rapide du Far West ?
Il tirait plus vite que son ombre !
C’est l’image qui m’est venue à l’esprit quand, hier après-midi, j’ai reçu une alerte provenant du plugin de sécurité Sucuri, signalant un fichier inhabituel sur le site Web d’un de mes clients.
Intrigué par le nom du fichier (.query.php
) et ses caractéristiques (fichier caché enregistré dans le dossier wp-includes
), je me suis connecté au serveur via SSH pour vérifier le contenu du fichier
surprise !!! 🙂
Un shell PHP distant…
J’ai immédiatement contacté le responsable informatique de l’entreprise de mon client, pour lui demander une explication, puisque c’est son équipe qui avait installé aussi bien le serveur virtuel (VPS) que WordPress.
Le sysadmin, un peu allarmé, m’a assuré que l’installation avait été effectuée selon les directives établies et qu’il était impossible que le site ait été piraté, puisque le serveur virtuel venait d’être créé, en installant le système d’exploitation habituel (Ubuntu 20.04) avec les directives de sécurité habituelles, et que WordPress avait été installé automatiquement, en utilisant la dernière version (5.9.2), qu’il n’y avait pas de plugin installé et qu’il utilisait le thème de base 2022… Comment est-il possible que le site ait été piraté ?!
L’affaire devenait de plus en plus intriguant….
La seule façon de le savoir était de regarder le fichier log du serveur web (Nginx dans ce cas) et de chercher des signes de compromission !
Et voilà!!
Analyse de l’attaque
Examinons chaque étape en détail:
1) « GET /wp-admin/install.php HTTP/1.1 » 200 13315 « – » « curl/7.74.0 »
La page d’installation de WordPress est affichée avec succès (HTTP 200)
2) « POST /wp-admin/install.php?step=2 HTTP/1.1 » 200 5176 « – » « curl/7.74.0 »
Installation de WordPress réussie
3) « POST /wp-login.php HTTP/1.1 » 302 5 « – » « curl/7.74.0 »
Connexion au tableau de bord de WordPress réussie
4) « GET /wp-admin/plugin-install.php?tab=upload HTTP/1.1 » 200 26399 « – » « curl/7.74.0 »
La page pour le téléchargement manuel du plugin est affichée
5) « POST /wp-admin/update.php?action=upload-plugin HTTP/1.1 » 200 17887 « – » « curl/7.74.0 »
Le plugin Form Maker est installé
6) « GET /wp-content/plugins/contact-form-maker/contact-form-maker.php?a=0&b=930015466278503187 HTTP/1.1 » 200 5 « – » « curl/7.74.0 »
Le shell PHP est appelé en utilisant le plugin Form Maker
7) « POST /wp-includes/.query.php HTTP/1.1 » 200 40 « – » « Go-http-client/1.1 »
Le shell PHP (.query.php
) est copié dans le dossier système wp-includes
En regardant les heures des différentes étapes, vous pouvez voir que l’attaque a commencé à 14:25:23 et s’est terminée à 14:25:28, ce qui signifie qu’il n’a fallu que 5 secondes pour pirater le site !
Pour ceux d’entre vous qui ont l’habitude d’analyser des sites piratés, vous aurez déjà compris qu’il s’agit de l’attaque « WPsetup attack » qui existe depuis de nombreuses années.
Que faire si vous avez été touché par cette attaque ?
1) Bloquer l’adresse IP du pirate
La première chose à faire est de bloquer l’accès au site et éventuellement au serveur lui-même, à partir de l’adresse IP du pirate.
Au niveau du site, vous pouvez le faire en utilisant le fichier .htaccess
(si vous utilisez le serveur web Apache) ou le fichier de configuration du site (si Nginx). Au niveau du serveur, vous devez ajouter une règle de deny
dans votre pare-feu (WAF, cloud firewall ou pare-feu système IPTables ou ufw).
2) Déplacer le fichier infecté
En utilisant un accès SSH ou FTP, déplacez (ne le supprimez pas !) le fichier vers un dossier de votre ordinateur portable. Il est bon de conserver une copie du fichier comme preuve au cas où vous devriez l’envoyer à une autorité légale.
3) Réinstaller WordPress
Dans ces cas-ci, il est recommandé de réinstaller WordPress. Si vous avez un accès SSH au serveur virtuel, utilisez la ligne de commande de WordPress (wp-cli
). Si vous n’avez pas d’accès SSH, téléchargez WordPress sur votre ordinateur portable, décompressez le fichier, et remplacez via cPanel ou FTP, tous les fichiers système de WordPress (fichiers du dossier racine, dossiers wp-admin
et wp-includes
. Ne remplacez pas le fichier wp-config.php
car il contient les paramètres de configuration de la base de données de votre site)
4) Lancez une recherche de logiciels malveillants
Après avoir réinstallé WordPress, lancez une recherche de logiciels malveillants à l’aide d’un plugin de sécurité (Wordfence, Sucuri, Ninja malware, etc.) et également en utilisant le site Sucuri Site Check. (https://sitecheck.sucuri.net)
5) Conservez une copie des fichiers log
Via un accès SSH ou en le demandant à votre fournisseur d’hébergement, faites une copie des fichiers log du serveur web (Apache, Nginx ou autre).
6) Signaler l’incident
En utilisant la commande whois IP_pirate
, vous devriez trouver le détenteur (Maintainer) de l’adresse IP. Dans les information affichées, vous trouverez l’adresse courreil à utiliser dans ces cas-là (abuse@domaine_maintainer
).
Rédigez un message électronique signalant l’incident, y compris les détails techniques (notamment les fichiers journaux). En cherchant sur Internet, vous devriez trouver des modèles à utiliser pour cette question.
Dans le cas où le site piraté est détenu par une entreprise européenne, le Règlement Général sur la Protection des Données (RGPD) exige que l’incident soit signalé à l’autorité de contrôle nationale compétente.
Que faire pour éviter d’être touché
Installation WordPress
Lorsque vous installez WordPress, choisissez toujours l’installation automatique (Softaculous comme dans cPanel ou d’autres panneaux d’administration).
Si pour une raison quelconque vous préférez l’installation manuelle (télécharger le fichier latest.zip, le décompresser puis se connecter au site pour lancer l’assistant d’installation), je vous recommande vivement de commencer à utiliser la ligne de commande de WordPress (wp-cli) qui vous permettra d’automatiser tout le processus.
Si vous ne voulez vraiment pas vous impliquer dans un autre outil à apprendre, ou si vous n’avez pas d’accès SSH à votre serveur virtuel, AVANT de décompresser le fichier d’installation, créez un fichier .htaccess
et enregistrez-le dans le répertoire racine de votre site.
À l’intérieur du fichier, ajoutez les directives suivantes :
deny from all
allow from VOTRE_IP
Remplacez VOTRE_IP, avec l’adresse IP publique de votre routeur Internet (vous pouvez la trouver en vous connectant à ce site : http://ipinfo.io/ip
Une fois l’installation terminée, n’oubliez pas de supprimer les directives de blocage du fichier .htaccess
!!
Conclusion
Après cette analyse approfondie, j’ai recontacté l’administrateur système et lui ai fait part de mes conclusions. Il s’est alors souvenu que, lors de l’installation automatique de WordPress, il n’avait pas saisi correctement les bonnes informations d’identification pour accéder à la base de données et que, lorsqu’il essayait d’ouvrir la page d’accueil du site, une erreur de base de données s’affichait.
Le temps nécessaire pour mettre à jour les paramètres de la base de données dans le fichier wp-config.php
(moins d’une minute…) a suffi pour que le site soit piraté !
Donc pour résumer, essayez autant que possible d’installer WordPress automatiquement et surtout je ne me lasserai jamais de le répéter : surveillez constamment votre site !