Sécuriser WordPress 1 : les comptes utilisateurs // wp-login et fail2ban

Depuis longtemps que j’utilise et propose à mes clients ce merveilleux outil qu’est WordPress, je suis en parallèle obligé de mettre en place des sécurisations diverses est variées afin d’empêcher la prolifération d’attaques en tout genre et l’utilisation de trou de sécurité, hélas toujours possible, simplement du fait de la notoriété de ce CMS. Voici l’épisode 1 des actions que je mets systématiquement en place pour protéger les abonnées, les membres, ou les administrateurs d’un WP.

Donc, passons directement au cas pratique. Vous avez un service internet basé sur WordPress, et proposant à travers la gestion WP de créer des comptes d’utilisateur (newsletter, forum, éditeurs, commentaires, etc.). Ce type de service en ligne, du moment que l’on peut récupérer un login/un email, et y tester des mots de passe aléatoirement est la base de la création de listings que des personnes, mal intentionnées, font en permanence.

Pourquoi ? Simplement parce que 90% des utilisateurs utilisent le même mot de passe sur un ensemble de sites, et que le trouver, ouvre la porte pour ces malfrats boutonneux ou pas, à l’ensemble de votre vie numérique. Et ça en 2014 c’est là une vraie valeur.

Donc, passons les utilisations néfastes en tout genre de votre vie numérique, et entrons dans les petits +,  à utiliser par les gestionnaires de site web,  et qui permettent de limiter au maximum ce type de cas nommé « brute force ».

Vous avez dit « brute force » : Késako?  C’est l’utilisation de dictionnaires de mot de passe à travers un ou plusieurs comptes d’utilisateur dès que l’on a son login ou son email et que l’on recherche son mot de passe.

En fait les 2 actions « super-simple » à activer sont les suivantes :

  1. Changer l’adresse de login/enregistrement par défaut : En changeant cette adresse, bien connue de vos attaquants, vous les obliger à tester manuellement votre site et vous le rendez incompatible à travers des robots d’attaques tout fait qu’ils téléchargent sur internet.
  2. Empêcher pendant plusieurs heures toute personne qui se trompe plusieurs fois d’identification : si vous bloquer un certain temps, à la suite de plusieurs essais infructueux, les utilisateurs se trompant d’authentification (login/mot de passe), cela empêche l’utilisation de dictionnaires, vu le nombre d’occurrences, si un attaquant peut seulement faire 3 essais par IP et par jour, voir semaines, il sera arrière-grand-père qu’il n’aura pas testé tout son dictionnaire.

Pour cela je vous conseille 2 solutions :

a. Pour la première c’est un plug-in simple comme bonjour, « Rename wp-login.php », qui réglera ce problème.

rename-wp-login

« Rename wp-login.php » s’installe et s’active comme n’importe quel plug-in. Une fois cela fait, vous retrouverez dans l’élément « permalien » de « configuration », un champ supplémentaire nommé « Login url ». Vous pouvez alors saisir le chemin « accesmembre » par exemple.

Il vous faudra ensuite aller sur http://www.monsite.fr/accesmembre pour l’accès à l’admin.

Attention : selon les autres plug-ins que vous utilisez, s’ils utilisent le chemin de login conventionnel, il faudra modifier cela pour leur permettre de fonctionner, mais c’est le prix d’une sécurité renforcée pour vous et vos utilisateurs.

b. Pour empêcher l’utilisation de robot qui va tester des dictionnaires de mot de passe, la seconde solution vous permet de bloquer les IP des robots après trop de demandes de login erronées. Pour cela, il vous faut l’accès à un logiciel très connu sur votre serveur : Fail2Ban.

Attention : Cela n’est possible que sur des hébergements sur des serveurs qui utilisent Fail2ban et qui peuvent l’activer sur les log de votre service HTTP.

Si c’est le cas, il vous faut :

  1. Créer dans fail2ban/filter.d le fichier apache-wp-login.conf par exemple et y mettre :
    [Definition]
    failregex = <HOST>.*] "POST /wp-login.php
    ignoreregex =

    Cela va demander à fail2ban de surveiller dans les log HTTP les appels au script WordPress wp-login.php en utilisant les appels de type POST. Ces appels sont utilisés pour la connexion à vos comptes WP.

  2. Dans fail2ban/jail.conf , il vous faut ajouter :
    [wordpress-login]
    enabled         = true
    filter          = wordpress-login
    action          = iptables-multiport[name=wordpress, port="http,https"]
                    sendmail-whois[name=WordpressFail, dest=moi@mondomaine.com, sender=moi@mondomaine.com]
    logpath         = /var/log/apache2/*access.log
    bantime         = 604800  ; 1 week
    maxretry        = 3

    Attention : moi@mondomaine.com est à personnaliser en fonction de votre email, la variable 3 de maxretry en fonction du nombre d’essais que vous autorisez, la variable 604800 (une semaine) de bantime en fonction de vos besoins et /var/log/apache2/xxxaccess.log en fonction du chemin réel de vos logs HTTP.

  3. Une fois cela fait, reloader Fail2Ban, et le tour est joué. S’il y a plus de X (3 dans l’exemple), Fail2Ban va créer une règle qui va bannir l’IP qui a tenté de se connecter sans succès et donc bloquer d’autres essais à partir de cet IP. Vous pourrez toujours supprimer ce bannissement de cet IP ultérieurement à travers IPtables, ou ajouter les IP fixes de vos clients s’ils sont trop étourdis.

Vous voilà protégé pour longtemps des appels brute-force qui mettent en danger les comptes WP.

Au-delà de cette première approche, volontairement uniquement orienté compte utilisateurs, vous trouverez sur l’excellent blog de Korben,  différents articles qui peuvent aussi vous aider à mieux sécurisé votre WordPress :

Et pour finir, pensez à sauvegarder, de manière incrémentale, votre base et votre thème, ou du moins, toute personnalisation que vous avez faite et qui ne peut pas se réinstaller aussi rapidement que WP et ses plug-ins .

Bon blogging !

No Comments

Post a Comment