Lorsque l’on aborde la sécurité sous WordPress, le premier réflexe est la mises à jour du core, du thème et des extensions. Puis vient la question du parefeu qui devient nécessaire pour le filtrage des requêtes, le blocage de robots indésirables et la mise en place de règles spécifiques au site web en production.
La plupart des attaques émises sur le web sont automatisées via des robots capables d’exploiter une faille de sécurité inhérente à votre site web.
Au-delà de l’exploitation des failles de sécurité liées aux négligences de l’utilisateur, les attaques peuvent cibler le vol de votre mot de passe administrateur, voir cet article à propos de keepass pour bien gérer vos mots de passe. Ces tentatives de vol se font au travers d’attaques par force brute où l’attaquant teste toutes les combinaisons possibles pour trouver votre mot de passe. Ceci n’est qu’un exemple, il existe un grand nombre de type d’attaques : injection SQL , cross-site scripting, mise place de portes dérobées et autres joyeusetés … dont je laisse discourir les spécialistes.
Il est donc nécessaire d’installer un web application firewall (WAF), comme son nom l’indique un firewall dédié aux applications web.
Trois points essentiels pour le choix de son parefeu
Dans un premier temps il doit d’être placé en amont de votre site web, quoi de plus ennuyeux de voir son site compromis en même temps que le firewall… Les parefeux côté serveur (e.g. modsecurity) existent mais demandent une certaine expérience pour leur mise en place, en effet ils ne doivent pas ralentir votre serveur et générer trop de faux positifs. D’autre part, si l’utilisateur a installé son site web sur système mutualisé il n’aura pas accès à la configuration du WAF côté serveur.
Deuxièmement, le firewall doit être configurable pour :
- modifier la politique du parefeu : adapter le niveau de sécurité en fonction des situations (périodes d’attaques versus normales)
- contrôler les accès utilisateur par ip, région (geo-ip), mots-clés
- contrôler l’accès au site par les robots de crawl et définir une fréquence de passage, bannir les mauvais robots qui ralentissent l’affichage de votre site
- établir des log d’attaques facilement lisibles afin d’établir une stratégie de sécurité
Enfin, peut être le plus important, votre parefeu doit être à même de vous alerter en cas de modification d’un script, d’un changement de la base donnée depuis un script nouvellement installé. En effet, même si les règles d’un firewall sont performantes, celles-ci peuvent être contournées et c’est dans ce cas que le parefeu doit vous alerter d’un changement survenu dans les fichiers de configuration de votre site web ou de la base donnée. Cette fonctionnalité vous aidera à savoir quels sont les fichiers à nettoyer si le firewall a été contourné.
On peut recenser trois types de parefeu intéressants pour protéger votre site WordPress :
- Parefeu côté serveur : Modsecurity, NAXSI (pour Nginx)
- Firewall via un serveur proxy : sucuri security
- Plugin wordpress : All In One WP Security & Firewall, Simple Security Firewall, Ninjafirewall
C’est Ninjafirewall qui a retenu mon attention et est installé sur mes sites depuis un peu plus d’un an.
NinjaFirewall ou le véritable parefeu WordPress
Dans le cadre de la description de ce plugin j’ai choisi de vous présenter la version premium de Ninjafirewall.
Ninjafirewall (NFW) est léger et n’offre pas de fonctionnalités inutiles perdant l’utilisateur lors de la prise en main du plugin.
En ce qui concerne le premier point cité plus haut, NFW se place bien en amont du site web en créant à l’installation un fichier php.ini avec les instructions suivantes :
; BEGIN NinjaFirewall auto_prepend_file = /public_html/testing/wp-content/plugins/ninjafirewall/lib/firewall.php ; END NinjaFirewall
L’instruction auto_prepend_file spécifie le nom d’un fichier qui sera automatiquement parcouru avant le fichier principal. Dans ce cas le fichier firewall.php sera exécuté avant le fichier index.php de votre site WordPress. Pour ma part j’ai préféré ajouter cette instruction dans fichier php.ini de php-fpm sachant qu’un seul site tourne par instance.
Présentation rapide des fonctionnalités de Ninjafirewall
-
Politique du parefeu
Ninjafirewall permet de filtrer les variables GET et POST, le traffic HTTP/HTTPS, les cookies, les variables serveur (HTTP_USER_AGENT, HTTP_REFERER, PHP_SELF, PATH_TRANSLATED, PATH_INFO). Il assure également une protection contre l’énumération des comptes utilisateurs.
La politique initiale du parefeu me convenant parfaitement, j’ai laissé les options par défaut.
-
Contrôles d’accès
Les ip, les url du site ou la géolocalisation (par pays) sont les moyens efficaces proposés par Ninjafirewall afin de gérer l’accès au site (accepté ou refusé). Très important également, le contrôle d’accès des robots, il suffit d’entrer leur nom pour voir leur accès refusé :
-
File Guard
Ce système de détection en temps réel est très utile pour être alerté sur l’éventuelle modification d’un fichier, si tel est le cas, un mail est envoyé vous détaillant le nom du fichier, la date et heure du changement. Ne pas oublier d’exclure les dossiers ou fichiers soumis à de fréquentes modifications comme un dossier de cache.
-
File Check
Cette fonctionnalité permet d’effectuer le monitorage de l’ensemble de vos fichier en se basant sur un snapshot des fichiers à un temps donné de votre installation WordPress. Le scan peut se faire soit toute les heures soit une ou deux fois par jour. Vous avez la possibilité de recevoir un mail après chaque scan ou bien, seulement si Ninjafirewall a détecté un changement qui a pu affecter le contenu d’un fichier, ses permissions, son timestamp.
-
Web Filter
Ce système peut être intéressant si vous souhaitez détecter des mots suspects ou que vous ne voulez pas voir sur vos pages web. Par exemple, si une de vos pages a été piratée avec des mots clés que vous avez préalablement définis via le web filter vous en serez averti par email lorsque la page sera générée pour un visiteur.
-
Notifications d’évènement
Permet de créer des alertes qui seront envoyées par mail lorsqu’un administrateur ou un utilisateur se connecte, lorsqu’une extension est installée, activée/désactivée, supprimée, de même pour un thème ou pour une mise à jour WordPress. On peut être notifié lors de la création ou suppression d’un compte administrateur.
-
Protection contre un attaque de type force brute
Cette protection est désactivée par défaut et peut être mise en place lors d’une attaque ou de manière permanente.
-
Protection anti-spam
Trois niveau de protection sont proposés pour lutter contre le spam et l’on a le choix pour l’appliquer au formulaire de commentaire et/ou au formulaire d’inscription.
-
Live Log
Très utile pour observer en temps réel le comportement des utilisateurs mais aussi des robots visitant votre site. Par exemple si vous voyez un robot indésirable crawler votre site, il vous suffira de noter son nom et de le reporter dans la liste des bots à exclure dans la section contrôles d’accès.
-
Journal du parefeu
C’est un des éléments les plus important de Ninjafirewall, en effet c’est grâce à la journalisation des refus d’accès utilisateurs et des robots que l’on va pouvoir ajuster la politique du parefeu. Il vous permettra surtout de voir si la politique des contrôles d’accès est bien en adéquation avec ce que vous avez défini.
-
Editeur de règles
Si dans votre journal vous rencontrez des exclusions d’IP liées à une règle qui n’ont pas lieu d’être vous pouvez exclure celle-ci, du moins temporairement afin de résoudre le problème
Pour conclure
NinjaFirewall suis très bien nos trois prérequis de départ : se placer en amont du site, être configurable et nous alerter en cas de modification, ajout, suppression de fichiers. Je ne peux que vous conseiller d’installer ce firewall dans sa version gratuite dans un premier temps afin de vous familiariser avec cet outil. Le choix de la version premium est a envisager si vous souhaiter ajouter une couche supplémentaire de protection via les contrôles d’accès par exemple.
Pour ceux qui ont un site web sous un autre CMS que WordPress, il existe une version générique de NinjaFirewall (Pro+ Edition) permettant de sécuriser toute application php.
Article rédigé et publié par
le