
Individua i servizi SaaS a cui un'organizzazione è abbonata, utilizzando esclusivamente dati osservabili dall'esterno. Progettato per la scoperta dello shadow IT.
▄▄▓▓▓▓▓▓▓▓▓▄▄
▄▓▓▒▒▒▒▒▒▒▒▒▒▒▓▓▄ Yowie · tracking down the SaaS nobody told you about
▓▓▒▒░░░░░░░░░░░▒▒▓▓
▓▒░░ ● ● ░▒▓ Domain acme.com.au
▓▒░░ ▼ ░▒▓ Candidates acme, acmecorp
▓▓▒░░ ╰───╯ ░▒▓▓
▀▓▓▒▒░░░░░░░░░▒▒▓▓▀
▀▀▓▓▓▓▓▓▓▓▓▓▓▀▀
Trova i servizi SaaS a cui un'organizzazione è abbonata, utilizzando solo dati osservabili esternamente. Pensato per la scoperta dello shadow IT: i servizi che vale la pena trovare sono quelli di cui nessuno ti ha parlato.
Chiamato così in onore del criptide dei boschi australiani, perché stai dando la caccia a qualcosa che tutti insistono nel dire che non esiste.

786 firme che coprono 593 fornitori distribuite su nove rilevatori, più 109 in attesa di conferma. I risultati sono classificati e ognuno riporta la registrazione o la risposta che lo ha prodotto.
go build -o yowie ./cmd/yowie
Go 1.22 o successivo. I pacchetti di firme sono incorporati nel binario, quindi il singolo file è tutto ciò che serve per il deployment.
yowie [flags] <domain> [candidate ...]
Il dominio è il dominio radice dell'organizzazione. I candidati sono le stringhe brevi da cui potrebbe derivare il nome di un tenant di un fornitore — nomi commerciali, abbreviazioni, vecchi marchi ereditati da acquisizioni. Forniscine il maggior numero possibile; ognuno è un'ulteriore possibilità di trovare un tenant. Se non ne viene fornito nessuno, viene utilizzata la prima etichetta del dominio.
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
| Rilevatore | Segnale |
|---|---|
dns | Token di verifica TXT, record CNAME, MX e NS |
vanity | Tenant ospitati dal fornitore con il nome dell'organizzazione (acme.zendesk.com) |
http | Impronte a livello applicativo per servizi senza traccia DNS |
spf | Il grafo completo degli include SPF, seguendo include e redirect annidati |
dmarc | Destinazioni dei report aggregati/forensi DMARC |
bimi | Hosting del logo BIMI e del Verified Mark Certificate |
mta-sts | Contenuto delle policy MTA-STS |
tenant | ID tenant Microsoft, provider di identità federato e domini fratelli |
ct | Sottodomini dai log di Certificate Transparency, risolti e attribuiti |
Seleziona con -only o -skip, ad es. -skip ct,http per una rapida scansione solo DNS.
Gli ultimi due meritano una nota, perché trovano cose che una lista di firme non può trovare.
tenant chiede agli endpoint non autenticati di Microsoft a chi appartiene il dominio. Le informazioni di federazione di Autodiscover restituiscono ogni dominio collegato allo stesso tenant, il che fa emergere regolarmente business unit, acquisizioni e marchi abbandonati. Ognuno di essi è un altro dominio che vale la pena scansionare.
ct inverte il modello di scoperta. Ogni altro controllo chiede "questa organizzazione usa il fornitore X?" rispetto a una lista fissa, quindi può trovare solo fornitori per cui qualcuno ha già scritto una firma. CT chiede "a cosa ha effettivamente puntato questa organizzazione i suoi sottodomini?" Un team che si iscrive a un prodotto e configura support.acme.com ottiene un certificato emesso, e quel certificato è pubblico e permanente. I target che non corrispondono a nessuna firma vengono segnalati come lead, ed è così che trovi la cosa che non sapevi di dover cercare.
I risultati sono classificati, e la classificazione è il punto:
acme.blogspot.com potrebbe non essere il tuo acme.Due rilevatori indipendenti concordi su un fornitore promuovono un risultato Probable a Confirmed. Ogni risultato porta con sé l'esatto record o la risposta che lo ha attivato, così un report è difendibile senza rieseguire lo strumento.
La promozione ha un'eccezione, ed è la differenza tra "questo tenant esiste" e "questo tenant è tuo" — vedi la nota sul namespace in accuratezza.
-no-unknown elimina i lead non attribuiti se vuoi solo il segnale.
-format cli (predefinito), json, jsonl, csv, html. Usa -o per scrivere su un file. Il report HTML è autonomo — nessuna risorsa esterna — quindi sopravvive all'invio via email o al salvataggio su una share drive.
Il progresso va su stderr e i risultati su stdout, quindi yowie -format json acme.com > out.json mostra comunque una riga di progresso in tempo reale.
Le firme risiedono in signatures/*.yaml. Il binario le incorpora; -signatures <dir> o YOWIE_SIGNATURES=<dir> carica invece dal disco, ed è così che si itera senza ricompilare.
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} si espande al dominio radice, {candidate} a ciascuna stringa candidata.
Una firma che fa riferimento a {candidate} viene valutata una volta per ogni candidato.
| Tipo | Corrisponde a | Note |
|---|---|---|
txt, cname, mx, ns | match.contains rispetto ai record di query | Senza distinzione tra maiuscole e minuscole |
vanity_a, vanity_cname | Confronto con la baseline; nessun blocco match | query deve contenere {candidate} |
http | match.present, match.absent o match.status da solo | Vedi la gestione dello stato di seguito |
spf_include | match.contains rispetto al grafo degli include SPF risolto | |
dmarc_rua | match.contains rispetto alle destinazioni dei report DMARC | |
cname_target | query è un suffisso di hosting nudo | Applicato agli host scoperti da ct; * corrisponde a una label |
disabled: true mette da parte una firma senza perdere la ricerca che vi sta dietro.
notes: trasmette le indicazioni dell'analista fino al report.
Esegui yowie -validate dopo la modifica. La validazione è rigorosa — una chiave
sconosciuta è un errore, non un no-op silenzioso — e i pack sono controllati anche da go test, così un
refuso non può costarti silenziosamente la copertura in ogni scansione futura.