Techniques et outils d’énumération de sous-domaines

Pour identifier la surface d’attaque d’un domaine ou d’une organisation, différentes techniques d’énumération des sous-domaines sont utilisées.
L’objectif est d’obtenir la liste la plus complète possible de tous les sous-domaines associés au domaine ciblé.

Chez Vaadata, nous réalisons ce type d’énumération presque systématiquement lors de nos audits. Cela se fait dans une phase de reconnaissance globale, afin de fournir à nos clients un aperçu des sous-domaines et serveurs exposés.

En plus de l’aspect informatif, cette analyse permet au pentester de mieux comprendre certains éléments de l’architecture du système d’information du client (comme les serveurs dédiés ou les wildcards DNS).

Elle peut aussi révéler des informations techniques ou des fuites de données pertinentes pour l’audit. Par exemple, un sous-domaine dédié à la documentation d’une API publique, une interface d’administration non protégée, ou un sous-domaine utilisé pour du phishing.

Deux types de techniques pour énumérer des sous-domaines

Il existe deux grands types de techniques d’énumération de sous-domaines :

  • Les techniques d’énumération passives : Elles permettent de collecter des sous-domaines sans interagir directement avec les serveurs du domaine ciblé. Leur principal avantage est la discrétion, car ces méthodes n’engendrent aucune interaction directe et n’activent donc pas d’alertes.
  • Les techniques d’énumération actives : Celles-ci impliquent une interaction directe avec la cible (comme des requêtes HTTP ou DNS). Bien qu’elles soient moins discrètes, elles permettent de vérifier l’existence d’un sous-domaine ou d’un service spécifique.

Dans cet article, nous explorerons les différentes techniques que nous utilisons, qu’elles soient actives ou passives. En effet, ces deux types de techniques sont couramment employés lors des pentests. Il ne s’agit pas d’une liste exhaustive, mais d’un aperçu des méthodes les plus courantes.

Quelles sont les différentes techniques d’énumération de sous-domaines ?

Cette technique consiste simplement à visiter le site vitrine ou l’application web du domaine ciblé, puis à cliquer sur tous les liens présents. Certains liens peuvent rediriger vers des sous-domaines différents. L’objectif est de suivre chaque lien jusqu’à explorer tous les sous-domaines possibles.

Bien qu’il s’agisse d’une technique d’énumération active et peu efficace, elle permet d’obtenir des résultats rapidement, en quelques clics. Elle permet aussi d’identifier des sites et applications web conçus pour être accessibles publiquement.

Cette technique est simple et facile à mettre en œuvre. Elle utilise les opérateurs de recherche avancée des moteurs de recherche pour lister les sous-domaines indexés. Bien qu’elle ne permette souvent pas de découvrir une longue liste de sous-domaines, elle offre un aperçu rapide des principaux sous-domaines liés à un serveur web et indexés.

Elle peut être utilisée en complément de la technique manuelle. Étant une méthode passive, elle ne nécessite aucune interaction directe avec les serveurs.

Prenons l’exemple de Google. De nombreux opérateurs permettent des recherches ciblées. L’opérateur « site » en fait partie et permet de lister les pages associées à un site.

Par exemple, pour lister les sous-domaines de vaadata.com, il est possible d’utiliser la syntaxe suivante :

site :.vaadata.com

La requête « .vaadata.com » indique que nous recherchons toutes les URLs se terminant par .vaadata.com. Ensuite, il suffit de consulter les résultats pour identifier plusieurs sous-domaines.

Voici une capture d’écran de la recherche précédente où deux sous-domaines sont visibles :

Résultat de la recherche Google montrée précédemment

Les opérateurs peuvent varier selon les moteurs de recherche utilisés. Et pour plus d’informations sur cette technique s’appuyant sur les moteurs de recherche, nous vous renvoyons vers notre article dédié : Exploiter les google dorks pour renforcer sa sécurité.

La transparence des certificats (Certificate Transparency) est un standard de sécurité conçu pour surveiller et auditer les certificats digitaux. Initialement proposé par Google, il a ensuite été adopté par l’IETF (Internet Engineering Task Force) sous la RFC 9162.

Ce système repose sur des journaux publics répertoriant tous les certificats émis par des autorités de certification reconnues. L’objectif est de détecter facilement les certificats invalides ou frauduleux.

Ces journaux sont accessibles à tous et peuvent être utilisés pour énumérer les sous-domaines d’un domaine. Nous utilisons plusieurs moteurs de recherche pour interroger ces journaux, dont trois principaux :

Exemple de recherche sur crt.sh

La capture ci-dessus montre une recherche sur le domaine « vaadata.com » via le site « crt.sh ». En rouge, nous voyons que des certificats ont été émis pour différents sous-domaines.

Cette méthode est passive, mais il faut rester prudent : certains sous-domaines listés peuvent ne plus être accessibles ou avoir disparu. Il peut être utile d’utiliser des outils actifs pour vérifier si un sous-domaine est toujours valide.

Le brute force de sous-domaines s’effectue en deux étapes.

Étape 1 :

La première étape consiste à générer une liste de sous-domaines potentiels. On peut utiliser des dictionnaires de mots-clés pour créer une très grande liste de sous-domaines. Ces dictionnaires, disponibles en ligne, ne se basent pas sur des permutations spécifiques, mais sur un large éventail de possibilités. Il est aussi possible de créer ses propres dictionnaires avec des outils.

