
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
▓▓▒░░ ╰───╯ ░▒▓▓
▀▓▓▒▒░░░░░░░░░▒▒▓▓▀
▀▀▓▓▓▓▓▓▓▓▓▓▓▀▀
Individua i servizi SaaS a cui un'organizzazione è abbonata, utilizzando esclusivamente dati osservabili dall'esterno. Progettato per la scoperta dello shadow IT: i servizi che vale la pena trovare sono quelli di cui nessuno ti ha parlato.
Prende il nome dalla criptide del bush australiano, perché stai cacciando qualcosa che tutti insistono nel dire che non esiste.

574 firme che coprono 412 fornitori distribuite su nove rilevatori, più 104 in attesa di conferma. I risultati sono classificati e ognuno riporta il record 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 deploy.
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 brand ereditati da acquisizioni. Forniscine il maggior numero possibile; ognuno è un'ulteriore occasione di trovare un tenant. Se non ne viene fornito nessuno, viene usata 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 e intitolati all'organizzazione (acme.zendesk.com) |
http | Impronte a livello applicativo per servizi privi di traccia DNS |
spf | L'intero grafo degli include SPF, seguendo include e redirect annidati |
dmarc | Destinazioni dei report aggregate/forensic DMARC |
bimi | Hosting del logo BIMI e del Verified Mark Certificate |
mta-sts | Contenuti della policy MTA-STS |
tenant | ID tenant Microsoft, identity provider 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 passata veloce
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 brand abbandonati. Ognuno è un ulteriore 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
"verso cosa ha effettivamente puntato i propri sottodomini questa
organizzazione?" Un team che si iscrive a un prodotto e configura
support.acme.com ottiene l'emissione di un certificato, 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 che concordano su un fornitore promuovono un risultato Probable a Confirmed. Ogni risultato riporta l'esatto record o la risposta che lo ha attivato, quindi un report è difendibile senza rieseguire lo strumento.
La promozione ha una sola eccezione, ed è la differenza tra "questo tenant esiste" e "questo tenant è tuo" — vedi la nota sul namespace sotto 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 file. Il report HTML è autocontenuto — nessuna risorsa esterna —
quindi sopravvive all'invio via email o al salvataggio su una share di rete.
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 da 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 nel dominio radice, {candidate} in ciascuna stringa
candidata. Una firma che fa riferimento a {candidate} viene valutata una volta
per candidato.
| Tipo | Corrisponde a | Note |
|---|---|---|
txt, cname, mx, ns | match.contains rispetto ai record di query | Case-insensitive |
vanity_a, vanity_cname | Confronto con baseline; nessun blocco match | query deve contenere {candidate} |
http | match.present, match.absent o match.status da solo | Vedi la gestione dello status sotto |
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 un'etichetta |
disabled: true mette in pausa 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 pacchetti sono
controllati anche da go test, quindi un refuso non può costarti silenziosamente
copertura in ogni scansione futura.
| Pacchetto | Contenuti |
|---|---|
dns-txt, dns-cname, dns-mx | Token di verifica e hostname delegati. Attivi. |
email-spf, email-dmarc | Mittenti e processori DMARC. Attivi. |
vanity-tenants, http-endpoints | Hostname dei tenant e impronte delle app. Attivi. |
cname-targets | Suffissi di hosting per sottodomini scoperti via CT. Attivi. |
ai-services | Piattaforme AI e LLM. In pausa. |
file-transfer | Managed file transfer — MOVEit, GoAnywhere, Egnyte. In pausa. |
finance-procurement | Finanza, spese, payroll, procurement. In pausa. |
security-grc | Strumenti di sicurezza e automazione della compliance. In pausa. |
graveyard | Voci non verificate e piattaforme il cui operatore non è stato identificato. In pausa. |