Avant d'auditer quoi que ce soit, il faut savoir ce qui existe. Une banque régionale, un opérateur télécom, un émetteur de monnaie électronique : chacun a davantage de surface exposée qu'il n'en a l'inventaire. Des filiales avec leur propre hébergeur, une agence web partie depuis trois ans en laissant un sous-domaine actif, un environnement de recette accessible depuis Internet, un prestataire qui héberge le portail client sur son propre ASN.
La cartographie d'exposition, c'est reconstruire cet inventaire depuis l'extérieur, avec des sources publiques, sans émettre une seule requête vers un système que l'organisation n'a pas autorisé qu'on touche.
C'est le travail qui vient avant l'audit — et c'est aussi celui où l'on peut se tromper le plus discrètement, parce qu'une carte fausse a exactement la même allure qu'une carte juste.
Passif d'abord, et la frontière est nette
Une source passive est une source qui ne parle pas à la cible :
- les registres de noms de domaine et les données WHOIS/RDAP ;
- les journaux de transparence des certificats — chaque certificat émis y est
publié, ce qui révèle des sous-domaines que personne n'a annoncés ;
- le DNS public et les enregistrements historiques ;
- les plages d'adresses et les ASN déclarés ;
- les magasins d'applications, les dépôts de code publics, les offres d'emploi
(qui nomment la pile technique avec une générosité remarquable) ;
- les agrégateurs de fuites, pour établir l'existence d'une compromission.
Une source active parle à la cible : résolution forcée, balayage de ports, requêtes HTTP, tests de vulnérabilité. Cela change de nature juridique et déontologique.
La règle que j'applique : aucun contrôle actif sans mandat écrit couvrant explicitement l'actif visé. Pas « le client est d'accord », pas « c'est non-intrusif » : un document, signé, qui nomme les domaines. Et le mandat s'arrête là où il s'arrête — un sous-domaine découvert en cours de route n'est pas couvert parce qu'il ressemble aux autres.
Sur les fuites, la ligne est encore plus stricte : on établit qu'une donnée circule, on ne la récupère pas, on ne la stocke pas, on ne l'utilise pas. Un secret identifié se rapporte par son préfixe et sa longueur, jamais en clair.
Piège 1 : déduire l'organisation d'un morceau de nom de domaine
Celui-là m'a coûté le plus, parce qu'il produit un rapport plausible et faux.
Pour interroger un agrégateur de secrets exposés, il faut une clé : le nom de l'organisation. La tentation est d'extraire le premier label du domaine :
organisation = domaine.split(".")[0] # NON
Sur banque-exemple.bf, ça marche. Sur un sous-domaine du type a.exemple.io, ça renvoie a — le nom d'une organisation qui existe, appartient à quelqu'un d'autre, et dont les secrets exposés se retrouvent alors attribués à votre client dans le rapport.
Un rapport qui accuse une organisation de fuites appartenant à une autre n'est pas une imprécision. C'est une faute.
La correction : dériver l'organisation du label enregistrable — le domaine tel qu'il est vendu sous son suffixe public, exemple.io et non a — et, quand le doute subsiste, ne pas deviner. Une case vide est un résultat honnête.
Piège 2 : les domaines de distribution ne vous appartiennent pas
Quand le périmètre est alimenté à partir d'URL d'applications mobiles, on récupère mécaniquement des hôtes comme apps.apple.com ou play.google.com.
Ils entrent alors dans la carte, puis dans les contrôles, puis dans le rapport. Or ce sont les serveurs d'Apple et de Google. Les scanner, c'est tester l'infrastructure d'un tiers sans autorisation — et le signaler comme « exposition du client » est un faux constat en prime.
Même famille : github.com récupéré depuis un lien vers un dépôt, un CDN mutualisé, un raccourcisseur d'URL. La parade est une liste explicite d'hôtes de distribution exclus par construction, et une distinction, dans le modèle de données, entre un hôte que l'organisation contrôle et un hôte où l'organisation publie.
Piège 3 : un motif générique n'est pas un nom d'hôte
Les périmètres publiés contiennent des jokers : *.exemple.com. Un analyseur naïf prend la chaîne telle quelle et la range parmi les hôtes.
Des formes comme -api-*.exemple.com ou une entrée commençant par un point ne sont pas des hôtes : elles ne résolvent pas, elles ne se scannent pas, et les laisser entrer produit des lignes de rapport qui ne correspondent à rien. Un joker est une règle d'appartenance, pas un actif. Il faut soit l'étendre en hôtes réels par la transparence des certificats, soit le conserver comme règle — jamais le confondre avec une cible.
Piège 4 : un outil muet n'est pas un feu vert
Le plus dangereux, et le plus banal.
Un scanner lancé sans son jeu de règles se termine proprement, code de sortie zéro, zéro résultat. Le rapport écrit alors « aucune détection ». Le commanditaire lit « rien à signaler ». Personne n'a rien vérifié.
C'est la même structure que dans l'audit d'APK : « rien trouvé » recouvre deux réalités opposées. D'où, ici aussi, trois états :
| État | Sens |
|---|---|
CONTRÔLÉ — PROPRE | l'outil a tourné avec ses règles, il n'a rien trouvé |
CONTRÔLÉ — CONSTAT | l'outil a tourné, voici ce qu'il a trouvé |
NON EFFECTUÉ | l'outil n'a pas tourné, ou pas correctement — dit explicitement |
La conséquence pratique : le nombre de règles chargées doit être une donnée du rapport, et None ne doit jamais s'afficher comme 0. Ce sont deux choses différentes, et les confondre est précisément le bug.
Ce que la carte établit, et ce qu'elle ne dit pas
Une cartographie passive bien faite donne, avec un bon niveau de confiance :
- l'inventaire des domaines et sous-domaines vivants, y compris ceux que
l'organisation a oubliés ;
- les technologies exposées et leurs versions annoncées ;
- les plages d'adresses et les hébergeurs, donc les dépendances tierces ;
- les applications mobiles publiées et leurs éditeurs déclarés ;
- l'existence d'identifiants compromis en circulation.
Elle ne dit pas si une vulnérabilité est exploitable, si un service est réellement joignable depuis Internet, ni ce qui se passe derrière une page de connexion. Tout cela demande de l'actif, donc un mandat.
Une carte n'est pas un verdict. C'est ce qui permet de décider où aller regarder, et de le décider sur des faits plutôt que sur l'organigramme.