Comment Protéger WordPress des Cyberattaques Courantes | Vumetric

Comment Protéger WordPress des Cyberattaques Courantes

Share on linkedin
Share on facebook
Share on twitter

Table Des Matières

Les sites WordPress sont régulièrement piratés, car il s’agit de loin du logiciel le plus populaire pour la création de sites Web et de blogs. Cette popularité, associée à la nature de son architecture personnalisable, en fait une cible valorisée par les attaquants. Sa configuration par défaut comporte plusieurs vulnérabilités, tandis que des failles de sécurité sont régulièrement découvertes dans les plugins et les thèmes développés par les utilisateurs. De plus, le coeur du logiciel WordPress contient également une panoplie de vulnérabilités critiques dans les versions antérieures.

Au lieu de fournir une simple liste de conseils sur la façon de sécuriser WordPress, cet article montrera des exemples concrets de cyberattaques effectuées par les pirates (et les spécialistes en test d’intrusion comme nous chez Vumetric) exploitent ces faiblesses pour compromettre les sites WordPress – et comment prévenir de telles attaques.

Attaque #1 : Forcer la connexion par « Brute Force »

Cette attaque est la plus évidente. Par défaut, la page de connexion de WordPress est accessible à l’ensemble de l’Internet, est facile à trouver (il suffit d’aller sur /wp-login.php) et ne comporte pas de mesures d’atténuation d’attaques par force brute telles qu’un CAPTCHA ou une limitation de tentatives. Cela en fait une cible de choix pour les pirates et les robots :

Vulnérabilité WordPress Attaque Force Brute
Attaque « brute force » sur la page de connexion de WordPress

Augmenter les chances : l’énumération des utilisateurs

Il existe plusieurs façons pour les attaquants d’augmenter leurs chances de pénétrer dans WordPress par force brute, la première étant l’énumération des utilisateurs par l’une des méthodes suivantes :

  1. Trouver des noms d’utilisateurs valides en regardant les auteurs des messages et des commentaires.
  2. Utilisation du tâtonnement sur la page de connexion en vérifiant les messages d’erreur (y a-t-il une erreur indiquant que l’utilisateur n’existe pas, ou que le mot de passe fourni n’est pas valide ?)
  3. Utilisation du point de terminaison WordPress JSON API « /wp-json/wp/v2/users » pour obtenir une liste d’informations valides sur les utilisateurs.
  4. Récupération des noms d’utilisateur à partir de points de terminaison intégrés et de fonctionnalités telles que les flux RSS.
  5. Des outils qui automatisent ce qui précède (comme WPScan).

Grâce à ces connaissances, les pirates peuvent cibler uniquement les comptes d’utilisateurs légitimes, ce qui rend leur attaque à la fois plus rapide et plus susceptible de réussir. Voici un exemple d’utilisation de l’API des utilisateurs pour recueillir des informations en vue d’une attaque :

Énumération d'utilisateur WordPress
Énumération d’utilisateur WordPress

Ci-dessus, nous voyons que « bjoel » est un nom d’utilisateur valide pour le site. Parfois, ce point de terminaison comprend également des adresses électroniques qu’un attaquant malin pourrait vérifier en les comparant à des violations de données connues afin d’effectuer un attaque de « credential stuffing » ou des attaques de phishing. Si cela échoue, une attaque par force brute plus robuste peut être lancée.

Augmenter les chances : accélérer l’attaque

Cela nous amène à la deuxième façon dont les pirates augmentent leurs chances de réussite : le fichier xmlrpc.php.

En bref, xmlrpc est un précurseur de l’API WordPress qui permet une interaction à distance avec WordPress via des requêtes au format XML. L’une des caractéristiques de xmlrpc est que de multiples opérations peuvent être effectuées en une seule requête dans un souci d’efficacité. Cependant, cela signifie qu’un attaquant peut soumettre plusieurs tentatives de connexion en une seule requête, accélérant ainsi considérablement son attaque.

Comparons deux attaques par force brute, la première utilisant la méthode traditionnelle d’une seule tentative par requête via le formulaire de connexion :

Vulnérabilité WordPress Attaque Force Brute
Attaque « brute force » sur une page de connexion de WordPress

En utilisant un paramètre assez agressif de 10 threads, il est possible d’essayer environ 1500 mots de passe en deux minutes. Comparons maintenant avec une attaque accélérée utilisant xmlrpc pour soumettre plusieurs tentatives d’authentification dans chaque requête :

Vulnérabilité WordPress Attaque Force Brute
Attaque « brute force » sur la page de connexion de WordPress

Lorsqu’elle est disponible, la prise en charge des appels multiples de xmlrpc.php permet de réaliser la même attaque par force brute en sept secondes au lieu de deux minutes. Ceci est dû au fait qu’il soumet 500 tentatives de connexion dans chaque requête. Ce type de gain de performance crée une attaque par force brute optimisée qui a plus de chances de réussir qu’une attaque traditionnelle dans le même laps de temps.

