
Находит SaaS-сервисы, на которые подписана организация, используя только внешне наблюдаемые данные. Создан для обнаружения теневого ИТ.
▄▄▓▓▓▓▓▓▓▓▓▄▄
▄▓▓▒▒▒▒▒▒▒▒▒▒▒▓▓▄ Yowie · tracking down the SaaS nobody told you about
▓▓▒▒░░░░░░░░░░░▒▒▓▓
▓▒░░ ● ● ░▒▓ Domain acme.com.au
▓▒░░ ▼ ░▒▓ Candidates acme, acmecorp
▓▓▒░░ ╰───╯ ░▒▓▓
▀▓▓▒▒░░░░░░░░░▒▒▓▓▀
▀▀▓▓▓▓▓▓▓▓▓▓▓▀▀
Находит SaaS-сервисы, на которые подписана организация, используя только внешне наблюдаемые данные. Создан для обнаружения теневого IT: сервисы, которые стоит искать, — это те, о которых вам никто не сказал.
Назван в честь австралийского кустарникового криптида, потому что вы охотитесь за тем, о чём все настаивают, что этого не существует.

574 сигнатуры, охватывающие 412 вендоров, в девяти детекторах, плюс 104 отложенных в ожидании подтверждения. Находки классифицированы, и каждая несёт запись или ответ, которые её породили.
go build -o yowie ./cmd/yowie
Go 1.22 или новее. Пакеты сигнатур встроены в бинарник, так что одного файла достаточно для развёртывания.
yowie [flags] <domain> [candidate ...]
Домен — это корневой домен организации. Кандидаты — это короткие строки, в честь которых может быть назван тенант вендора: торговые названия, аббревиатуры, старые бренды, унаследованные от поглощений. Укажите как можно больше; каждый — это ещё один шанс найти тенант. Если не указано ни одного, используется первая метка домена.
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
| Детектор | Сигнал |
|---|---|
dns | TXT-токены верификации, записи CNAME, MX и NS |
vanity | Тенанты, размещённые у вендора и названные в честь организации (acme.zendesk.com) |
http | Отпечатки на уровне приложений для сервисов без DNS-следа |
spf | Полный граф SPF include, с переходом по вложенным include и redirect |
dmarc | Назначения агрегированных/форензических отчётов DMARC |
bimi | Хостинг логотипа BIMI и Verified Mark Certificate |
mta-sts | Содержимое политики MTA-STS |
tenant | ID тенанта Microsoft, федеративный провайдер идентификации и родственные домены |
ct | Поддомены из логов Certificate Transparency, разрешённые и атрибутированные |
Выбирайте с помощью -only или -skip, например -skip ct,http для быстрого
прохода только по DNS.
Последние два заслуживают пояснения, потому что они находят то, что список сигнатур найти не может.
tenant спрашивает у неаутентифицированных эндпоинтов Microsoft, кому
принадлежит домен. Информация о федерации в Autodiscover возвращает все домены,
привязанные к тому же тенанту, что регулярно выявляет бизнес-единицы, поглощения
и заброшенные бренды. Каждый из них — ещё один домен, который стоит просканировать.
ct переворачивает модель обнаружения. Все остальные проверки задают вопрос
«использует ли эта организация вендора X?» по фиксированному списку, поэтому они
могут найти только тех вендоров, для которых кто-то уже написал сигнатуру. CT
спрашивает: «на что эта организация на самом деле направила свои поддомены?»
Команда, которая регистрируется в продукте и настраивает support.acme.com,
получает выпущенный сертификат, а этот сертификат публичен и постоянен. Цели, не
совпадающие ни с одной сигнатурой, сообщаются как зацепки — именно так вы находите
то, о существовании чего вы не знали и что не догадались бы искать.
Находки классифицированы, и класс — это главное:
acme.blogspot.com может быть не
вашим acme.Два независимых детектора, согласных по вендору, повышают находку Probable до Confirmed. Каждая находка несёт точную запись или ответ, которые её вызвали, так что отчёт можно защитить без повторного запуска инструмента.
У повышения есть одно исключение, и это разница между «этот тенант существует» и «этот тенант ваш» — см. примечание о пространстве имён в разделе точность.
-no-unknown отбрасывает неатрибутированные зацепки, если вам нужен только
сигнал.
-format cli (по умолчанию), json, jsonl, csv, html. Используйте -o
для записи в файл. HTML-отчёт самодостаточен — без внешних ресурсов — поэтому он
переживёт отправку по почте или размещение на сетевом диске.
Прогресс идёт в stderr, а результаты — в stdout, так что yowie -format json acme.com > out.json
всё равно показывает строку живого прогресса.
Сигнатуры находятся в signatures/*.yaml. Бинарник встраивает их;
-signatures <dir> или YOWIE_SIGNATURES=<dir> загружает их с диска вместо
этого, что позволяет итерировать без пересборки.
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} разворачивается в корневой домен, {candidate} — в каждую строку
кандидата. Сигнатура, ссылающаяся на {candidate}, вычисляется один раз на
каждого кандидата.
| Тип | Совпадения | Примечания |
|---|---|---|
txt, cname, mx, ns | match.contains против записей query | Без учёта регистра |
vanity_a, vanity_cname | Сравнение с базовой линией; без блока match | query должен содержать {candidate} |
http | Только match.present, match.absent или match.status | См. обработку статусов ниже |
spf_include | match.contains против разрешённого графа SPF include | |
dmarc_rua | match.contains против назначений отчётов DMARC | |
cname_target | query — это голый суффикс хостинга | Применяется к хостам, обнаруженным ct; * совпадает с одной меткой |
disabled: true откладывает сигнатуру, не теряя исследования за ней.
notes: несёт рекомендации аналитика в отчёт.
Запустите yowie -validate после редактирования. Валидация строгая —
неизвестный ключ это ошибка, а не молчаливый no-op — и пакеты также проверяются
через go test, так что опечатка не может тихо лишить вас покрытия во всех
будущих сканированиях.
| Пакет | Содержимое |
|---|---|
dns-txt, dns-cname, dns-mx | Токены верификации и делегированные имена хостов. Активны. |
email-spf, email-dmarc | Отправители и обработчики DMARC. Активны. |
vanity-tenants, http-endpoints | Имена хостов тенантов и отпечатки приложений. Активны. |
cname-targets | Суффиксы хостинга для поддоменов, обнаруженных через CT. Активны. |
ai-services | Платформы AI и LLM. Отложены. |
file-transfer | Управляемая передача файлов — MOVEit, GoAnywhere, Egnyte. Отложены. |
finance-procurement | Финансы, расходы, зарплата, закупки. Отложены. |
security-grc | Инструменты безопасности и автоматизация соответствия. Отложены. |
graveyard | Непроверенные записи и платформы, оператор которых не был идентифицирован. Отложены. |