Jean ROCHARD
Je partage ma passion de Wordpress dans des articles techniques sur les plugins, thèmes, nouveautés geek et optimisation SEO "on-site".
Jean ROCHARD

@jean_rochard

Chez Terre Digitale, on mange du Wordpress dès le petit-dej'.
Petit guide pour mettre en place les Facebook Instant Articles à partir de vos posts Wordpress : https://t.co/lSbzdM6z9j - 7 mois ago

Les sites et blog WordPress sont quasiment tous concernés par des attaques ; quelle que soit leur taille. Pour les sites vitrines de quelques pages, ce sont bien souvent des robots (et donc des automates) qui vont venir tester la sécurité de votre site pour essayer de s’introduire dessus. Ces attaques se sont multipliées depuis début 2014 et la plus courante d’entre elles est nommée « Brute Force Attack ». A la fin de cet article, vous aurez appris comment vous en prémunir rapidement et même sans connaissance technique.

 

La brute force attack, c’est quoi ?

C’est une attaque bête et méchante quand elle concerne la page login.php : un robot va venir tester cette page et essayer de multiples combinaisons de login et mots de passe pour s’y connecter. Ces combinaisons sont établies notamment grâce à des dictionnaires de mots et des algorithmes qui vont créer des modèles de mot de passe usuels (comme mettre une date d’anniversaire ou le numéro d’un département après un prénom ou un nom…).

Quels risques ? Si un robot s’introduit sur votre site, vos contenus et votre base de données sont en danger. C’est aussi le serveur qui peut être compromis par du code « malicieux » qui enverra par exemple des mails de spam à votre insu. Ce sont aussi vos données personnelles qui peuvent être utilisées (pour peu que votre site soit un site e-commerce et qu’il y ait dessus des infos de paiement mal sécurisées). Enfin, si vous utilisez toujours le même mot de passe, le risque est qu’il soit connu et que vos autres comptes sur internet soient aussi en danger. Bref, de quoi devenir parano, non ?

Un effet dérivé de la brute force attack est la consommation excessive de ressources sur votre serveur. En effet, les requêtes pleuvent sur votre page de log et cela peut saturer votre serveur ; puis rendre votre site ko. Il ne faut pas confondre cela avec l’attaque Ddos (déni de service) même si l’issue est la même : le site est indisponible.

Appliquer des principes de sécurité de base

Pour protéger votre site contre les brute force attack, je vous conseille dans un premier temps de vous référer à cet article qui présente les bases de la sécurité sous wordpress. Une fois votre site mis à jour, équipé d’un couple sûr login / mot de passe et enfin d’un backup notamment ; nous pouvons passer à l’étape suivante : bloquer le flux de requêtes testant la page de login.

Solutions déconseillées

1) Renommer wp-admin et / ou login.php

Vous pouvez faire cela avec le plugin SF Move Login. Cela peut repousser temporairement une attaque brute force sur la page login.php mais les robots finiront par contourner votre défense ; et au contraire cela pourrait vous compliquer la vie techniquement. Cela ne résout pas non plus le soucis des ressources serveur qui sont surconsommées.

2) Utiliser uniquement un plugin de sécurité

Il existe de nombreux plugin pour gérer la sécurité de wordpress, et je vous en conseillerai quelques uns dans la suite de l’article. Le soucis de n’utiliser QUE des plugins dans le cas de la brute force attack, c’est qu’il y a une chance non négligeable que le plugin ne vous protège pas contre la saturation de votre serveur, et que bien au contraire, il consomme encore plus de ressources pour remplir son rôle !

Ce sera donc un complément de la solution présentée ci dessous.

Solution par htaccess : protéger l’accès à l’admin

