Tout d'abord, cette astuce m'est inspirée de Sebsauvage, qui me suggérait d'intégrer dans Blogotext un délai d'attente à la connexion : cela fait patienter le petit pirate qui veut essayer plein de mots de passes, et qui, espérons le, finira par foutre le camp.

Bref, un truc simple, peu contraignant et dissuasif.

Là où je pense que ce genre de procédé peut être intéressant, c'est que même en ne mettant qu'un délai de 1 seconde (donc totalement transparent pour l'utilisateur), cela réduit à néant les chances de succès des attaques brute-force sur une page de connexion :

J'explique : si une brute force effectue 10'000+ tentatives de connexions par seconde, un délai d'attente obligatoire de 1 seconde réduite ce nombre de tentatives à… 1 par seconde ! Pas mal.

Bien-sûr, on peut aussi bannir l'IP au bout de 3, 5 ou 10 tentatives loupés, mais si c'est le webmaster qui se trompe, c'est lui même qui ne peut plus accéder à son site… (ça m'est déjà arrivé […]).

Je sais pas si cette technique est utilisé par Wordpress, Joomla ou autres Wikis, mais vu comme c'est simple à mettre en place, je pense que ça devrait être le cas partout.

EDIT :
PS, un petit blog sympa que je voulais vous faire passer : En une seule image : une seule image pour expliquer un concept d'internet. Et puisque une image vaut mille mots…

9 commentaires

gravatar
sebsauvage a dit :

Oui ça devrait être le cas partout.

De mémoire, Yahoo faisait la même chose: Le délai s'allongeait à chaque tentative.

L'ajout de captcha complique énormément les choses aussi.

