
Découvre les services SaaS auxquels une organisation est abonnée, en utilisant uniquement des données observables de l'extérieur. Conçu pour la découverte du shadow IT.
▄▄▓▓▓▓▓▓▓▓▓▄▄
▄▓▓▒▒▒▒▒▒▒▒▒▒▒▓▓▄ Yowie · tracking down the SaaS nobody told you about
▓▓▒▒░░░░░░░░░░░▒▒▓▓
▓▒░░ ● ● ░▒▓ Domain acme.com.au
▓▒░░ ▼ ░▒▓ Candidates acme, acmecorp
▓▓▒░░ ╰───╯ ░▒▓▓
▀▓▓▒▒░░░░░░░░░▒▒▓▓▀
▀▀▓▓▓▓▓▓▓▓▓▓▓▀▀
Trouve les services SaaS auxquels une organisation est abonnée, en utilisant uniquement des données observables de l'extérieur. Conçu pour la découverte du shadow IT : les services qui valent la peine d'être trouvés sont ceux dont personne ne vous a parlé.
Nommé d'après la cryptide des broussailles australiennes, parce que vous chassez quelque chose dont tout le monde insiste sur le fait qu'il n'existe pas.

786 signatures couvrant 593 fournisseurs réparties sur neuf détecteurs, plus 109 en attente de confirmation. Les résultats sont classés et chacun porte l'enregistrement ou la réponse qui l'a produit.
go build -o yowie ./cmd/yowie
Go 1.22 ou version ultérieure. Les packs de signatures sont intégrés au binaire, donc le fichier unique suffit pour le déploiement.
yowie [flags] <domain> [candidate ...]
Le domaine est le domaine racine de l'organisation. Les candidats sont les chaînes courtes dont un tenant fournisseur pourrait porter le nom — noms commerciaux, abréviations, anciennes marques héritées d'acquisitions. Fournissez-en autant que possible ; chacun représente une chance supplémentaire de trouver un tenant. Si aucun n'est fourni, le premier label du domaine est utilisé.
yowie acme.com.au acme acmecorp acmegroup
yowie -format html -o report.html acme.com.au acme
yowie -format json acme.com.au | jq '.findings[] | select(.confidence=="high")'
yowie -only dns,spf,dmarc -compact acme.com.au
yowie -signatures ./signatures -validate
| Détecteur | Signal |
|---|---|
dns | Jetons de vérification TXT, enregistrements CNAME, MX et NS |
vanity | Locataires hébergés par le fournisseur et nommés d'après l'organisation (acme.zendesk.com) |
http | Empreintes au niveau applicatif pour les services sans empreinte DNS |
spf | Le graphe complet des includes SPF, en suivant les includes imbriqués et les redirections |
dmarc | Destinations des rapports agrégés/forensiques DMARC |
bimi | Hébergement du logo BIMI et du Verified Mark Certificate |
mta-sts | Contenu de la politique MTA-STS |
tenant | ID de locataire Microsoft, fournisseur d'identité fédéré et domaines frères |
ct | Sous-domaines issus des journaux de Certificate Transparency, résolus et attribués |
Sélectionnez avec -only ou -skip, par ex. -skip ct,http pour une passe rapide DNS uniquement.
Les deux derniers méritent une note, car ils trouvent des choses qu'une liste de signatures ne peut pas trouver.
tenant demande aux points de terminaison non authentifiés de Microsoft à qui appartient le domaine. Les informations de fédération d'Autodiscover renvoient tous les domaines rattachés au même locataire, ce qui fait régulièrement apparaître des unités commerciales, des acquisitions et des marques abandonnées. Chacun d'eux est un domaine supplémentaire qui vaut la peine d'être scanné.
ct inverse le modèle de découverte. Toutes les autres vérifications demandent « cette organisation utilise-t-elle le fournisseur X ? » face à une liste fixe, et ne peuvent donc trouver que les fournisseurs pour lesquels quelqu'un a déjà écrit une signature. CT demande « vers quoi cette organisation a-t-elle réellement pointé ses sous-domaines ? » Une équipe qui s'inscrit à un produit et configure support.acme.com obtient un certificat émis, et ce certificat est public et permanent. Les cibles ne correspondant à aucune signature sont signalées comme pistes, ce qui permet de trouver la chose que vous ne saviez pas devoir chercher.
Les résultats sont gradués, et la graduation est l'essentiel :
acme.blogspot.com n'est peut-être pas votre acme.Deux détecteurs indépendants s'accordant sur un fournisseur promeut un résultat Probable en Confirmé. Chaque résultat porte l'enregistrement ou la réponse exacte qui l'a déclenché, de sorte qu'un rapport est défendable sans réexécuter l'outil.
La promotion a une exception, et c'est la différence entre « ce locataire existe » et « ce locataire est le vôtre » — voir la note sur l'espace de noms sous précision.
-no-unknown supprime les pistes non attribuées si vous ne voulez que du signal.
-format cli (par défaut), json, jsonl, csv, html. Utilisez -o pour écrire dans un fichier. Le rapport HTML est autonome — aucune ressource externe — il survit donc à l'envoi par e-mail ou au dépôt sur un lecteur partagé.
La progression va vers stderr et les résultats vers stdout, donc yowie -format json acme.com > out.json affiche toujours une ligne de progression en direct.
Les signatures se trouvent dans signatures/*.yaml. Le binaire les intègre ; -signatures <dir> ou YOWIE_SIGNATURES=<dir> charge depuis le disque à la place, ce qui permet d'itérer sans reconstruire.
version: 1
pack: dns-txt
description: "Domain-ownership verification tokens published as TXT records."
defaults:
confidence: high
signatures:
- id: txt-1password
vendor: "1Password"
category: "Identity & Secrets"
type: txt
query: "{domain}"
match:
contains: "1password-site-verification"
{domain} s'étend au domaine racine, {candidate} à chaque chaîne candidate.
Une signature référençant {candidate} est évaluée une fois par candidate.
| Type | Correspondances | Remarques |
|---|---|---|
txt, cname, mx, ns | match.contains par rapport aux enregistrements de query | Insensible à la casse |
vanity_a, vanity_cname | Comparaison à la référence ; pas de bloc match | query doit contenir {candidate} |
http | match.present, match.absent, ou match.status seul | Voir la gestion des statuts ci-dessous |
spf_include | match.contains par rapport au graphe d'inclusions SPF résolu | |
dmarc_rua | match.contains par rapport aux destinations des rapports DMARC | |
cname_target | query est un suffixe d'hébergement nu | Appliqué aux hôtes découverts par ct ; * correspond à un label |
disabled: true met une signature en attente sans perdre la recherche qui la sous-tend.
notes: transmet les indications de l'analyste jusqu'au rapport.
Exécutez yowie -validate après modification. La validation est stricte — une clé inconnue est une
erreur, pas un no-op silencieux — et les packs sont également vérifiés par go test, ainsi une
faute de frappe ne peut pas discrètement vous coûter de la couverture dans chaque futur scan.