Une des solutions les plus rapides à mettre en oeuvre est de sécuriser votre accès à l’administration de wordpress grâce au fichier htaccess ; c’est à dire en faisant appel au mécanisme d’authentification Basic de Apache. Ainsi, les robots se heurteront à un mécanisme de protection du serveur et ne consommeront pas (ou très peu) de ressources physiques. Fini la surconsommation et le risque de saturation grâce à cette méthode. Si vous avez un hébergement chez OVH, le guide pour cela est disponible ici. Chez Gandi, un guide est aussi disponible pour certains types de serveurs ici. Nous allons détailler la mise en place de cette solution.

1) Créer le fichier .htpasswd contenant les mots de passe

Il faut tout d’abord créer un fichier crypté contenant les couples login/mot de passe qui pourront accéder au répertoire d’admin. Les mots de passe doivent être différents de vos accès à l’admin wordpress. Pour cela il faut créer un nouveau fichier nommé « .htpasswd ». Ensuite, rendez vous sur un site spécialisé proposant d’encrypter vos mots de passe comme celui ci. Vous ajouterez une ligne à votre fichier par couple login / mot de passe encrypté. Finalement, votre fichier .htpasswd devra ressembler à quelquechose comme cela :

mon_admin:743y1W0becOOA
mon_admin2:95Dj7p1p6yl56

Si votre hébergeur vous propose un accès SSH, vous pouvez créer en ligne de commande votre fichier .htpasswd de la façon suivante :

htpasswd -b -c .htpasswd mon_admin mon_motdepasse

 

2) Placer ce fichier .htpasswd sur votre serveur

Ce fichier sera placé sur votre serveur (par FTP) idéalement dans un répertoire différent que le répertoire contenant le site (celui où le fichier .htaccess sera placé). Chez Gandi par exemple, pour l’offre « simple hosting », on placera ce fichier à la racine du répertoire propre au site mais pas dans « htdocs »  qui contient le site.

3) Modifier le fichier .htaccess à la racine du site

Il faut maintenant modifier (ou créer s’il n’existe pas) un fichier .htaccess à la base de votre site (à récupérer et transférer par FTP). Ce fichier .htaccess contiendra les lignes suivantes :

<FilesMatch "wp-login.php">
AuthType Basic
AuthName "Secure Area"
AuthUserFile /XXX/XXX/XXX/www/.htpasswd
require valid-user
</FilesMatch>

Le plus compliqué ici est souvent de trouver le chemin complet du fichier .htpasswd ; vous l’aurez en regardant votre client FTP qui vous l’indiquera. Si cela ne fonctionne pas ou que vous doutez du chemin présenté, créez un fichier chemin.php à l’endroit dont vous voulez connaître le chemin ; et contenant cette ligne :

<?php echo realpath('chemin.php'); ?>

Appelez le à partir de votre navigateur et il vous affichera le chemin à copier / coller.

4) Ajouter un fichier.htaccess dans wp-admin

Il faut enfin ajouter un fichier .htaccess (par FTP) dans le répertoire wp-admin de votre installation wordpress avec quasiment les même infos que le précédent :

AuthUserFile /XXX/XXX/XXX/www/.htpasswd
AuthName "Secure Area"
AuthType Basic
require valid-user

 

5) Tester l’accès

C’est bon, vous pouvez maintenant essayer de vous logger à l’administration du site et vous aurez une nouvelle fenêtre d’authentification à renseigner. Utilisez un des couples login / mot de passe que vous avez encrypté tout à l’heure et vous aurez accès à votre page de log wordpress ; sur laquelle il faudra aussi s’authentifier. En cas d’erreur, ce premier niveau de protection renverra un code HTTP 401 d’accès restreint.

Complément de sécurité : les plugins

Pour vous assurer un 2ème niveau de sécurité, il existe des plugins spécifiques pour bloquer une adresse IP (comme LoginLockdown) qui a échoué plus de 3 tentatives à la page de login ; ou aussi des plugins généralistes qui vous offriront une protection plus globale comme iThemes Security ou All-In-One-WP-Security-And-Firewall

Ainsi équipé (bonnes pratiques de sécurité + protection apache basic auth par htacess / htpasswd + plugin de sécurité), vous serez à l’abri des brute force attack !