Hack WordPress : comment un Backdoor peut ruiner votre site et comment le détecter
WordPress est de loin le système de gestion de contenu (Content Management System) le plus populaire. Cette popularité est notamment due à la grande personnalisation offerte par les thèmes et les extensions. Seulement, cette personnalisation est également une porte grande ouverte pour les backdoors.
Qu’est-ce qu’un backdoor ?
Les backdoors (ou « portes dérobées » en français) sont des morceaux de code ou des mécanismes spécifiquement conçus pour fournir un point d’accès ultérieur à un site (ou à un système). Lorsqu’un code malveillant est exécuté sur un système, il peut en effet ouvrir des « portes » pour faciliter l’accès au pirate et donc contourner l’authentification habituelle. Ces « portes » ouvertes peuvent être très différentes suivant le système ou le site ciblé :
- Il peut s’agir de l’ouverture de ports réseaux sur un serveur, pour s’y connecter plus tard.
- Il peut s’agir d’un accès autorisé uniquement via un lien spécifique.
- Il peut s’agir d’un Shell backdoor proposant toute une panoplie d’outils pour prendre le contrôle d’une machine à distance.
- Il peut s’agir d’un mot de passe par défaut donnant des privilèges donnés.
- Il peut s’agir d’une clé de déchiffrement cachée permettant de déchiffrer des communications normalement confidentielles.
- etc…
Dans le cas d’un backdoor WordPress, il s’agit par exemple de se connecter en tant qu’administrateur mais aussi d’éditer/supprimer/ajouter des articles à la volée, et à distance bien-sûr. De quoi prendre le contrôle d’un blog tout entier. Et le backdoor que j’ai choisi d’étudier dans le cadre de cet article est un backdoor que j’ai découvert en étudiant une extension WordPress partagée librement sur la toile, hors du répertoire classique des extensions WordPress.
Trop beau pour être vrai ?
Le doute m’est venu en remarquant que certains sites sont des répertoires complets d’extensions WordPress piratées. En effet, toutes les extensions listées sur ces sites sont normalement payantes, et pourtant on les retrouve gratuitement en ligne, sans même avoir besoin de s’inscrire.
« Si c’est gratuit, c’est que vous êtes le produit ? »
J’en ai donc téléchargé une pour observer ce qui pourrait se cacher derrière un tel service, et bingo, j’ai rapidement trouvé un code suspect ressemblant a ceci :
Quel intérêt aurait-on à chiffrer quelque chose dans une extension légitime ?
« Quel intérêt aurait-on à chiffrer quelque chose dans une extension légitime ? »Cliquez pour tweeterPartager sur FacebookPartager sur LinkedInAdmettons tout de même qu’il y ait quelque chose à cacher, mais alors que viennent faire ces lignes un peu plus bas dans le code ?
En observant la fin du code chiffré, j’aperçois le symbole « == » qui est très typique d’un encodage en Base64. Et qui dit encodage, dit décodage possible. Je décode donc le code, et cette fois tout le code du backdoor apparaît. Voici une partie qui confirme tout le reste :
J’ai encadré les parties explicites :
- « SET post_content » définit probablement le contenu d’un article donné.
- « create_page » et « remove_page » permettent respectivement de créer ou de supprimer des pages.
Le tout à distance bien entendu, via une connexion à une page donnée qui demande un mot de passe.
On y voit également que des métadonnées HTML sont définissables : keywords, description, title…ce qui laisse penser que ce backdoor est probablement une façon discrète d’ajouter du contenu prédéfini (par exemple des liens) sur tous les sites « infectés » pour améliorer le référencement du site de son auteur.
Je n’ai pas précisé que le code étudié est placé dans un fichier d’initialisation de l’extension (de quoi l’activer à coup sûr). Il me suffisait ensuite de faire une recherche du code source original sur Internet pour remarquer rapidement que d’autres développeurs/hackers éthiques ont également repéré le code suspect, et que celui-ci a probablement été encodé en Base64 depuis les découvertes en question.
Un téléchargement d’une deuxième extension sur ce site m’a permis d’affirmer qu’elles sont probablement toutes offertes gratuitement car elles sont toutes backdoorées, et j’ai bien peur qu’a l’heure actuelle des centaines voire des milliers de sites WordPress soient infectés. D’où mon alerte dans l’article d’aujourd’hui.
Comment repérer le backdoor ?
La réponse simple et naïve à cette question serait « d’installer des extensions (des vraies) permettant de protéger et de scanner son site ». Mais comme bien souvent en hacking, les techniques manuelles fonctionnent mieux et surtout nous donnent plus d’assurance quant à la détection et la correction d’un problème.
Habituellement un backdoor comme celui étudié ici se cache dans des dossiers et fichiers clés de l’extension. Par exemple, dans le dossier « inc » qui contient des fichiers à inclure au lancement de l’extension. Le backdoor en question se trouvait en effet toujours dans un fichier du dossier « inc ».
Vous pouvez donc observer manuellement si un fichier suspect s’y trouve parmi vos extensions actuelles, ou alors faire une recherche en ligne de commande :
Repérer le backdoor en ligne de commande sous Windows
Sous Windows, vous pouvez ouvrir un invite de commande (cmd.exe) puis vous rendre tout d’abord dans le dossier du plugin :
cd CHEMIN_DOSSIER_PLUGIN
Et taper la commande suivante :
findstr /s /i CD_CODE *.*
Cette commande va chercher dans tous les sous-dossiers les fichiers qui contiennent le mot « CD_CODE » concernant le backdoor en question.
Voici un exemple d’affichage :
Repérer le backdoor en ligne de commande sous Linux
Sous Linux, nous pouvons utiliser la commande grep :
grep -R "CD_CODE" /CHEMIN_PLUGIN
Note : vous pouvez également chercher l’expression « base64 » à la place de CD_CODE et essayer de trouver un long code encodé en base64 comme dans l’exemple précédent.
Comment repérer et éviter un backdoor de façon générale ?
L’article ne serait pas complet sans parler des backdoors de façon plus générale. Tout d’abord en ce qui concerne WordPress, il y a plusieurs façons de cacher du code suspicieux, et le meilleur moyen de le détecter est de l’observer directement pour essayer de comprendre ce qu’il fait. Je sais que c’est fastidieux, mais je vais vous donner des pistes pour vous faciliter la tâche.
Se méfier des extensions avant tout
On l’a vu au début de l’article, les extensions WordPress sont le meilleur moyen de placer un backdoor sur un site WordPress. Pour éviter au maximum de se retrouver avec une porte dérobée, l’idée est avant tout de n’installer que des extensions populaires et bien notées depuis le répertoire officiel des extensions WordPress (https://fr.wordpress.org/plugins/)
Il est également conseiller d’observer les dossiers sensibles de WordPress, comme le dossier uploads dans lequel les images mises en ligne sont automatiquement placées. Voici une commande permettant de vérifier qu’il n’y ait pas de fichier PHP présents dans ce dossier :
find dossierWordpress/wp-content/uploads -name "*.php" -print
Note importante :
Il peut y avoir des fichiers PHP légitimes placés dans ce dossier. C’est encore une fois une question de bon sens et d’étude au cas par cas.
Enfin, vous pouvez observer les fichiers de configuration, pour trouver d’éventuelles modifications indésirables. Pour automatiser cela, il existe plusieurs extensions de sécurité. Je vous recommande d’en installer qu’une seule pour ne pas surcharger votre serveur :
Comment se protéger dans le futur ?
Mieux vaut prévenir que guérir. Je vous conseille donc avant tout d’effectuer des sauvegardes régulières de votre base de données et de vos fichiers. Vous pouvez pour cela utiliser l’extension BackupWordpress.
Autres conseils de protection :
- Mettre à jour : les extensions et thèmes de site doivent être mis a jour régulièrement. Lorsque des mises à jour sont disponibles, WordPress vous alerte habituellement et vous propose de les faire en un clic. Cela permet de s’assurer que l’on possède les dernières versions en question, qui peuvent corriger certaines vulnérabilités présentes dans les anciennes versions de l’extension.
- Bien gérer les droits d’accès : cela permet de limiter le champ d’action d’un pirate. Le fait de limiter l’accès aux dossiers ou fichiers sensibles par adresse IP est un bon moyen de protection, dans la mesure où le backdoor ne permet pas de modifier lui-même cette restriction. Vous pouvez notamment créer ou éditer le fichier .htaccess à la racine de votre site pour y ajouter le code suivant :
<Files wp-login.php> order deny,allow Deny from all # placez votre adresse IP publique ci-dessous allow from xx.xxx.xx.xx </Files>
Le seul problème ici, c’est que vous ne pourrez plus vous connecter à votre site si vous utilisez un autre réseau, ou si votre adresse IP est dynamique.
Envie d’en apprendre plus sur les failles web ?
Cette faille et bien d’autres est vue en détail dans mon cours vidéo sur les tests d’intrusion web.
Nous allons parler des fondamentaux : fonctionnement d’HTTP, d’HTTPs, de DNS et de l’architecture web de manière générale.
Nous allons également mettre en place un laboratoire de test avec des machines virtuelles pour héberger et scanner nos sites vulnérables afin d’apprendre sans rien casser.
Nous allons bien sûr parler de toutes les failles web (XSS, CSRF, SQL, LFI, RFI, …etc) en suivant le Top 10 OWASP mais aussi de tout ce qui gravite autour de la sécurité web : dénis de service, mauvaises configurations, données personnelles, reconnaissance, etc…
Impatient de commencer avec vous, je vous invite à rejoindre le cours dès maintenant :
https://cyberini.com/cours/hacking-ethique-tests-intrusion-web/