Encuentra los servicios SaaS a los que se suscribe una organización, utilizando únicamente datos observables externamente. Diseñado para el descubrimiento de shadow IT.
▄▄▓▓▓▓▓▓▓▓▓▄▄
▄▓▓▒▒▒▒▒▒▒▒▒▒▒▓▓▄ Yowie · rastreando el SaaS del que nadie te habló
▓▓▒▒░░░░░░░░░░░▒▒▓▓
▓▒░░ ● ● ░▒▓ Dominio acme.com.au
▓▒░░ ▼ ░▒▓ Candidatos acme, acmecorp
▓▓▒░░ ╰───╯ ░▒▓▓
▀▓▓▒▒░░░░░░░░░▒▒▓▓▀
▀▀▓▓▓▓▓▓▓▓▓▓▓▀▀
Encuentra los servicios SaaS a los que se suscribe una organización, utilizando únicamente datos observables externamente. Diseñado para el descubrimiento de shadow IT: los servicios que vale la pena encontrar son aquellos de los que nadie te habló.
Nombrado en honor a la cripta del monte australiano, porque estás cazando algo que todos insisten en que no existe.

574 firmas que cubren 412 proveedores en nueve detectores, más 104 estacionadas esperando confirmación. Los hallazgos están clasificados y cada uno incluye el registro o la respuesta que lo produjo.
go build -o yowie ./cmd/yowie
Go 1.22 o posterior. Los paquetes de firmas están incrustados en el binario, por lo que el archivo único es todo lo que necesitas para desplegar.
yowie [flags] <domain> [candidate ...]
El dominio es el dominio raíz de la organización. Los candidatos son las cadenas cortas con las que podría nombrarse un inquilino de un proveedor — nombres comerciales, abreviaturas, marcas antiguas heredadas de adquisiciones. Proporciona tantos como puedas; cada uno es otra oportunidad de encontrar un inquilino. Si no se proporciona ninguno, se utiliza la primera etiqueta 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
| Detector | Señal |
|---|---|
dns | Tokens de verificación TXT, registros CNAME, MX y NS |
vanity | Inquilinos alojados por el proveedor con el nombre de la organización (acme.zendesk.com) |
http | Huellas a nivel de aplicación para servicios sin presencia DNS |
spf | El grafo completo de includes de SPF, siguiendo includes anidados y redirecciones |
dmarc | Destinos de informes agregados/forenses de DMARC |
bimi | Alojamiento del logotipo BIMI y del Verified Mark Certificate |
mta-sts | Contenido de la política MTA-STS |
tenant | ID de inquilino de Microsoft, proveedor de identidad federada y dominios hermanos |
ct | Subdominios de los registros de Certificate Transparency, resueltos y atribuidos |
Selecciona con -only o -skip, p. ej. -skip ct,http para un análisis rápido
solo de DNS.
Los dos últimos merecen una nota, porque encuentran cosas que una lista de firmas no puede.
tenant pregunta a los endpoints no autenticados de Microsoft a quién
pertenece el dominio. La información de federación de Autodiscover devuelve
todos los dominios asociados al mismo inquilino, lo que habitualmente saca a la
luz unidades de negocio, adquisiciones y marcas abandonadas. Cada uno es otro
dominio que vale la pena escanear.
ct invierte el modelo de descubrimiento. Todas las demás comprobaciones
preguntan "¿usa esta organización el proveedor X?" contra una lista fija, por lo
que solo puede encontrar proveedores para los que alguien ya escribió una firma.
CT pregunta "¿a qué ha apuntado realmente esta organización sus subdominios?" Un
equipo que se suscribe a un producto y configura support.acme.com obtiene un
certificado emitido, y ese certificado es público y permanente. Los objetivos que
no coinciden con ninguna firma se reportan como pistas, que es como encuentras
eso que no sabías que debías buscar.
Los hallazgos están clasificados, y la clasificación es lo importante:
acme.blogspot.com podría no ser
tu acme.Dos detectores independientes que coinciden en un proveedor promueven un hallazgo Probable a Confirmed. Cada hallazgo incluye el registro o la respuesta exacta que lo activó, por lo que un informe es defendible sin volver a ejecutar la herramienta.
La promoción tiene una excepción, y es la diferencia entre "este inquilino existe" y "este inquilino es tuyo" — consulta la nota sobre espacios de nombres en precisión.
-no-unknown descarta las pistas no atribuidas si solo quieres señal.
-format cli (predeterminado), json, jsonl, csv, html. Usa -o para
escribir en un archivo. El informe HTML es autocontenido — sin recursos externos
— por lo que sobrevive a ser enviado por correo o dejado en una unidad
compartida.
El progreso va a stderr y los resultados a stdout, por lo que yowie -format json acme.com > out.json
sigue mostrando una línea de progreso en vivo.
Las firmas viven en signatures/*.yaml. El binario las incrusta; -signatures <dir>
o YOWIE_SIGNATURES=<dir> cargan desde disco en su lugar, que es como iteras
sin recompilar.
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} se expande al dominio raíz, {candidate} a cada cadena candidata.
Una firma que referencia {candidate} se evalúa una vez por candidato.
| Tipo | Coincidencias | Notas |
|---|---|---|
txt, cname, mx, ns | match.contains contra los registros de query | Sin distinción de mayúsculas |
vanity_a, vanity_cname | Comparación con línea base; sin bloque match | query debe contener {candidate} |
http | match.present, match.absent o match.status por sí solo | Ver manejo de estados a continuación |
spf_include | match.contains contra el grafo resuelto de includes de SPF | |
dmarc_rua | match.contains contra los destinos de informes DMARC | |
cname_target | query es un sufijo de alojamiento simple | Se aplica a hosts descubiertos por ct; * coincide con una etiqueta |
disabled: true estaciona una firma sin perder la investigación que hay detrás.
notes: transmite la orientación del analista hasta el informe.
Ejecuta yowie -validate después de editar. La validación es estricta — una clave
desconocida es un error, no una omisión silenciosa — y los paquetes también son
verificados por go test, por lo que un error tipográfico no puede costarte
cobertura silenciosamente en cada escaneo futuro.