
Findet die SaaS-Dienste, die ein Unternehmen abonniert hat, ausschließlich anhand von extern beobachtbaren Daten. Entwickelt für die Entdeckung von Schatten-IT.
▄▄▓▓▓▓▓▓▓▓▓▄▄
▄▓▓▒▒▒▒▒▒▒▒▒▒▒▓▓▄ Yowie · tracking down the SaaS nobody told you about
▓▓▒▒░░░░░░░░░░░▒▒▓▓
▓▒░░ ● ● ░▒▓ Domain acme.com.au
▓▒░░ ▼ ░▒▓ Candidates acme, acmecorp
▓▓▒░░ ╰───╯ ░▒▓▓
▀▓▓▒▒░░░░░░░░░▒▒▓▓▀
▀▀▓▓▓▓▓▓▓▓▓▓▓▀▀
Findet die SaaS-Dienste, die eine Organisation abonniert hat, und nutzt dabei ausschließlich von außen beobachtbare Daten. Entwickelt für Shadow-IT-Erkennung: Die Dienste, die es zu finden lohnt, sind diejenigen, von denen Ihnen niemand erzählt hat.
Benannt nach dem australischen Busch-Kryptiden, weil Sie etwas jagen, von dem alle behaupten, dass es nicht existiert.

786 Signaturen für 593 Anbieter über neun Detektoren hinweg, plus 109 zurückgestellt und wartend auf Bestätigung. Funde werden bewertet, und jeder trägt den Datensatz oder die Antwort mit sich, die ihn hervorgebracht hat.
go build -o yowie ./cmd/yowie
Go 1.22 oder neuer. Die Signaturpakete sind in der Binärdatei eingebettet, sodass die einzelne Datei alles ist, was Sie zum Bereitstellen benötigen.
yowie [flags] <domain> [candidate ...]
Die Domain ist die Root-Domain der Organisation. Kandidaten sind die kurzen Zeichenketten, nach denen ein Vendor-Tenant benannt sein könnte — Handelsnamen, Abkürzungen, alte Marken, die aus Übernahmen übernommen wurden. Geben Sie so viele wie möglich an; jeder einzelne ist eine weitere Chance, einen Tenant zu finden. Wenn keine angegeben werden, wird das erste Label der Domain verwendet.
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
| Detektor | Signal |
|---|---|
dns | TXT-Verifizierungstoken, CNAME-, MX- und NS-Einträge |
vanity | Vom Anbieter gehostete Tenants, die nach der Organisation benannt sind (acme.zendesk.com) |
http | Fingerabdrücke auf Anwendungsebene für Dienste ohne DNS-Fußabdruck |
spf | Der vollständige SPF-Include-Graph, einschließlich verschachtelter Includes und Redirects |
dmarc | Ziele für DMARC-Aggregat-/Forensikberichte |
bimi | Hosting von BIMI-Logos und Verified Mark Certificates |
mta-sts | Inhalte der MTA-STS-Richtlinie |
tenant | Microsoft-Tenant-ID, föderierter Identitätsanbieter und Schwesterdomains |
ct | Subdomains aus Certificate-Transparency-Logs, aufgelöst und zugeordnet |
Auswählen mit -only oder -skip, z. B. -skip ct,http für einen schnellen reinen DNS-Durchlauf.
Die letzten beiden verdienen eine Anmerkung, weil sie Dinge finden, die eine Signaturliste nicht finden kann.
tenant fragt die nicht authentifizierten Endpunkte von Microsoft, zu wem die Domain gehört. Die Föderationsinformationen von Autodiscover liefern jede Domain, die an denselben Tenant angehängt ist, was regelmäßig Geschäftsbereiche, Akquisitionen und aufgegebene Marken zutage bringt. Jede davon ist eine weitere Domain, die es wert ist, gescannt zu werden.
ct kehrt das Discovery-Modell um. Jede andere Prüfung fragt „verwendet diese Organisation Anbieter X?“ gegen eine feste Liste, kann also nur Anbieter finden, für die jemand bereits eine Signatur geschrieben hat. CT fragt „worauf hat diese Organisation ihre Subdomains tatsächlich zeigen lassen?“ Ein Team, das sich für ein Produkt anmeldet und support.acme.com einrichtet, bekommt ein Zertifikat ausgestellt, und dieses Zertifikat ist öffentlich und dauerhaft. Ziele, die zu keiner Signatur passen, werden als Leads gemeldet – so findet man das, von dem man nicht wusste, dass man danach suchen muss.
Befunde werden bewertet, und die Bewertung ist der Punkt:
acme.blogspot.com ist vielleicht nicht Ihr acme.Wenn zwei unabhängige Detektoren bei einem Anbieter übereinstimmen, wird ein Probable-Befund zu Confirmed hochgestuft. Jeder Befund enthält den genauen Datensatz oder die Antwort, die ihn ausgelöst hat, sodass ein Bericht auch ohne erneutes Ausführen des Tools belastbar ist.
Die Hochstufung hat eine Ausnahme, und sie ist der Unterschied zwischen „dieser Tenant existiert“ und „dieser Tenant gehört Ihnen“ – siehe die Namespace-Anmerkung unter Genauigkeit.
-no-unknown verwirft die nicht zugeordneten Leads, wenn Sie nur Signal möchten.
-format cli (Standard), json, jsonl, csv, html. Mit -o in eine Datei schreiben. Der HTML-Bericht ist eigenständig – keine externen Assets –, sodass er es übersteht, per E-Mail verschickt oder auf einem Share-Laufwerk abgelegt zu werden.
Fortschritt geht nach stderr und Ergebnisse nach stdout, sodass yowie -format json acme.com > out.json weiterhin eine Live-Fortschrittszeile anzeigt.
Signaturen liegen in signatures/*.yaml. Die Binary bettet sie ein; -signatures <dir> oder YOWIE_SIGNATURES=<dir> lädt stattdessen von der Festplatte, womit Sie iterieren können, ohne neu zu bauen.
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} wird zur Root-Domain erweitert, {candidate} zu jedem Kandidaten-String.
Eine Signatur, die auf {candidate} verweist, wird einmal pro Kandidat ausgewertet.
| Typ | Übereinstimmung | Hinweise |
|---|---|---|
txt, cname, mx, ns | match.contains gegen die Records von query | Groß-/Kleinschreibung wird nicht unterschieden |
vanity_a, vanity_cname | Baseline-Vergleich; kein match-Block | query muss {candidate} enthalten |
http | match.present, match.absent oder match.status allein | Siehe Statusbehandlung unten |
spf_include | match.contains gegen den aufgelösten SPF-Include-Graphen | |
dmarc_rua | match.contains gegen DMARC-Report-Ziele | |
cname_target | query ist ein reines Hosting-Suffix | Wird auf Hosts angewendet, die durch ct entdeckt wurden; * entspricht einem Label |
disabled: true legt eine Signatur still, ohne die dahinterstehende Recherche zu verlieren.
notes: transportiert Analystenhinweise bis in den Report.
Führe nach dem Bearbeiten yowie -validate aus. Die Validierung ist strikt — ein unbekannter Schlüssel ist ein
Fehler, kein stilles No-op — und die Packs werden zusätzlich durch go test geprüft, sodass ein
Tippfehler nicht unbemerkt deine Abdeckung in jedem zukünftigen Scan kosten kann.