• Perspective
Publié le 26 avril 2018

Évaluation des performances d’outils de bruteforce d’URL

Pour un pirate, la phase d’énumération et de collecte d’informations d’une application est primordiale et permet d’augmenter les chances de trouver une vulnérabilité à exploiter. L’une des techniques les plus communément utilisées est l’énumération des URL. L’attaquant essaye d’identifier le maximum de ressources accessibles en testant à l’aveugle les différentes URL présentes au sein d’un dictionnaire préalablement choisi / créé.

Pour réaliser cette opération, il est possible de se baser sur des outils automatiques de brute force d’URL qui prennent en entrées l’adresse de l’application ainsi qu’un dictionnaire avec les URL communément utilisées afin de les tester une à une.

Ce type d’outils automatise et facilite grandement cette phase de reconnaissance et est indispensable pour optimiser les résultats.

Pour avoir une idée de la performance de ces outils, nous vous proposons de dresser un benchmark des principaux outils open source existants :

  • Dirbuster
  • Dirb
  • Dirsearch
  • Gobuster
  • Patator
  • Wfuzz

1. Méthodologie de test

Les configurations suivantes ont été appliquées :

  • L’outil est lancé avec le mode récursif désactivé
  • Le brute force est limité à 10 threads
  • Le brute force est uniquement effectué sur les fichiers avec l’extension PHP

Deux dictionnaires ont été utilisés :

  • Un dictionnaire de petite taille contenant 4096 lignes
  • Un dictionnaire de 87650 entrées (directory-list-2.3-small fourni par dirbuster)

Déroulement des tests :

  • Les tests ont été réalisés sur les protocoles HTTP et HTTPS
  • L’énumération a été réalisée sur la racine du site web
  • Chaque scénario a été répété 5 fois en redémarrant le serveur Apache.
  • Le calcul du temps d’exécution de l’attaque a été réalisé par le biais des logs d’Apache, en calculant la différence entre la première et la dernière requête.

La répétition de chaque scénario a permis de s’assurer que le résultat obtenu n’a pas été faussé à cause d’une fluctuation de bande passante ou d’un glitch côté serveur.

2. Présentation des outils de bruteforce d'URL

a. Dirbuster

Le premier outil de ce benchmark est dirbuster, développé par l’OWASP (https://www.owasp.org/index.php/Category:OWASP_DirBuster_Project)

BSSI_OWASP_Dirbuster

L’outil en question a été intégré avec OWASP ZAP en tant que plugin alors que la version standalone n’est plus supportée. Néanmoins la dernière version publiée est toujours fonctionnelle et ne présente aucun bug ou dysfonctionnement connu.

b. Wfuzz

Wfuzz (https://github.com/xmendez/wfuzz) est un outil développé en python par xmendez.

BSSI_WFuzz

Il s’agit d’un outil en ligne de commande qui permet de fuzzer (https://fr.wikipedia.org/wiki/Fuzzing) n’importe quels champs HTTP en indiquant le point d’injection grâce au mot clé « FUZZ ».

c. Dirsearch

Dirsearch (https://github.com/maurosoria/dirsearch) est un outil écrit en python 3 et utilisable en ligne de commande. Il offre approximativement les mêmes fonctionnalités que les outils précédemment cités :

BSSI_Dirsearch

d. Gobuster

Gobuster (https://github.com/OJ/gobuster) est un outil développé en GO.

Il offre les fonctionnalités classiques d’une attaque brute force et peut également être utilisé pour énumérer sur les sous-domaines DNS :

Au cours de ce benchmark, des dysfonctionnements ont été mis en évidence lors de l’utilisation du dictionnaire directory-list-2.3-small. Aucune attaque n’a pu être complétée.

e. Dirb

Dirb (https://github.com/v0re/dirb) est un bruteforceur d’URL en ligne de commande écrit en C par The Dark Raver.

BSSI_Dirb

Des dysfonctionnements ont été mis en évidence lors de la phase de « génération » du dictionnaire lors de l’utilisation du dictionnaire de grande taille.

f. patator

Patator (https://github.com/lanjelot/patator) est un outil de brute force, développé en python offrant des fonctionnalités à peu près similaires à Wfuzz.

BSSI_Patator

Le tableau ci-dessous résume les informations sur les outils utilisés

BSSI_tableau_resume

3. Résultat des tests

L’exécution des tests utilisant le premier dictionnaire a donné les résultats suivants :

  • Le meilleur outil en termes de requêtes par seconde est Patator avec 981 r/s sur le protocole HTTP et 818 r/s sur HTTPS.
  • Wfuzz arrive en deuxième place avec 446 r/s sur HTTP et 350 r/s sur HTTPS.
  • Dirbuster termine troisième avec 327 r/s sur HTTP et HTTPS.

BSSI_resultats_petit_dictionnaire

Contrairement à nos attentes, Dirb qui ne supporte pas le multi threading n’arrive pas en dernière place. En effet, on y trouve Gobuster avec 13 r/s sur HTTP et HTTPS.

L’exécution des tests utilisant le dictionnaire plus large n’entraîne pas de modification sensible en termes de classement :

BSSI_resultats_grand_dictionnaire

Les deux précédents graphiques ont mis en évidence la perte de performance des scans pour les outils WFuzz et Patator entre les tests sur les protocoles HTTP et HTTPS.

Sur le graphique suivant joignant les deux précédents, la perte de performance est évidente :

BSSI_comparaison_resultats

La perte de performance est de l’ordre de 30% pour wfuzz et 40% pour patator. A ce niveau, dirbuster s’en sort le mieux avec une perte de performance de l’ordre de 0,38%.

BSSI_differences_performances_HTTP_HTTPS

4. Conclusion

Ce test a permis d’effectuer un classement des outils open source de brute force.

À partir des statistiques obtenues, nous pouvons affiner le paramétrage des options des deux outils finalistes, à savoir patator et wfuzz. L'objectif est de les faire mieux correspondre au profil de l’application (en fonction de la durée de réponses, stabilité, etc.). Pour un site en recette nous pouvons nous permettre de faire une brute force sur les URL avec 5 ou 10 threads maximum. En revanche, si le site est instable (voire en production), l’introduction d’un délai entre les requêtes (« --rate-limit » pour patator et « -s » pour wfuzz) permet de réduire le stress subit par l’application.

Article rédigé par
Hamza Darghouth