
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 · tracking down the SaaS nobody told you about
▓▓▒▒░░░░░░░░░░░▒▒▓▓
▓▒░░ ● ● ░▒▓ Domain acme.com.au
▓▒░░ ▼ ░▒▓ Candidates 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 criatura críptida del monte australiano, porque estás cazando algo que todos insisten en que no está ahí.

786 firmas que cubren 593 proveedores en nueve detectores, más 109 en espera de 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 integrados 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 por las que podría nombrarse un tenant de proveedor: nombres comerciales, abreviaturas, marcas antiguas heredadas de adquisiciones. Proporciona tantos como puedas; cada uno es otra oportunidad de encontrar un tenant. Si no se proporciona ninguno, se usa 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 | Tenants 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 en DNS |
spf | El grafo completo de includes de SPF, siguiendo includes y redirecciones anidados |
dmarc | Destinos de informes agregados/forenses de DMARC |
bimi | Alojamiento del logo BIMI y del Verified Mark Certificate |
mta-sts | Contenido de la política MTA-STS |
tenant | ID de tenant de Microsoft, proveedor de identidad federado 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 una pasada rápida 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 tenant, lo que habitualmente saca a la luz unidades de negocio, adquisiciones y marcas abandonadas. Cada uno es otro dominio que merece 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, así 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 registra en 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 cómo encuentras eso que no sabías que había que 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 desencadenó, de modo que un informe es defendible sin volver a ejecutar la herramienta.
La promoción tiene una excepción, y es la diferencia entre "este tenant existe" y "este tenant es tuyo" — consulta la nota sobre espacios de nombres en precisión.
-no-unknown descarta las pistas sin atribuir si solo quieres señal.
-format cli (por defecto), json, jsonl, csv, html. Usa -o para escribir en un archivo. El informe HTML es autocontenido — sin recursos externos — así que sobrevive a ser enviado por correo o dejado en una unidad compartida.
El progreso va a stderr y los resultados a stdout, así 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 incorpora; -signatures <dir> o YOWIE_SIGNATURES=<dir> cargan desde disco en su lugar, que es cómo 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 hace referencia a {candidate} se evalúa una vez por cada candidato.
| Tipo | Coincide con | Notas |
|---|---|---|
txt, cname, mx, ns | match.contains contra los registros de query | Sin distinción de mayúsculas y minúsculas |
vanity_a, vanity_cname | Comparación con la línea base; sin bloque match | query debe contener {candidate} |
http | match.present, match.absent o match.status por sí solo | Véase el manejo de estados más abajo |
spf_include | match.contains contra el grafo de includes SPF resuelto | |
dmarc_rua | match.contains contra los destinos de informes DMARC | |
cname_target | query es un sufijo de hosting simple | Se aplica a los hosts descubiertos por ct; * coincide con una etiqueta |
disabled: true deja una firma en espera sin perder la investigación que hay detrás de ella.
notes: transmite la orientación del analista hasta el informe.
Ejecute yowie -validate después de editar. La validación es estricta — una clave desconocida es un
error, no una omisión silenciosa — y los packs también se comprueban con go test, de modo que una
errata no puede costarle cobertura silenciosamente en cada escaneo futuro.