Prévention

Empêcher l’énumération des utilisateurs est difficile dans WordPress, mais les étapes suivantes aident :

  • Définissez un nom d’affichage (alias pseudo) distinct de votre nom d’utilisateur. Il apparaîtra dans des endroits comme les articles et les commentaires sans révéler le nom d’utilisateur que vous utilisez pour vous connecter à WordPress.
  • Restreindre l’accès à l’API JSON de WordPress, en particulier au point de terminaison « /wp-json/wp/v2/users « *.
  • Débarrassez-vous de l’utilisateur « admin » par défaut et créez votre propre compte.

À partir de là, les attaques par force brute peuvent être atténuées en procédant comme suit :

  • Restreindre l’accès à xmlrpc.php*.
  • Activez l’authentification à deux facteurs.
  • Restreindre l’accès à la page de connexion à un ensemble limité d’adresses IP.

En outre, il existe plusieurs plugins pour WordPress axés sur la sécurité qui effectuent certaines des opérations ci-dessus tout en ajoutant des protections supplémentaires par force brute (nous y reviendrons).

*Remarque : ces fonctionnalités peuvent être nécessaires pour le fonctionnement de certains plugins et intégrations ; toutefois, en règle générale, elles ne sont pas nécessaires pour les sites de base. Il existe plusieurs façons de restreindre l’accès – la plus simple étant une règle de refus .htaccess – mais d’autres options existent pour limiter l’accès aux utilisateurs authentifiés ou à d’autres conditions spécifiques. Nous vous recommandons de rechercher ce qui convient le mieux à votre cas d’utilisation.

Attaque n° 2 : exploitation d’un code vulnérable

Si un pirate ne parvient pas à trouver des informations d’identification légitimes pour se connecter à votre site, il peut chercher à exploiter les vulnérabilités qui existent dans les plugins, les thèmes ou le noyau de WordPress. En raison de sa popularité et de sa facilité de personnalisation, l’écosystème WordPress a toujours été l’un des plus ciblés et des plus exploités, avec plus de 1 250 entrées présentes sur ExploitDB au moment de la rédaction de cet article.

Voyons comment l’un de ces exploits peut être utilisé par les pirates.

Exemple d’exploitation : Mail Masta Plugin

Le plugin WordPress « Mail Masta » version 1.0 est vulnérable à une inclusion de fichier local (LFI). Une LFI permet à un attaquant de lire des fichiers arbitraires sur l’hôte vulnérable, y compris des éléments comme le fichier de configuration de WordPress en utilisant une simple requête web :

WordPress vulnerable plugin
Exploitation d’un plugin de WordPress vulnérable

En utilisant cette vulnérabilité, nous voyons le nom d’utilisateur et le mot de passe de la base de données pour l’instance WordPress associée. Ces informations peuvent être utilisées pour se connecter directement au panneau d’administration de WordPress (si « elyana » réutilise son mot de passe). Elles pourraient également être utilisées pour accéder à la base de données directement ou avec quelque chose comme phpMyAdmin afin d’ajouter un nouvel utilisateur administrateur ou de craquer/changer le mot de passe des utilisateurs existants.

Prévenir l’attaque

La prévention est assez simple :

  • Mettez régulièrement à jour votre installation WordPress (noyau, plugins et thèmes). La mise en place d’un événement de calendrier répétitif comme rappel peut aider à éviter que cela ne passe inaperçu.
  • Réduisez autant que possible l’utilisation de codes tiers, par exemple les thèmes et les plugins.
  • N’utilisez que du code tiers provenant de sources fiables et de projets actifs et bien maintenus.
  • Effectuer un examen du code pour toute personnalisation apportée à votre site.
  • Inscrivez-vous à une liste d’adresses électroniques qui fournit des avis de sécurité importants.

Attaque n°3 : Compromettre le système

Maintenant que notre attaquant a forcé ou exploité son chemin vers votre panneau d’administration WordPress, il est temps pour lui de compromettre le système sous-jacent par l’exécution de commandes. Il y a 3 façons principales de le faire :

  1. Télécharger un plugin malveillant.
  2. Modifiez un fichier PHP (comme celui qui fait partie d’un thème).
  3. Trouvez un moyen de télécharger un fichier PHP malveillant.

À titre d’exemple, nous allons nous concentrer sur le point 2, car c’est l’un des plus faciles. Il suffit de se rendre dans Apparence -> Éditeur et de modifier le fichier 404.php du thème actif :

WordPress command execution vulnerability
Attaque par éxécution de commande sur un site WordPress

Maintenant, nous ajoutons un peu de code PHP pour obtenir l’exécution de la commande :

