Introduction
WordPress est le CMS le plus utilisé dans le monde et est par conséquent la cible privilégiée des pirates et des scripts automatiques (robots) !
Petit rappel : CMS est l’acronyme de Content Management System, pour « système de gestion de contenu ». Il s’agit d’un logiciel permettant de créer et gérer de A à Z l’apparence et le contenu d’un site web.
Quelques exemples montrant la popularité du CMS WordPress :
Sony Music (www.sonymusic.com)
Le site perso de Katy Perry (https://www.katyperry.com)
Le site officiel de la Suède (https://sweden.se)
Dans cet article je vais décrire les 10 mesures essentielles permettant de sécuriser son site WordPress.
Statistiques
Tout d’abord quelques statistiques en termes de vulnérabilités sur le CMS WordPress. Tous les ans de nombreuses vulnérabilités sont découvertes sur le CMS WordPress :
Et les vulnérabilités ne concernent pas forcément des vulnérabilités insignifiantes :
Les mesures de sécurité essentielles à implémenter
1- Mise à jour
Contexte :
Il est essentiel de veiller à mettre à jour la version WordPress dans les plus brefs délais. Tous les deux mois environs, des vulnérabilités majeures sont corrigées et compactées dans une nouvelle version.
Impact :
Les vulnérabilités découvertes peuvent impactées le site en termes de Confidentialité (Vol d’identifiants/mots de passe), en Intégrité (Modification du code source), en Disponibilité (site indisponible) et en termes d’image (défacement du site).
Exemple de sites référençant les dernières vulnérabilités découvertes :
https://www.exploit-db.com/ (filtrer sur le mot-clé WordPress)
Remédiation :
Effectuer une maintenance de manière régulière sur votre site WP (ET DE SES PLUGINS, nous y reviendrons) et effectuer une veille régulière sur les vulnérabilités.
2- Page de connexion
Contexte :
Lors de l’installation de WordPress, la page de connexion est située, par défaut, à l’adresse « https://acti-example.com/wp-login.php ».
Impact :
Laisser la page de connexion par défaut vous expose à de nombreuses tentatives de connexion par des scripts automatiques ou attaquant qui effectuent des attaques par brute-force.
Exemple de tentatives remontées par le plugin SUCURI :
Remédiation :
Deux mesures sont recommandées pour bloquer les tentatives de connexion frauduleuses :
Installer un plugin spécifique afin de modifier l’url de connexion : WPS Hide Login
Ajouter la ligne ci-dessous dans votre fichier .htaccess :
RewriteRule ^login$ https://acti-example.com /wp-login.php [NC,L] Ici La page de login sera accessible à l’adresse https://acti-example.com /login
3- Fichiers par défaut
Contexte :
Lors de l’installation de WordPress, des fichiers par défaut sont créés. Comme on peut le voir sur la page GitHub de WordPress (https://github.com/WordPress/WordPress) nous retrouvons les fichiers :
License.txt
readme.html
Impact :
Le fichier « License.txt » permet de confirmer à un attaquant la présence du CMS WordPress. Le fichier « readme.html » permet de révéler la version de WordPress que vous utilisez. Cela peut sembler anodin mais la version WordPress sera la première information recherchée par un attaquant. A partir de l’identification de la version l’attaquant pourra tester des techniques propres à chaque version de WordPress.
Remédiation :
Ici rien de bien compliqué, on supprime simplement les deux fichiers.
4- Les plugins
Contexte :
Les plugins sont le point noir de WordPress. La plupart des vulnérabilités n’impactent pas WordPress en lui-même mais plutôt les plugins que l’utilisateur installe.
Impact :
Les impacts dépendent des plugins et de leurs versions. Plus d’information sur le site https://wpvulndb.com/.
Remédiation :
Assurez-vous que vos plugins sont toujours à jour. Si le plugin n’est pas mis à jour de manière régulière par le créateur, essayez de changer par un plugin plus récent. De plus, si vous n’utilisez pas un plugin spécifique, supprimez-le.
5- Gestion des comptes
Contexte :
Lors de l’installation, WordPress va créer un utilisateur avec les droits administrateur nommé « admin ». Cet utilisateur à tous les droits sur le site.
Impact :
La présence de cet utilisateur par défaut permettrait à un attaquant de faciliter ses attaques de type brute-force.
Remédiation :
Il est fortement recommandé de supprimer l’utilisateur « admin » et de créer au préalable un autre utilisateur avec des droits d’administrateur. De manière plus globale il est recommandé d’activer la fonctionnalité d’authentification à double facteur sur le site.
6- Base de données
Contexte :
La base de données WordPress se compose de nombreuses tables pour stocker les messages, liens, commentaires, utilisateurs, etc. Ces tables ont par défaut des noms standards comme `wp_users’, `wp_options’, `wp_posts’, etc.
Impact :
Si un attaquant sait que vos données d’utilisateur (identifiants/mots de passe) sont stockées dans la table `wp_users’, il va essayer de l’exploiter. Nous pouvons cependant empêcher l’attaquant de deviner le nom de la table.
Remédiation :
Il est recommandé de modifier le préfix des tables WordPress. Le fameux « wp_tables ». Si votre site est déjà installé et configuré (j’imagine …) il est tout de même possible de modifier le préfix. Vous trouverez le tutoriel ici : https://wpchannel.com/wordpress/tutoriels-wordpress/modifier-prefixe-base-donnees-wordpress-installation/.
7- Fichier de configuration
Contexte :
Le fichier de configuration WordPress nommé « wp-config.php » est placé à la racine du site et contient, entre autres, les identifiants de la base de données :
Impact :
Si un attaquant est en mesure de lire les fichiers sur le serveur en exploitant une vulnérabilité il sera alors en mesure de se connecter à la base de données et de récupérer, modifier ou supprimer les valeurs des tables.
Remédiation :
Il est recommandé de déplacer le fichier dans un autre répertoire. Attention cela pourrait endommager le site. Je vous propose ce tutoriel pour le faire : https://www.groovypost.com/howto/improve-wordpress-securitty-wp-config-php-location/.
Veillez également à modifier les permissions du fichier de configuration (Cf. Etape 9).
8- XML-RPC
Contexte :
XML-RPC est un protocole qui permet de se connecter à des sites distants pour échanger des données, entrantes et sortantes. Globalement nous pouvons mettre à jour notre site WordPress à distance via l’API dédié. Depuis la version 3.5 la fonctionnalité XML-RPC est localisée dans le fichier « xmlrpc.php » et est activée par défaut.
Impact :
La première vulnérabilité est un déni de service distribué. Le site sera ralenti, voire complétement inaccessible. La deuxième permet d’obtenir des informations sur le site (les posts, énumérer les utilisateurs etc.).
Remédiation :
Il est recommandé de désactiver la fonctionnalité XML-RPC. Ceci peut être effectué via deux méthodes :
La méthode facile et non-optimale : installer un plugin : https://fr.wordpress.org/plugins/disable-xml-rpc/
La méthode htaccess : Nous ajoute le code ci-dessous dans le fichier .htaccess à la racine du site :
# Block WordPress xmlrpc.php requests <Files xmlrpc.php> order deny,allow deny from all </Files>
Vous pouvez tester la bonne désactivation de la fonctionnalité XML-RCP via le site https://xmlrpc.eritreo.it/.
9- Permissions
Contexte :
Il est important de bien configurer vos « files permissions ». Ils déterminent les droits liés aux différentes composantes de votre site : écrire, lire, exécuter… et surtout, qui peut le faire.
Impact :
Une mauvaise gestion des permissions permettrait à un attaquant de lire, écrire et exécuter des fichiers dans le répertoire du site web (le fameux 777 !).
Remédiation :
Voici les permissions optimales à appliquer pour un site WordPress :
755 pour un dossier
644 pour un fichier
400 pour wp-config.php
Si vous ne comprenez pas ces chiffres je vous propose le tutoriel suivant : https://www.linux.com/learn/understanding-linux-file-permissions
Pour automatiser la modification des permissions il suffit de taper ces quelques lignes : 755 pour les répertoires (d pour directory): find /var/www/html/wordpress -type d -exec chmod 755 {} +
644 pourles fichiers (f pour file): find /var/www/html/wordpress -type f -exec chmod 644 {} +
400 pour le fichier wp-config.php : chmod 400 wp-config.php
10- Enumération des utilisateurs
Contexte :
Dans de nombreuses installations WordPress, il est possible d’énumérer les noms d’utilisateurs WordPress à travers les archives de l’auteur, y compris le compte « admin ». Pour accéder à ces informations, il suffit d’ajouter author=n (où n représente l’id de l’utilisateur) comme paramètre à la page d’accueil de WordPress comme suit : «https://acti-example.com/?author=3»
L’énumération de l’utilisateur peut se faire soit dans le titre de la page (comme sur l’image) ou peut aussi remplacer l’url sous ce format : « https://acti-example.com/author/Timmy/ ».
Impact :
L’obtention d’un utilisateur valide permet à un attaquant de faciliter ses attaques de brute-force sur le site dans le but de voler son mot de passe et ainsi usurper son identité. Les actions malveillantes que l’attaquant pourrait ensuite effectuées dépendront du rôle de l’utilisateur usurpé.
Remédiation :
La méthode la plus efficace pour cette vulnérabilité est de modifier le fichier .htaccess à la racine du site et d’ajouter le code suivant (en modifiant l’url …) :
<IfModule mod_rewrite.c> RewriteCond %{QUERY_STRING} ^author=([0-9]*) RewriteRule .* https://acti-example.com/? [L,R=302] </IfModule>
C’est ici que se termine cet article sur la sécurité d’un site WordPress. WordPress est un CMS efficace qui permet de créer un site web en quelques minutes et de qualité, mais il faut cependant être prudent et attentif quant à sa sécurité.
Dans un prochain article nous traiterons également de Wordpress mais dans une optique offensive !
Comments