Dernièrement, des milliers de sites internet tournant sous Wordpress ont été la proie de bots qui tentaient de se connecter en tant qu’utilisateur admin via une attaque par force brute.

Ayant quelques sites clients tournant sous Wordpress, je me suis évidemment intéressé à la question et j’ai illico presto installé des plugins pour renforcer la sécurité des systèmes. Toutes ces solutions étaient plus ou moins compliquées, alors que dans mon esprit, la solution est plutôt simple (il est fort possible que mon raisonnement soit faux évidemment, je ne suis pas un expert en sécurité…).

Par essence, un bot qui tente de forcer le passage va lancer un nombre important de requêtes jusqu’à réussir son intrusion dans le système. Le nombre de requêtes par seconde peut être impressionnant, on parle là de plusieurs centaines ou milliers de requêtes par seconde! Une solution simple et efficace, du moins dans mon esprit, est de légèrement ralentir l’étape d’identification. Je pense qu’une seconde d’attente ne dérangera pas l’utilisateur et qu’il ne se rendra même pas compte de ce délai. Pour le bot, par contre, cela peut devenir rapidement gênant si chaque requête effectuée prend au minimum une seconde. Multiplié par cent ou mille (voire plus), cela devient vite inintéressant pour lui.

J’ai donc écrit un petit plugin qui permet d’ajouter un délai d’une seconde à toute tentative de login. Je vous propose ici le code du plugin, en espérant qu’il puisse être utile à certains. Et qui sait, peut-être que par la suite je le complèterai pour lui ajouter des options supplémentaires (je pense par exemple à ajouter une option pour la durée du délai, ça serait bien ça non?). Voici donc, sans plus attendre, le code du plugin, que j’ai nommé de manière très originale: Wordpress Login Delay:

Wordpress Login Delaylink
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
/*
Plugin Name: Wordpress Login Delay
Plugin URI: http://damoiseau.me
Description: Adds a one second delay to the login to avoid brute-force attack
Version: 1.0
Author: Mike
Author URI: http://damoiseau.me
License: GPL2
*/

// @see http://codex.wordpress.org/Function_Reference/add_filter
// @see https://codex.wordpress.org/Plugin_API/Filter_Reference/wp_authenticate_user
add_filter('wp_authenticate_user', 'wld_auth_login',1, 2);
function wld_auth_login ($user, $password) {
    sleep(1);
    return $user;
}

?>

Quelques explications pour ceux qui ne sont pas des habitués de l’API Wordpress:

  • Les commentaires en début de fichier Ceux-ci sont nécessaires à Wordpress et servent à donner des informations supplémentaires concernant votre plugin.
  • add_filter add_filter permet d’attacher une fonction à un filtre Wordpress (“hook a function to a specific filter action”, traduction personnelle).

    add_filter peut être appelé avec 4 paramètres:

  • $tag: le nom du filtre aue l’on veut intercepter
  • $function_to_add: nom de la fonction qui va être appelée par Wordpress
  • $priority (optionnel): permet de spécifier la priorité et l’ordre d’appel des fonctions attachées au même filtre. Un nombre inférieur indique une priorité supérieure. Par exemple si function1 possède la priorité 1 et function2 la priorité 2, function1 sera appelé avant function2.
  • $accepted_args: Le nombre de paramètres que la fonction va recevoir

    Le filtre wp_authenticate_user est appelé lors de la phase d’identification, avant même que ne soit effectuée la vérification du nom d’utilisateur et du mot de passe, c’est donc l’endroit idéal pour ajouter notre petit délai.

    Pour plus de détails sur add_filter, c’est par ici: add_filter.

  • Enfin, une petite explication rapide du code:
  • J’ajoute la fonction wld_auth_login au filtre wp_authenticate_user avec une priorité de 1 (le nombre minimum, c’est-à-dire la priorité la plus élevée) et cette fonction reçoit deux paramètres.
  • La fonction wld_auth_login exécute une pause d’une seconde: sleep(1).
  • C’est tout :) Comme vous pouvez le constater, le plugin est tout petit et le code extrêmement facile à comprendre. N’hésitez pas à l’installer sur vos sites Wordpress :)

Edit 19 Août 2013: Le plugin est maintenant disponible sur le site officiel de Wordpress: WP Login Delay/ 44 téléchargements en 2 jours, c’est bien, ça fait plaisir ^__^

Edit 23 Juin 2014: J’ai également ajouté le plugin sur Github.

Quelques nouvelles

Bien…. Ca fait plus de 5 mois que je n’ai plus rien posté sur ce blog, la honte! Pourtant les idées se bousculent au portillon…## Ce qu …… Continuer la lecture