if (!empty($_GET[‘cmd’])) {

echo ‘<pre>’;

echo shell_exec($_GET[‘cmd’]);

echo ‘</pre>’;

exit();

}

Nous pouvons ensuite exécuter les commandes « whoami » et « ifconfig » sur le serveur en naviguant vers une URL inexistante et en fournissant un argument « cmd » :

Attaque par éxécution de commande sur un site WordPress
Attaque par éxécution de commande sur un site WordPress

À partir de là, il devient trivial de compromettre la base de données (en lisant le nom d’utilisateur et le mot de passe dans wp-config.php), d’obtenir un shell interactif sur le système sous-jacent et de lancer d’autres attaques. Si votre instance de WordPress est rattachée au réseau de votre entreprise, elle peut alors servir de point d’appui pour compromettre d’autres systèmes.

Les autres méthodes accomplissent essentiellement le même type de compromis par des moyens différents.

Prévention

Si un attaquant est arrivé à ce stade, il est généralement déjà trop tard. Il existe des mesures d’atténuation qui peuvent inclure la modification des permissions et des paramètres de configuration pour empêcher l’écriture de fichiers et la désactivation du support des plugins, mais

cela n’est pas très pratique dans la plupart des cas si vous voulez que votre instance de WordPress reste utilisable.

Une chose qui peut valoir la peine d’être faite est de désactiver les fonctions dangereuses via le fichier php.ini, par exemple :

  • exec
  • passthru
  • shell_exec  système
  • proc_open
  • popen
  • curl_exec
  • curl_multi_exec
  • parse_ini_file
  • montrer_source

Toutefois, cela peut ne pas être possible dans les environnements d’hébergement partagé et peut finir par interférer avec certains plugins et intégrations légitimes.

Autres conseils pour protéger WordPress contre les attaques communes

En plus de ce qui a été discuté, vous pouvez aider à sécuriser votre instance WordPress en faisant ce qui suit :

  • Assurez-vous que l’indexation des répertoires est désactivée. Cela se fait généralement dans la configuration du serveur Web et peut être vérifié rapidement en allant sur « /wpcontent/uploads/ » dans votre navigateur pour voir si vous obtenez une liste des fichiers téléchargés.
  • Faites attention à ne pas laisser de sauvegardes de fichiers dans la racine du site. Des sauvegardes lisibles de fichiers .php ou des vidages de bases de données peuvent conduire à une compromission par divulgation d’informations.
  • Faites des sauvegardes de routine et stockez-les hors du serveur en cas de compromission.
  • Utilisez un pare-feu d’application Web (WAF) pour déjouer les attaques. Cela peut se faire par le biais d’un fournisseur comme CloudFlare, mais le plugin WordPress Wordfence est spécifiquement conçu pour aider à renforcer votre système.
  • Enregistrez-vous pour obtenir une clé API gratuite pour WPscan et utilisez-la pour analyser votre site à la recherche de vulnérabilités et de mauvaises configurations avec la commande suivante : wpscan -e vp,vt,cb,dbe,u,m –api-token YOUR_API_KEY –url http://YOUR_WORDPRESS_SITE

Récapitulatif sur la façon dont les sites WordPress sont piratés

Récapitulons :

  1. L’énumération des utilisateurs et les attaques par force brute peuvent permettre aux pirates d’accéder à votre panneau d’administration WordPress.
  2. Un code vulnérable et obsolète peut permettre aux pirates de compromettre votre instance WordPress même sans informations d’identification valides ou sans possibilité de se connecter.
  3. Une instance de WordPress piratée peut conduire à la compromission du système sousjacent et à des menaces supplémentaires.

Prenez les mesures nécessaires pour vous protéger de ces risques en utilisant les informations couvertes dans cet article. Si vous voulez vous assurer que votre site WordPress ou toute autre infrastructure informatique est sécurisée, contactez l‘un de nos spécialistes certifiés pour obtenir l’avis d’un expert.

 

Autres Articles du Blogue de Vumetric

test d'intrusion vs bug bounty

Test d’Intrusion vs Bug Bounty

En raison de la récente vague d’incidents liés aux ransomwares, les organisations et les administrateurs …

Lire l'Article
Comment sécuriser un site Wordpress

Comment Sécuriser Un Site WordPress (Version Débutante)

Selon WordFence, il y a 90,000 attaques par minute sur les sites WordPress. Bien que …

Lire l'Article
Comment Sécuriser Active Directory

Comment Sécuriser Active Directory des Cyberattaques

L’utilisation d’Active Directory par Microsoft est répandu dans la majorité des organisations et constitue une …

Lire l'Article

Votre Site WordPress
Peut-il Être Piraté?

Un spécialiste vous contactera pour:

Votre Site WordPress
Peut-il Être Piraté?

ou appelez nous directement au: