Le lab des experts

Comment trouver tous les sous-domaines d’un nom de domaine ?

Generic domain

Il y a plusieurs raisons pour lesquelles vous pourriez vouloir lister tous les sous-domaines d’un nom de domaine, mais en général, ces raisons se résument à soit préparer une attaque sur un site web (ce que nous ne cautionnons évidemment pas) soit à vous protéger d’une telle attaque, y compris en auditant vos sous-domaines pour vous assurer qu’il n’y a pas de sous-domaines inutilisés qui traînent dans votre fichier de zone DNS.

Vous pouvez également souhaiter obtenir la liste complète de tous les services vers lesquels pointe un nom de domaine, par exemple, pour le transférer vers un autre fournisseur DNS.

Dans cet article, nous allons voir ce qu’est un sous-domaine, sur le plan technique, et comment vous pouvez ou non (et pourquoi pas !) obtenir une image globale des sous-domaines d’un nom de domaine.

Qu’est-ce qu’un sous-domaine ?

Commençons par les bases.

Lorsque vous enregistrez un nom de domaine, le registre du domaine (c’est-à-dire l’entité qui gère la délégation des noms de domaine dans un nom de domaine de premier niveau particulier, ou TLD, également appelé parfois plus familièrement extension ou terminaison de domaine) vous délègue l’autorité sur la zone DNS de ce nom de domaine.

N’oubliez pas que le système de noms de domaine est hiérarchique. Cela signifie que l’autorité du domaine racine est concentrée à l’IANA, la partie de l’ICANN responsable de la délégation des noms de domaine de premier niveau aux registres, qui délèguent ensuite l’autorité aux personnes qui achètent des noms de domaine.

Cela signifie que si vous enregistrez le nom de domaine exemple.com, le registre .com vous délègue l’autorité sur exemple.com et toute autre « branche enfant » de cet arbre de domaine

Et tout comme .com a l’autorité de l’IANA pour créer tout nouveau .com demandé, vous avez également l’autorité pour créer toute nouvelle branche enfant de l’arbre ‘exemple.com’.

Vous pouvez donc créer foo.exemple.com, www.example.com, www.foo.example.com ou www.foo.www.foo.example.com.

Ces branches enfants sont ce que nous appelons des sous-domaines.

Comment créer un sous-domaine ?

La façon dont vous créez un sous-domaine dans un nom de domaine que vous avez enregistré consiste simplement à associer ce sous-domaine à une ressource dans votre fichier de zone DNS. Le type d’enregistrement DNS que vous utiliserez peut dépendre du type de ressource que vous lui associez.

Cependant, il existe un type d’enregistrement DNS qui est de loin le plus utilisé pour les sous-domaines : l’enregistrement CNAME.

Un CNAME est un enregistrement de « Nom Canonique ». Contrairement aux autres types d’enregistrement DNS qui créent une relation biunivoque entre un sous-domaine et une ressource (comme un enregistrement A), un CNAME transforme en fait un sous-domaine en un alias d’un autre nom de domaine. En d’autres termes, il fait correspondre ce sous-domaine à un autre domaine.

Cela lui confère en fait une plus grande flexibilité, et c’est pourquoi le type d’enregistrement CNAME est de loin le plus couramment utilisé pour créer des sous-domaines.

Qu’est-ce que vous pouvez faire avec un sous-domaine ?

Les sous-domaines peuvent être utilisés pour n’importe quelle ressource. Le plus souvent, ils sont utilisés pour définir des espaces de noms séparés, comme des sites web distincts mais apparentés, ou pour indiquer quelque chose sur la structure d’un site web. Par exemple, il n’est pas rare de voir des implémentations comme shop.example.com pour la boutique en ligne ou l’étape de facture d’un site web ou encore mail.example.com pour un service de messagerie web hébergé. Au début du World Wide Web, le sous-domaine www était utilisé pour le site web associé à un nom de domaine, tandis que le domaine nu (sans sous-domaine) était utilisé de manière plus « générale » (par exemple pour un service de messagerie).

Les sous-domaines sont également souvent utilisés comme un moyen d' »étendre » le DNS au-delà des services de base. C’est le cas de DomainKeys Identified Mail, ou DKIM. DKIM est un système qui utilise le DNS pour authentifier un expéditeur de mail au moyen d’une authentification par clé publique. La partie clé publique de l’authentification est stockée dans le DNS dans un enregistrement de type TXT.

Un enregistrement DKIM utilise des sous-domaines dans le cadre de la syntaxe de stockage de cette clé. Tous les enregistrements DKIM sont des enregistrements TXT sur un sous-domaine du sous-domaine _domainkey (par exemple selector._domainkey.example.com).

Un autre exemple est la vérification du contrôle du domaine via le DNS pour la création d’un certificat SSL/TLS.

Dans ce cas, une autorité de certification (CA) SSL/TLS demande que la personne à l’origine de la création d’un certificat SSL/TLS vérifie qu’elle est bien le titulaire du nom de domaine en question (ou un employé/représentant du titulaire).

L’autorité de certification demande à la personne à l’origine du certificat d’ajouter un enregistrement CNAME particulier à son fichier de zone DNS, ce qui crée effectivement un sous-domaine (généralement une chaîne de caractères aléatoire, telle que « 12a345b6c78d90efg1234hi56j ») qui pointe vers un sous-domaine spécifique, similaire, à caractères aléatoires, de son propre nom de domaine.

Il existe sans doute d’autres cas d’utilisation intéressants pour les sous-domaines, mais cela vous donne une idée générale de la manière dont les sous-domaines peuvent être utilisés.

En résumé, il est important de savoir qu’un sous-domaine est une « branche enfant » d’un nom de domaine donné. Dans le système hiérarchique du DNS, il fait partie de l' »espace de noms » délégué au titulaire d’un nom de domaine lorsqu’il enregistre ce dernier auprès d’un registre.

Les sous-domaines ont plusieurs usages. Plus précisément, ils sont souvent utilisés pour des sites web autonomes ayant un certain lien avec le site web hébergé sur le domaine nu ou des services spécifiques offerts par un site web, mais pas toujours. Dans ces cas, cependant, un enregistrement CNAME est généralement utilisé. Parfois, ils sont créés afin d’utiliser le DNS pour vérifier un nom de domaine sous une forme ou une autre, ou pour d’autres cas d’utilisation.

Dans tous les cas, les sous-domaines sont créés dans le fichier de zone DNS d’un nom de domaine.

Nous sommes maintenant disposé(e)s à aborder la façon dont vous pouvez identifier les sous-domaines d’un nom de domaine donné.

Où pouvez-vous trouver tous les sous-domaines d’un domaine ?

Dans le fichier de zone DNS

D’après les explications ci-dessus, vous avez probablement déjà compris que la meilleure manière de déterminer les sous-domaines d’un nom de domaine donné est de regarder dans la zone DNS.

Si vous êtes le titulaire ou l’administrateur d’un nom de domaine, et que vous avez accès au fichier de zone DNS de ce domaine, c’est très simple. Il vous suffit de consulter le fichier de zone DNS.

Si vous gérez vos DNS chez un bureau d’enregistrement comme Gandi, cela est disponible depuis l’interface de gestion mise à votre disposition.

Comment trouver votre fichier de zone DNS chez Gandi

Vous devriez pouvoir trier votre liste d’enregistrements DNS par « Nom » et obtenir ainsi une liste de tous les sous-domaines (les sous-domaines seront tout ce qui n’est pas en @).

Vous pouvez également trier par ‘Type’ et ne consulter que les enregistrements de type CNAME si vous voulez exclure les enregistrements TXT et MX.

Une autre façon d’obtenir une liste de tous vos sous-domaines en utilisant l’interface de Gandi, particulièrement utile pour les noms de domaine qui ont un grand nombre de sous-domaines, lorsque vous voulez une liste de tous les sous-domaines de plusieurs noms de domaine, ou les deux, est d’utiliser notre fonctionnalité d’exportation DNS.

Vous pouvez utiliser cette fonction pour créer et télécharger un fichier CSV de l’ensemble du fichier de zone de votre domaine, ou des fichiers de zone de plusieurs noms de domaine. Il vous suffit ensuite de trier les colonnes par nom ou par type d’enregistrement.

Pouvez-vous interroger le DNS pour tous les sous-domaines ?

La réponse courte est : non. Vous ne pouvez pas simplement interroger le DNS pour obtenir la liste de tous les sous-domaines d’un domaine particulier.

Lorsque vous interrogez le DNS, comme lorsque vous demandez une page web dans votre navigateur, ou dans votre fenêtre de Terminal en utilisant les commandes `host`, `dig`, ou `nslookup` (elles sont dans la plupart des cas fonctionnellement identiques, donc nous n’entrerons pas dans les différences ici). Ces méthodes fonctionnent lorsque vous interrogez un domaine ou un sous-domaine qui est déjà connu. En revanche, si vous essayez d’obtenir une liste de tous les sous-domaines, le problème est que les sous-domaines ne sont pas déjà connus. Lorsque vous interrogez le DNS, il est sous-entendu que vous connaissez déjà le domaine ou le sous-domaine que vous recherchez.

Il existe toutefois une exception partielle à cette règle.

Pouvez-vous obtenir une liste de tous les sous-domaines via le transfert de zone ?

Techniquement, oui. Et c’est l’exception partielle mentionnée ci-dessus. Vous pouvez techniquement obtenir une liste de tous les sous-domaines si votre requête utilise le transfert de zone (aka AXFR).

Pour cette requête, vous utiliserez `host`, en utilisant les modificateurs -a et -l :

host -a -l example.com

Dans cet exemple, `-a` est équivalent à `ANY` – c’est-à-dire qu’il indique que la sortie sera verbeuse et `-l` indique l’utilisation du transfert de zone. En d’autres termes, la commande utilise le transfert de zone pour lister tous les hôtes d’un domaine, c’est-à-dire tous les sous-domaines.

Cette méthode pose cependant un énorme problème, à savoir la question des autorisations.

En règle générale, le transfert de zone – alias AXFR – est désactivé pour la plupart des demandeurs.

Pourquoi le transfert de zone est-il désactivé pour la plupart des domaines ?

Tout d’abord, abordons la notion de transfert de zone.

Le transfert de zone, ou AXFR (le A dans AXFR signifie « Autoritaire » et le XFR signifie « Transfert ») est un protocole de réplication d’un fichier de zone DNS.

Le principal cas d’utilisation d’AXFR est la duplication d’une zone DNS entre un serveur de noms primaire et un serveur de noms secondaire. En d’autres termes, l’enregistrement de votre nom de domaine nécessite au moins deux serveurs de noms DNS – un primaire et un secondaire. Il peut y en avoir plus, mais c’est la condition de base. Comme le secondaire est une sauvegarde, un transfert de zone peut être utilisé pour transférer l’intégralité du contenu du fichier de zone vers le serveur de nom secondaire.

Au début du DNS, ou du moins du protocole de transfert de zone, il y avait peu de raisons de restreindre l’utilisation de ce protocole. Mais il est vite apparu que le fait de pouvoir cartographier l’ensemble de la zone d’un nom de domaine fournit aux attaquants potentiels beaucoup trop d’informations à découvert pour être sûrs.

En particulier, si quelqu’un veut usurper ou empoisonner votre DNS, avoir une copie complète du fichier de zone lui sera très utile.

Ainsi, en tant que pratique de sécurité par l’obscurité, le protocole de transfert de zone est maintenant presque universellement restreint sur les serveurs DNS, soit par l’adresse IP, soit par la signature des transferts de zone. Mais certains attaquants tenteront toujours de contourner ces restrictions – et y parviendront.

En dehors des recherches DNS, quels moyens pouvez-vous utiliser pour trouver des sous-domaines ?

À ce stade, il convient de noter que les cas d’utilisation légitimes pour obtenir une liste de tous les sous-domaines d’un nom de domaine commencent à se faire rares. Si vous ne pouvez pas accéder au fichier de zone, il y a de fortes chances que la raison principale pour laquelle vous essayez d’obtenir la liste de tous vos sous-domaines soit une sorte d’audit, éventuellement un audit de sécurité ou un test de pénétration.

Étant donné que les sous-domaines non sécurisés peuvent constituer un risque sérieux pour la sécurité (lien en anglais), il est utile de connaître les autres options disponibles au cas où vous en auriez besoin.

Cependant, sans accès direct au fichier de zone, vous ne pourrez jamais être sûr(e) d’avoir une liste partielle des sous-domaines.

Force brute / deviner

La stratégie la plus évidente et la plus difficile consiste à utiliser la force brute, c’est-à-dire à deviner.

Il y a des sous-domaines qui sont définis pour pratiquement tous les noms de domaine, comme www, et d’autres qui sont très communs, comme shop ou mail. Mais en effectuant une requête DNS avec `dig`, `nslookup` ou `host` pour le plus grand nombre possible de sous-domaines, vous pourrez en trouver de cachés. Vous pouvez essayer d’utiliser un script, mais cela peut prendre beaucoup de temps.

Pouvez-vous utiliser des recherches DNS inversées pour trouver des sous-domaines ?

L’une des méthodes pour trouver des sous-domaines cachés consiste à identifier d’abord l’adresse IP vers laquelle ils peuvent pointer. Si vous parvenez à trouver certains sous-domaines en devinant simplement, par exemple mail.example.com et www.example.com, et que vous remarquez qu’ils pointent vers des adresses IP différentes dans la même plage, vous pouvez raisonnablement supposer que d’autres sous-domaines peuvent utiliser d’autres adresses IP dans la même plage.

Pour rechercher le nom de domaine qui correspond à une adresse IP, vous devez effectuer l’inverse d’une recherche DNS, ou en d’autres termes, une recherche DNS inversée. Vous pouvez utiliser les mêmes commandes que celles que nous avons utilisées ci-dessus pour effectuer des recherches DNS : `dig` et `host`. Avec `host`, il vous suffit de lancer une commande comme `host 123.45.678.910` pour effectuer une recherche DNS inversée. Avec `dig`, vous devez ajouter `-x` pour que votre requête soit `dig -x 123.45.678.910`.

Cette méthode est cependant loin d’être infaillible. Si vous utilisez des CNAME pour vos sous-domaines, une recherche DNS inversée ne vous aidera pas à les identifier car le CNAME, comme expliqué ci-dessus, est un alias, et l’adresse IP sera associée au domaine vers lequel le CNAME pointe.

Quels sont les autres moyens pour trouver des sous-domaines ?

Il convient également de mentionner qu’il existe de nombreux outils en ligne permettant de trouver des sous-domaines, généralement en parcourant le Web à la recherche d’enregistrements de sous-domaines.

Vous trouverez ici une liste d’outils permettant de rechercher des sous-domaines (lien en anglais).

Rechercher une liste de tous les sous-domaines

Il existe un certain nombre de raisons pour lesquelles vous pourriez vouloir obtenir une liste de tous les sous-domaines d’un nom de domaine particulier, surtout si vous êtes le titulaire de ce nom de domaine. En général, vous souhaitez obtenir une telle liste dans le cadre d’un audit de votre nom de domaine et des ressources qui y sont liées, ce qui est particulièrement vrai pour les audits de sécurité.

En définitive, la meilleure façon d’obtenir une liste de tous les sous-domaines d’un nom de domaine est d’avoir accès au fichier de zone DNS de ce nom de domaine. Cependant, le fait d’y avoir accès ne facilite pas forcément les choses. Si vous ne pouvez pas utiliser le protocole de transfert de zone pour copier directement la zone d’un nom de domaine, vous pouvez souvent la consulter sur le site web de votre gestionnaire de services DNS (ou de votre bureau d’enregistrement, ou de votre hébergeur, selon l’endroit où vous avez vos DNS). Votre fournisseur peut également proposer des services comme l’export de DNS de Gandi, qui vous permet de télécharger un fichier CSV d’une ou plusieurs de vos zones DNS, rendant possible une liste complète de vos sous-domaines sur un ou plusieurs noms de domaine.

Si vous n’avez pas accès au fichier de zone, cela sera plus difficile, mais pas impossible. Il existe un certain nombre de méthodes différentes que vous pouvez utiliser, y compris l’estimation/la force brute, les recherches DNS inversées et les outils en ligne spécialisés. Pour obtenir la liste la plus complète, vous devrez probablement combiner ces trois méthodes.

En fin de compte, la possibilité de créer un nombre infini de sous-domaines sur un nom de domaine donné est l’un des aspects les plus précieux de l’enregistrement d’un nom de domaine. Cependant, les sous-domaines peuvent aussi être un handicap, il est donc important de veiller à ce que les sous-domaines non sécurisés ne vous causent pas de problèmes par la suite.