2010
08.05

CCCCCCCCCCOOCCOOOOO888@8@8888OOOOCCOOO888888888@@@@@@@@@8@8@@@@888OOCooocccc::::
CCCCCCCCCCCCCCCOO888@888888OOOCCCOOOO888888888888@88888@@@@@@@888@8OOCCoococc:::
CCCCCCCCCCCCCCOO88@@888888OOOOOOOOOO8888888O88888888O8O8OOO8888@88@@8OOCOOOCoc::
CCCCooooooCCCO88@@8@88@888OOOOOOO88888888888OOOOOOOOOOCCCCCOOOO888@8888OOOCc::::
CooCoCoooCCCO8@88@8888888OOO888888888888888888OOOOCCCooooooooCCOOO8888888Cocooc:
ooooooCoCCC88@88888@888OO8888888888888888O8O8888OOCCCooooccccccCOOOO88@888OCoccc
ooooCCOO8O888888888@88O8OO88888OO888O8888OOOO88888OCocoococ::ccooCOO8O888888Cooo
oCCCCCCO8OOOCCCOO88@88OOOOOO8888O888OOOOOCOO88888O8OOOCooCocc:::coCOOO888888OOCC
oCCCCCOOO88OCooCO88@8OOOOOO88O888888OOCCCCoCOOO8888OOOOOOOCoc::::coCOOOO888O88OC
oCCCCOO88OOCCCCOO8@@8OOCOOOOO8888888OoocccccoCO8O8OO88OOOOOCc.:ccooCCOOOO88888OO
CCCOOOO88OOCCOOO8@888OOCCoooCOO8888Ooc::...::coOO88888O888OOo:cocooCCCCOOOOOO88O
CCCOO88888OOCOO8@@888OCcc:::cCOO888Oc..... ....cCOOOOOOOOOOOc.:cooooCCCOOOOOOOOO
OOOOOO88888OOOO8@8@8Ooc:.:...cOO8O88c.      .  .coOOO888OOOOCoooooccoCOOOOOCOOOO
OOOOO888@8@88888888Oo:. .  ...cO888Oc..          ;oOOOOOOOOOCCoocooCoCoCOOOOOOOO
COOO888@88888888888Oo:.       .O8888C:  .oCOo.  ...cCCCOOOoooooocccooooooooCCCOO
CCCCOO888888O888888Oo. .o8Oo. .cO88Oo:       :. .:..ccoCCCooCooccooccccoooooCCCC
coooCCO8@88OO8O888Oo:::... ..  :cO8Oc. . .....  :.  .:ccCoooooccoooocccccooooCCC
:ccooooCO888OOOO8OOc..:...::. .co8@8Coc::..  ....  ..:cooCooooccccc::::ccooCCooC
.:::coocccoO8OOOOOOC:..::....coCO8@8OOCCOc:...  ....:ccoooocccc:::::::::cooooooC
....::::ccccoCCOOOOOCc......:oCO8@8@88OCCCoccccc::c::.:oCcc:::cccc:..::::coooooo
.......::::::::cCCCCCCoocc:cO888@8888OOOOCOOOCoocc::.:cocc::cc:::...:::coocccccc
...........:::..:coCCCCCCCO88OOOO8OOOCCooCCCooccc::::ccc::::::.......:ccocccc:co
.............::....:oCCoooooCOOCCOCCCoccococc:::::coc::::....... ...:::cccc:cooo
 ..... ............. .coocoooCCoco:::ccccccc:::ccc::..........  ....:::cc::::coC
   .  . ...    .... ..  .:cccoCooc:..  ::cccc:::c:.. ......... ......::::c:cccco
  .  .. ... ..    .. ..   ..:...:cooc::cccccc:.....  .........  .....:::::ccoocc
       .   .         .. ..::cccc:.::ccoocc:. ........... ..  . ..:::.:::::::ccco

Slowloris est un outil d’attaque puissant permettant de faire tomber effroyablement rapidement un serveur web. Ecrit en perl par RSnake, il affecte en particulier les serveurs Apache 1.x et 2.x (67% des serveurs sur le net !!) Petite présentation théorique et pratique du paresseux enragé !!

Principe

Le principe de ce petit script perl au nom singulier (slowloris=paresseux (l’animal!) pour les anglophobes ;p) est d’envoyer des requêtes HTTP partielles, à intervalle régulier, afin de garder les sockets ouverts. L’attaquant, ou du moins slowloris, initie donc une requête GET vers le serveur cible, il y a donc bien un échange entre les deux entités, comme le ferai n’importe quel client HTTP vers le serveur, or ici slowloris va faire en sorte que l’échange ne se termine jamais !

Slowloris ne va pas envoyer les séquences attendues par le serveur mais lui fournira de temps en temps un en-tête bidon qui sera royalement ignoré par le serveur, mais qui permettra de maintenir la connexion TCP ouverte, empêchant ainsi le socket d’être fermé, et c’est là tout l’intérêt ! Le serveur devient rapidement saturé, et là, c’est le déni de service…

Installation/Préparation

Alors là, autant vous prévenir d’entrée de jeu d’une chose que vous savez déjà : Ne vous amusez pas à tester cela sur des sites webs qui ne vous appartiennent pas !! Et même si c’est le cas, amusez-vous plutôt à tester en local (avec 2 VM par exemple), ça écartera les risques de faire râler votre hébergeur x)

