
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, allein anhand extern beobachtbarer Daten. Gebaut für die Entdeckung von Schatten-IT: Die Dienste, die es zu finden lohnt, sind die, von denen niemand erzählt hat.
Benannt nach dem australischen Busch-Kryptid, weil du etwas jagst, von dem alle behaupten, dass es nicht existiert.

574 Signaturen für 412 Anbieter über neun Detektoren hinweg, plus 104 geparkt und auf Bestätigung wartend. Funde werden bewertet, und jeder trägt den Datensatz oder die Antwort mit sich, der bzw. die ihn hervorgebracht hat.
go build -o yowie ./cmd/yowie
Go 1.22 oder neuer. Die Signaturpakete sind in die Binärdatei eingebettet, die einzelne Datei ist also alles, was du zum Deployen brauchst.
yowie [flags] <domain> [candidate ...]
Die Domain ist die Root-Domain der Organisation. Kandidaten sind die kurzen Zeichenketten, nach denen ein Anbieter-Tenant benannt sein könnte — Handelsnamen, Abkürzungen, alte Marken aus Übernahmen. Gib so viele an, wie du kannst; jeder ist eine weitere Chance, einen Tenant zu finden. Ohne Angabe 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 | 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, verschachtelten Includes und Redirects folgend |
dmarc | Ziele für DMARC-Aggregat-/Forensik-Berichte |
bimi | Hosting von BIMI-Logo und Verified Mark Certificate |
mta-sts | Inhalte der MTA-STS-Richtlinie |
tenant | Microsoft-Tenant-ID, föderierter Identitätsanbieter und Schwester-Domains |
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 unauthentifizierten Endpunkte von Microsoft, 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, Übernahmen und aufgegebene Marken zutage bringt. Jede davon
ist eine weitere Domain, die es zu scannen lohnt.
ct kehrt das Discovery-Modell um. Jede andere Prüfung fragt „nutzt 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 verdrahtet, bekommt
ein Zertifikat ausgestellt, und dieses Zertifikat ist öffentlich und dauerhaft.
Ziele, die zu keiner Signatur passen, werden als Leads gemeldet — so findest du
das, wonach du nicht zu suchen wusstest.
Funde werden bewertet, und die Bewertung ist der Punkt:
acme.blogspot.com ist
vielleicht nicht dein acme.Zwei unabhängige Detektoren, die sich bei einem Anbieter einig sind, stufen einen Probable-Fund zu Confirmed hoch. Jeder Fund trägt den exakten Datensatz oder die Antwort mit sich, der bzw. die ihn ausgelöst hat, ein Bericht ist also belastbar, ohne das Tool erneut auszuführen.
Die Hochstufung hat eine Ausnahme, und sie ist der Unterschied zwischen „dieser Tenant existiert" und „dieser Tenant ist deiner" — siehe die Namespace-Anmerkung unter Genauigkeit.
-no-unknown verwirft die nicht zugeordneten Leads, wenn du nur Signal willst.
-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 Binärdatei bettet sie ein;
-signatures <dir> oder YOWIE_SIGNATURES=<dir> lädt stattdessen von der
Festplatte, womit du iterieren kannst, 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 jeder
Kandidatenzeichenkette. Eine Signatur, die {candidate} referenziert, wird
einmal pro Kandidat ausgewertet.
| Typ | Übereinstimmungen | Anmerkungen |
|---|---|---|
txt, cname, mx, ns | match.contains gegen die Datensätze von query | Groß-/Kleinschreibung wird nicht beachtet |
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-Graph | |
dmarc_rua | match.contains gegen DMARC-Berichtsziele | |
cname_target | query ist ein bloßes Hosting-Suffix | Wird auf von ct entdeckte Hosts angewendet; * passt auf ein Label |
disabled: true parkt eine Signatur, ohne die dahinterstehende Recherche zu
verlieren. notes: trägt Analystenhinweise bis in den Bericht.
Führe yowie -validate nach dem Bearbeiten aus. Die Validierung ist streng —
ein unbekannter Schlüssel ist ein Fehler, kein stilles No-op —, und die Pakete
werden auch von go test geprüft, ein Tippfehler kann dich also nicht still und
leise in jedem zukünftigen Scan Abdeckung kosten.