- Perspective
É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)
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.
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 :
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.
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.
Le tableau ci-dessous résume les informations sur les outils utilisés
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.
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 :
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 :
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%.
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.