Une autre méthode consiste à générer des variations ou permutations à partir d’un sous-domaine existant. Par exemple, si le sous-domaine « api.vaadata.com » existe, il peut être utile de tester des variantes comme :

  • api1.vaadata.com
  • api2.vaadata.com
  • api-dev.vaadata.com
  • dev.api.vaadata.com

Il est possible de combiner ces deux techniques pour générer une liste plus complète.

Étape 2 :

Une fois la liste générée, il faut identifier les sous-domaines valides. Pour cela, on utilise des outils comme « puredns » ou « dnsx« , qui tentent de résoudre les sous-domaines. Selon la taille de la liste, cela peut générer des centaines, voire des milliers de requêtes DNS, rendant cette méthode active et peu discrète.

L’idéal est d’utiliser une liste fiable de résolveurs DNS pour garantir des résultats précis et éviter d’être bloqué en raison d’un trop grand nombre de requêtes.

De nombreuses ressources en ligne permettent d’obtenir des informations sur un domaine. Ce sont des techniques passives :

  • Les agrégateurs DNS : Ce sont des services qui collectent les données DNS de nombreux serveurs et permettent d’effectuer des recherches sur ces données (comme VirusTotal, DNSDumpster, Netcraft, etc.).
  • Les archives web : Ces services enregistrent l’état d’un site ou d’un domaine à une période donnée. Le plus connu est la Wayback Machine. En recherchant sur ces archives, il est possible de retrouver des sous-domaines associés à un client.
  • Shodan : Ce moteur de recherche spécialisé dans les objets connectés peut également fournir des informations sur les sous-domaines liés à une IP ou un domaine.
Exemple de recherche sur Shodan avec la section « Subdomains » visible

Il est important de noter qu’il existe d’autres techniques pour trouver des sous-domaines, utilisables dans des cas spécifiques :

  • Transfert de zone possible uniquement si le serveur DNS est mal configuré.
  • Analyse des CSP contenues dans les réponses HTTP.
  • Analyse des données SPF et CNAME
  • Énumération des « Virtual Hosts »

Outils utilisés pour énumérer des sous-domaines

Avant de conclure cet article, voici une liste d’outils connus pour automatiser la recherche de sous-domaines. Ces outils reprennent certaines des techniques évoquées précédemment :

Amass est un outil gratuit proposé par l’OWASP pour cartographier la surface d’attaque réseau d’une cible. Il permet d’énumérer les sous-domaines en utilisant des techniques passives et actives.

Amass s’appuie sur de nombreuses API et sources de données, telles que des moteurs de recherche, la transparence des certificats et l’énumération DNS.

Subfinder est un outil spécialement conçu pour l’énumération de sous-domaines. Il utilise uniquement des sources passives. Son principal avantage est sa rapidité. Il est possible de lui fournir une liste de résolveurs DNS pour vérifier la validité des sous-domaines identifiés.

Gotator est un outil dédié à la génération de dictionnaires par des techniques de permutation. Il est largement utilisé pour créer des listes de sous-domaines potentiels.

Puredns est un outil qui permet de résoudre rapidement des sous-domaines et de réaliser du brute force sur ceux-ci. Il dispose également d’un algorithme pour détecter les certificats wildcard, ce qui aide à éviter des résultats non pertinents.

SecList est un dépôt qui contient de nombreux dictionnaires utiles pour différents scénarios. Des dictionnaires de mots-clés peuvent être utilisés pour générer des listes de sous-domaines potentiels.

Il existe de nombreux autres outils que nous vous laisserons découvrir par vous mêmes : BGP, MassDNS, Subliste3r, etc.

Conclusion

Comme nous l’avons vu, plusieurs techniques existent, chacune avec ses propres avantages. Pour obtenir les résultats les plus complets, il est idéal de combiner plusieurs de ces méthodes. Par exemple, vous pouvez développer un script personnalisé ou agréger les résultats de différents outils.

Multiplier les techniques et les outils va donc permettre d’augmenter significativement les chances de découvrir plus de sous-domaines.

Nous vous laissons avec un exemple de workflow reprenant les différentes techniques énumérées ci-dessus. Ce workflow combine des méthodes actives et passives pour avoir une liste finale de sous-domaines existants.

Il s’agit simplement d’un exemple pour vous donner une idée de la démarche globale. Il n’est bien sûr pas exhaustif et peut être amélioré selon vos objectifs et vos connaissances :

  1. Faire une liste de sous-domaines avec les bases de « certificate transparency ».
  2. Générer une liste de sous-domaines potentiels basée sur un dictionnaire de mots clés.
  3. Générer une liste de sous-domaines potentiels basée sur les permutations ou les altérations.
  4. Utiliser toute autre technique de recherche passive adéquate.
  5. Combiner l’ensemble des résultats précédents dans une seule liste avec des entrées uniques par ligne correspondant à un sous-domaine potentiel.
  6. Passer cette liste dans un outil permettant de résoudre chacune des entrées afin d’obtenir une liste de sous-domaines actifs.
  7. Utiliser la technique des moteurs de recherche et ajouter les sous-domaines à la liste des sous-domaines actifs s’ils ne sont pas déjà présents.

L’utilisation de différents outils est bien sûr recommandée pour le workflow précédent.

Auteur : Yoan MONTOYA – Pentester @Vaadata