Google utilise des captchas, mais de manière intelligente: Aucune limitation et aucune captcha pour les 4 ou 5 premiers essais login/mdp, puis affichage d'une captcha ensuite (en se basant sur l'IP).
(Essayez: il suffit de faire plein d'erreurs en vous loguant sur votre compte GMail).

Je trouve l'idée plutôt bonne: La captcha n'emmerde jamais l'utilisateur standard, mais bloque les pirates qui veulent faire du brute-force.


Si vous êtes un peu tordu comme moi, vous pouvez aussi mettre une captcha, et attendre en réponse une version *modifiée* de la catpcha.
Comme ça même si le pirate est assez bon pour faire de l'OCR sur vos captchas, vous serez certains qu'il n'entrera *jamais* la bonne réponse.
Gniark gniark gniark. Oui je suis vicieux.



Et si vous avez la main (root) sur la machine sur laquelle tourne le service web, vous pouvez utiliser l'excellent fail2ban.
(Exemple là:http://www.commentcamarche.net/faq/18225-utiliser-fail2ban-pour-proteger-votre-application-web)

Là le pirate est carrément bloqué par reconfiguration du firewall (l'IP est blacklistée). Très efficace.

gravatar
Josua a dit :

Un délai me semble aussi une bonne idée, mais si c'est un pirate en possession d'un réseau d'ordinateurs...
Ensuite, il y a aussi le problème du proxy, et on peut même se faire passer pour un proxy sans en être un ! (il suffit de remplir la variable X_FOWARDED_FOR avec Modify Header de Firefox)

Par contre, c'est un peu énervant pour l'utilisateur lambda de devoir attendre, mais c'est mieux que de se faire ban. (Ça m'est arrivé sur un système que j'avais codé moi et le comble, c'est que je n'arrivais plus a trouver le fichier)

Je pense que je suis un peu hors sujet mais je dis ce que j'ai a dire !

gravatar
Guenhwyvar a dit :

Par curiosité, si un mot de passe est suffisamment compliqué (genre quinzaine de caractères avec minuscules, majuscules, chiffres et caractères spéciaux), c'est trouvable par brute force en combien de temps si y'a pas de délai d'attente, ni rien ?

gravatar
Le Hollandais Volant a dit :

@Sebsauvage : le délai qui s'allonge à chaque fois, c'est utilisé dans les coffres de Banques non ? Genre, ça double à chaque fois, et au bout de 10 tentatives, on est à plusieurs heures :D.
Par contre, comme le souligne Josua, le blocage pas IP ne marchera pas si l'on fait face à un réseau d'ordinateurs…

@Josua : si on doit attendre 1 seconde au début mais que le délai augmente au fur à mesure, c'est pas mal je trouve. Et une seconde, c'est rien…

@Guenhwyvar : Il suffit de faire un calcul pour ça. Je part du principe qu'il y'a 15 caractères dans le mot de passe. Chaque caractère peut-être l'une des 26 lettres, 10 chiffres et disons 14 caractères spéciaux.

On a donc 50 choix caractères différents pour chacun de nos 15 caractères du mot de passe. Soit 15^50 soit plus de 63'762'150'021'405'000'000'000'000'000'000'000'000'000'000'000'000'000'000'000 combinaisons possibles.

Sur la base de 10'000 tentatives par seconde, on est à une durée de 1,3×10^37 fois l'âge de l'univers. si toutes les combinaisons devaient êtres testés (biensûr, notre mot de passe ne se trouve pas forcément à la fin, mais se trouve statistiquement à la moitié, donc on est à 6,5×10^36 fois l'âge de l'univers.

En somme : c'est un mot de passe fort.

gravatar
Guenhwyvar a dit :

Ah, ouais, quand même... Et encore, t'as oublié de compter les majuscules (donc 52 lettres, pas 26) et les diacritiques (donc 76 « lettres », rien que pour le français) ^^

gravatar
Alz a dit :

la taille du mot de passe ne suffit pas, il faut qu'il soit suffisamment compliqué (lettres majus/minus + chiffres + caractère spéciaux, le tout bien mélangé)

Un autre bon système aussi :
afficher une photo et poser une question sur cette photo ou sur ce qu'elle implique.
Par exemple , la photo d'une plage de vacances, et poser la question "combien y a t-il de vacancier", ou alors "combien de serviette bleue ?".
ça implique une grosse basse de photo et de question/réponse, mais aucun robot ne devrait réussir quoi que ce soit ^^

gravatar
Jom a dit :

L'idée de mettre un délais de 1 seconde pour bloquer quelques tentatives du brute-force est bien pensée, voire même si ça augmente jusqu'à 5 secondes mais là faut faire un petit message pour que l'utilisateur sache ce qui se passe.
Cependant, si quelqu'un se trompe 10 fois au passe c'est qu'il a oublier et là je crois que tu sais ce que tu doit faire, ça va être génial un outil de récupération de mot de passe pour blogo.

gravatar
Le Hollandais Volant a dit :

@Alz : effectivement, c'est pas bête comme système. Mais faut que les images soient bien claires et qu'il n'y ai pas d'ambiguïtés (par exemple, une serviète bleu caché par une rouge enfoncé dans le sable que nul ne peut voir mais que le concepteur du captcha fait compter.

@Jom
Un système de récupération de mot de passe signifie que le mot de passe soit stocké en clair quelque part, donc un gros risque potentiel en cas de piratage.
Je préfère un stockage du hash du mot de passe : impossible de retrouver le mot de passe initial à partir d'un hash mixant nom+motdepasse+salt, avec un système de réinitialisaton du mot de passe (email avec lien qui détruit le mot de passe, mais là encore, si le pirate envoie un mail à un membre avec une image pointant sur le lien (faille CSRF), c'est mort.

En tout cas, y'a aucune façon 100% sûre de palier aux pirates… Alors autant faire au plus simple…

Dans le cas de blogotext, on ré-initialise le mot de passe en supprimant le fichier /config/user.php. Mais ce genre de chose n'est pas prévu pour le moment pour blogotext… D'abords, je prévois :
- captcha optionnel à la connexion (c'est prêt - me reste plus qu'à faire une page de teste de compatibilité du serveur avec la librairie GD))
- délai (c'est prêt aussi, avec un compteur JS :P)
- modération des commentaires par édition (pour le moment, on doit passer par FTP et un éditeur de texte… (pas que je compte m'en servir pour censurer -_-")).
- styles plus poussés dans les commentaires (mais je suis pas fort en regex…)
- import/export XML de tous les articles+commentaires. (c'est presque prêt :D)
- sécurité des formulaires : ajout de quelques variables bidon à la connexion, de façon à rendre plus dur les attaques MITM automatiques.

gravatar
Identitools a dit :

Arf, la sécurité... J'en ai mangé aujourd'hui, c'était pas bon... :D (cf: mon site)
Sinon sympa l'anti-bruteforce :)

Les commentaires sont fermés pour cet article