Accueil » Sécurité Informatique » 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 :

backdoor wordpress

Quel intérêt aurait-on à chiffrer quelque chose dans une extension légitime ?

Admettons 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 ?

« upload », « administrator », « addadmin », « apiword.press » au lieu de « api.wordpress »…autant d’éléments qui doivent faire tirer la sonnette d’alarme immédiatement.

 

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 :

code backdoor

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 :

backdoor-wordpress

 

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.

 

 

6 Commentaires

  1. Bonjour Michel,

    La problématique des backdoors ne date pas d’hier elle est aussi présente au niveau hardware le sujet est super intéressant. Sur un plan purement software il est possible d’appliquer des mesures de protection en revanche sur un plan matériel c’est plus compliqué.

    Connais tu le software NESSUS ? Je t’invite à l’installer et le tester en version commerciale car la version Home Freeware est limitée au niveau fonctionnalités. J’ai pu le tester sur mon serveur Graylog. Il m’a permis de faire un topo des mises à jour à appliquer. J’ai pu aussi faire un point sur les ports ouverts et d’éventuelles vulnérabilités à ce niveau. Un truc que je trouve pas mal est son système d’audit qui permet notamment de verifier tout le volet chiffrement dun serveur en l’occurrence. La aussi il serait intéressant de verifier sI NESSUS détecte le chiffrement suspect que tu as évoqué dans ton article ? 🙂

    L’outil NESSUS est puissant. Tu te connectes via une interface Web en HTTPS sur l’OS Host via un port par défaut 8834. Tout est pratiquement automatique durant l’installation. Le but de cet outil est d’analyser toutes les vulnérabilités de ta machine ou Server Web. L’intérêt de cet outil se situe notamment au niveau des dashboards Admin en fonction des analyses programmées. Tu y trouveras beaucoup de fonctionnalités intéressantes.

    Il existe d’autres alternatives de protection plus sophistiquées notamment la centralisation des logs via un serreur dédié.. A partir des logs il est possible de détecter toute forme d’intrusion ou de comportement suspect ou potentiellement dangereux. Malheureusement le risque zéro n’existe pas il faut aussi appliquer la centralisation des logs sur l’infrastructure réseau notamment via un serveur Negios couplé au centralisateur des logs. L’intérêt ici est notamment de monitorer les règles du firewall hardware via les tableaux de bord du centralisateur de logs en temps réel. Si un port est inhabituellement utilisé alors une action appropriée pourra être entreprise.

    Concernant WordPress le fait de ne pas avoir la maîtrise de l’infra réseau (hébergémet externe) est à mon avis un des risques les plus forts sur un plan sécurité.

    Pourras tu me faire un feedback au cas où tu décidais de tester le software NESSUS ?

    A+!
    Diki

    • Bonjour Diki et merci pour les précisions.
      Effectivement je connais NESSUS qui fait un rapport plus global sur la sécurité d’un système. Je doute cependant qu’il trouve de façon systématique ce type de backdoor, surtout qu’en soit l’encodage en base64 n’a rien de spécialement suspect, mais ça serait intéressant de tester justement !
      Pour WordPress, il existe l’outil WP-scan ainsi que Nikto qui sont par ailleurs plus orientés sites web et WordPress, et qui devraient détecter les backdoors. À tester lorsque l’occasion se présentera 😉

  2. Bonjour, et meilleurs voeux

    Très intéressant.
    Question au sujet des fichiers htaccess: si pour l’administration d’un site (pas sous wordpress) on fait un système de mots de passe via un htaccess pointant vers un fichier protégé par un autre htaccess Deny from all, est-ce que c’est plus sûr que via les sessions ?
    2ème question: avec allow from xx.xxx.xx.xx est-il possible d’ajouter 2 ou 3 IP ? et si oui, quelle est la syntaxe ?

    • Bonjour, merci et meilleurs vœux à vous aussi !
      Je n’ai pas essayé la configuration dont vous parlez, mais si vous basez l’accès sur une adresse IP statique bien définie, vous avez en tant normal une « meilleure sécurité » sans pour autant garantir un risque zéro.
      Concernant votre deuxième question, vous devriez pouvoir ajouter les autres adresses IP sur de nouvelles lignes, ou éventuellement utiliser des adresses IP partielles suivant vos configurations IP : http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html#allow

  3. Bonjour Michel, merci beaucoup pour cet article il me donne envie d avoir tes compétences pour être plus vigilant y’a t il
    des formations pour apprendre le Hacking éthique à Paris courte pas très Cher efficace quoi? Merci Akim

Laisser un commentaire

Lire plus :
virus facebook
Les Virus Facebook, comment ça fonctionne et comment s’en protéger

Les virus sur Facebook regroupent plusieurs programmes malveillants qui ont des buts différents. Nous allons les présenter à travers cet...

Fermer