Bien, passons aux choses sérieuses ! (Ah au fait, on bosse sous linux là hein ;p)

Tout d’abord, pour ce qui est de slowloris en lui-même, il n’y a pas d’installation à proprement parler étant donné que c’est un script perl à récupérer sur le site de RSnake. Un copy-paste du bazar dans un fichier vierge que vous renommerez slowloris.pl, et zou!

Rendez-le exécutable :


chmod +x slowloris.pl

En revanche, il nécessite quelques modules perl pour fonctionner (commencez par installer perl si ce n’est pas déjà fait :D) :

  • IO::Socket::INET
  • IO::Socket::SSL
  • Getopt::Long
  • Config
  • strict

Pour installer ces modules, il faut utiliser le shell perl, commençons par le lancer :

perl -MCPAN -e shell

Pour installer un module, il suffit d’utiliser la syntaxe suivante :

install <module>

Exemple :

install IO::Socket::INET
install Getopt::Long

Une fois tous les modules perl installés… testons !!

./slowloris.pl -dns <ip_cible ou URL>

Résultat :

dos  HTTP DoS avec Slowloris

Il est très intéressant de connaître le timeout du serveur ciblé, car en fonction de celui-ci, nous pouvons adapter notre attaque pour qu’elle soit plus efficace, car diminuer le timeout sur un serveur apache (qui est à 300secondes par défaut tout de même, ce qui permet à slowloris de garder une session ouverte jusqu’à 5minutes sans renvoyer de paquets… ce qui lui laisse, justement, largement le temps d’en envoyer de temps à autre histoire de garder la connexion ouverte) permettrait de libérer les connexions plus rapidement. Hey, une solution anti-slowloris? Il suffirait de trouve le timeout idéal pour qu’il ne soit pas trop long afin d’empêcher slowloris de se connecter peinard, ni trop court afin de ne pas jeter la moitié des utilisateurs normaux qui se connecterait à votre site… Mais que neni, cela ne ferait que repousser l’échéance… il faudra juste à l’attaquant un tout petit plus de temps (et encore cela reste très court) icon smile HTTP DoS avec Slowloris

Si ainsi vous souhaitez tester la valeur du timeout du serveur cible, il vous suffit de faire une petite batterie de tests automatique qui vous indiquera quel timeout utiliser dans votre attaque afin que slowloris ai une efficacité optimale (c’est beau quand même!)

./slowloris.pl -dns <cible> -port 80 -test

Vous pouvez ainsi adapter le timeout en fonction de ce que préconise les tests de slowloris de cette manière :

./slowloris.pl -dns <cible> -timeout 30

Comment s’en protéger?

Très bonne question merci ! x)

Eh bien la réponse n’est pas si simple que ça ! Il existe par exemple sous freebsd un outil appelé httpready qui serait suceptible de protéger un serveur de cette attaque, mais ne protégeant que contre les requêtes GET et HEAD, or slowloris intègre une fonction qui permet… de bypasser httpready en se basant sur des requêtes POST, et vlan !

Nous parlions de réduire le timeout, mais j’ai déjà démontré que cela ne ferait que retarder l’échéance.

Nous pouvons en revanche nous intéresser au module apache mod-qos, qui lui permettrait de limiter le nombre de connexion par IP, et dans un intervalle de temps donné. Unautre module, mod_limitipconn, fait un peu la même chose en limitant le nombre de connexion ouverte, mais pas de notion d’intervalle de temps précis, ce qui pourrait s’avérer assez pénalisant pour bon nombre de visiteurs du site au bout d’un moment…

Quoiqu’il en soit, slowloris, bien que n’étant pas un outil nouveau (v0.7 released le 17 juin 2009) reste une menace bien réelle.

Be Sociable, Share!
  • more HTTP DoS avec Slowloris

9 commentaires pour le moment

Ajoutez votre commentaire
  1. Ils se servaient pas de ça à la NdH pour certain DoS ?
    Enfin, ça fait bizarre quand tu te le prends dans la tronche quand même :o

  2. Si tu te rappelle de l’attaque-défense qu’on a fait en cours, ben disons que Manu tirait un peu la gueule au début à force de s’en prendre dans la tronche :D

  3. salut juste une question quand tu écrit: ./slowloris.pl -dns tu l’écrit dans un nouveau terminal ou le meme avec lequel tu as installez les modules?

  4. Le script a juste besoin de quelques modules Perl pour fonctionner, une fois que tu les as, ben t’es tranquille ! Après c’est un script comme un autre, tu l’exécute où tu veux, tu peux même lancer plusieurs sessions différentes sur plusieurs terminaux s’il t’en viens l’envie :)

  5. Bonjour, j’obtiens le message suivant quand je tente de lancer mon script : fichier binaire impossible à lancer…
    Je ne comprends pas d’ou cela viens…

  6. Euh moi il reste bloqué à building socket …

  7. good…ça fonctionne, connaissez pas…merci

  8. ‘This test could take up to 14.3666666666667 minutes.’
    Ben il est pas fait a l’arrache ce script :D

  9. y’a t’il la moindre chance qu’on sois détecté avec Slowloris ?