Назад к обновлениям
New releaseAug 23, 2026

Kestrel v.1.1.0

Инструмент малошумного перечисления безопасности Active Directory с использованием нативных интерфейсов ADSI/COM. Перечисляет ACL, делегирование, доверительные связи, ADCS, цели Kerberoast и пути атак без использования .NET или PowerShell, формируя вывод, совместимый с BloodHound.

Поделиться

Kestrel

build license language dependencies

BloodHound показывает путь. Kestrel показывает то, что уже внутри.

Все строят одно и то же: путь атаки — кто может добраться до Domain Admin. Это правильный вопрос, и инструменты, которые на него отвечают, превосходны. Но граф «кто может достичь кого» слеп к целому классу проблем, потому что некоторые из самых опасных вещей в Active Directory — это вовсе не путь.

Это бэкдор, впаянный в атрибут. Сертификат, который продолжает аутентифицировать ещё долго после сброса пароля. Разрешение, вшитое прямо в схему, так что каждый объект, создаваемый отныне, наследует его незаметно. Удалённая учётная запись, право вернуть которую кто-то тихо сохранил. Объект, скрытый от перечисления одним единственным deny-read ACE.

Ничто из этого не является ребром в графе. Всё это прямо сейчас находится в вашем каталоге. Kestrel читает это — нативными вызовами Windows, обычными правами доменного пользователя, без сервера, без Python, без агента, и с настолько сдержанным следом на контроллере домена, что он задокументирован по каждому событию.

Один .exe. Одна команда. Всё нижеперечисленное.


Вы смотрели не в ту сторону

Экосистема атакующих инструментов для AD — SharpHound, impacket, Certipy и граф, стоящий за ними, — превосходна, но все они смотрят на одну и ту же поверхность: достижимость. Kestrel смотрит на три измерения, которые эта поверхность выразить не может.

  • Время. Граф — это снимок. Kestrel читает метаданные репликации — когда изменился атрибут Tier-0 и какой контроллер домена был источником. Право DCSync, выданное вчера вечером, — это не та же находка, что существующая годами, и лишь одна из них означает, что вас атакуют прямо сейчас.
  • Стойкость в атрибуте, а не в ребре. Теневые учётные данные, SID history, реактивация tombstone-объектов, бэкдоры в схеме через defaultSecurityDescriptor, скрытые объекты, deny-ACE для OWNER RIGHTS, ключи DKM AD FS. Графовые инструменты не собирают это, потому что нечего рисовать в виде ребра.
  • Оборонительная позиция, вывернутая наизнанку. Не «кто может атаковать», а «что не защищено» — учётная запись Tier-0 вне своего silo, учётная запись синхронизации со случайным RID, которую никто не пометил, политика блокировки, которая никогда не ограничивает перебор.

Дело не в том, что Kestrel быстрее графа. Он отвечает на вопросы, которые граф задать не может.


Каждый грех AD — в одном нативном exe

ГрехЧто находит KestrelФлаги
Репликация и делегированиеПрава DCSync (кто может реплицировать — без самой репликации), неограниченное / ограниченное делегирование / RBCD / S4U--acl · --delegation
Злоупотребление сертификатамиAD CS ESC1–5/9, мошеннический CA в хранилище NTAuth, долгоживущая сертификатная стойкость, ACL ключа DKM AD FS — предусловие Golden SAML--adcs · --adfs
Стойкость в атрибутахТеневые учётные данные, внедрение SID history, права на реактивацию tombstone-объектов, скрытые объекты, бэкдоры через defaultSecurityDescriptor в схеме, осиротевшие adminCount--shadowcreds · --sidhistory · --acl · --schema · --adminsdholder
Открытые и взламываемые учётные данныеGPP cpassword, секреты unattend/sysprep и пароли в скриптах по всему SYSVOL, учётные записи, уязвимые для Kerberoast и AS-REP-roast, пробелы покрытия LAPS--gpp · --roast · --laps
Кросс-доменные и гибридныеForeign principals в привилегированных группах, учётные записи синхронизации Entra Connect, помеченные Tier-0, состояние доверия, учётные записи компьютеров, созданные через MachineAccountQuota (mS-DS-CreatorSID)--groups · --trust · --machines
Позиция и разведкаПолитика паролей / PSO, возраст krbtgt, параметры LLMNR / NBT-NS / WDigest / NTLMv1 в GPO, читатели gMSA, устаревшие компьютеры, топология делегирования--pwdpolicy · --policy · --gmsa · --stale

Двадцать с лишним проверок, которые обычно разбросаны по дюжине скриптов и двум языкам. Здесь они — один бинарник, и заканчиваются единым вердиктом, отсортированным по критичности.


Одна строка

Kestrel.exe --all --report audit.html

Запустить всё. Получить полный HTML-отчёт. И в самом конце консоли — то, что важнее всего:

═══ Kestrel - Prioritized Findings ═══

  CRITICAL  DCSync         CORP\svc_sql - non-default principal can replicate directory changes (DCSync)
                          → fix: remove GetChanges/GetChangesAll from the principal on the domain head (dsacls) unless it is a DC
  CRITICAL  AD FS          CN=... - read access to the DKM key (Golden SAML precondition)
                          → fix: remove non-default read ACEs on the DKM object (dsacls) and rotate the token-signing certificate
  HIGH      Persistence    CN=... - object hidden from enumeration via a broad deny-read ACE
                          → fix: inspect the hidden object and remove the broad deny-read ACE (dsacls)

  [=] 2 critical · 1 high · 0 medium · 0 low

Не стена вывода. Находки, которые имеют значение, ранжированы, и к каждой приложена команда для устранения.


Один exe. Red, blue, purple.

  • Red / grey — обнаружение стойкости и делегирования, которые граф упускает, экспорт прямо в BloodHound CE OpenGraph (--opengraph) для слияния с существующей коллекцией, или начало анализа от любого субъекта (--from).
  • Blue — приоритезированный список находок с рекомендациями; --diff со снимком прошлой недели, чтобы поймать то, что изменилось; и инструмент, чей точный след обнаружения опубликован, чтобы вы могли добавить его в белый список и настроить собственные алерты.
  • Purple — один артефакт, который обе стороны читают одинаково. Red находит, Blue исправляет, все смотрят на одну и ту же строку.

Обнаруживаемый по замыслу

Kestrel — только чтение. Он никогда не записывает в каталог, никогда не реплицирует, не требует SeSecurityPrivilege, не касается облака. Чтение того, кто может делать DCSync, на уровне трафика совершенно не похоже на выполнение DCSync — ни DRSUAPI, ни сигнатуры репликации 4662. Каждый выполняемый запрос и каждое событие, которое он может (и не может) породить, каталогизированы в FOOTPRINT.md. Аудитор, который рассказывает защитнику, как именно его поймать, — это не противоречие, а весь смысл.


Быстрый старт

Возьмите сборку. Каждый успешный прогон CI публикует артефакт Kestrel.exe — скачайте его со вкладки Actions, тулчейн не нужен.

Или соберите сами. Visual Studio (v143+) или MSBuild:

git clone https://github.com/ssteelfactor-oss/Kestrel.git
cd Kestrel
msbuild Kestrel.vcxproj /p:Configuration=Release /p:Platform=x64

Чистый C, ноль сторонних зависимостей. Сборка /MT — и это один самодостаточный исполняемый файл: положите его на хост, введённый в домен, запустите от имени любого обычного пользователя.

Запустите его.

Kestrel.exe --all --report audit.html      # everything, HTML report + ranked findings
Kestrel.exe --acl --adcs --adfs            # pick specific checks
Kestrel.exe --paths --from CORP\jdoe       # attack paths from one principal
Kestrel.exe --all --diff last-week.json    # what changed since the last snapshot
Kestrel.exe --all --opengraph graph.json   # export to BloodHound CE OpenGraph

Модули

Запустите --all или выберите любой поднабор. Полная справка: Kestrel.exe --help.

ФлагСканирование
--aclРёбра ACL, права DCSync, гигиена владельца/наследования/канонических имён, скрытые объекты, реактивация tombstone-объектов
--groupsТранзитивное членство в привилегированных группах + foreign security principals
--delegationНеограниченное / ограниченное делегирование / RBCD / S4U2Self
--paths / --fromАнализ путей атаки до Tier-0 (опционально от заданного субъекта)
--adcsАудит шаблонов сертификатов / CA AD CS (ESC1–5/9) + хранилище NTAuth + срок действия
--adfsACL ключа DKM AD FS (предусловие Golden SAML)
--schemaАудит бэкдоров defaultSecurityDescriptor в схеме
--trustСостояние доверия домена / леса
--machinesУчётные записи компьютеров, созданные через MachineAccountQuota (mS-DS-CreatorSID)
--roastУчётные записи, уязвимые для Kerberoast и AS-REP-roast
--shadowcredsТеневые учётные данные (msDS-KeyCredentialLink)
--sidhistoryВнедрение sIDHistory (привилегированное / foreign)
--adminsdholderОсиротевшие объекты adminCount=1
--gppЗачистка секретов SYSVOL — GPP cpassword, unattend, учётные данные в скриптах
--gpolateralGPO локальные группы → латеральные рёбра (AdminTo / CanRDP / CanPSRemote / ExecuteDCOM)
--policyПолитика безопасности GPO (LLMNR / NBT-NS / WDigest / NTLMv1)
--pwdpolicyПолитика паролей / PSO · возраст krbtgt · MachineAccountQuota
--hygieneГигиена учётных данных (PASSWD_NOTREQD / DONT_EXPIRE / обратимые / утечки в описаниях)
--gmsaПеречисление читателей паролей gMSA
--lapsПокрытие LAPS (legacy + Windows LAPS 2023+)
--staleУстаревшие компьютеры по lastLogonTimestamp
--topologyТопология компьютеров через декодирование SPN
--adwsОбнаружение конечных точек ADWS (9389/TCP на каждом DC)

Вывод и интеграция: --report <file> (.html / .json / .yaml) · --opengraph <file> (BloodHound CE) · --diff <snapshot.json> · --verbose.


Инварианты дизайна

Это обещания, а не предпочтения — причины, по которым его безопасно запускать в продакшене. Нарушение любого из них — ошибка безопасности (см. SECURITY.md).

  • Только чтение — никогда не создаёт, не изменяет и не удаляет объекты каталога. Только события чтения/доступа, никогда — события изменения.
  • Обычный доменный пользователь — никакого повышения привилегий, никакого SeSecurityPrivilege, только DACL-маски безопасности.
  • Без репликации — обнаруживает, кто может выполнять DCSync; сам никогда не вызывает DRSUAPI.
  • Только каталог и SYSVOL — без RPC/SMB к рядовым хостам.
  • Без уклонения — никакой фрагментации запросов, никаких игр со временем, никакого вмешательства в логи. См. FOOTPRINT.md.
  • Только on-prem — никаких вызовов к Entra / Graph / облаку; он аудирует след, который гибрид оставляет в AD.
  • Нативный и автономный — чистый C, ноль сторонних зависимостей, один .exe.

Дорожная карта

ВерсияСтатусВеха
v0.13Оценка условий входа
v0.14Глубина ACL + латеральные рёбра
v0.15Аудит структуры ACL (класс ADeleg)
v0.16Тихая стойкость + глубина SYSVOL / ADCS
v0.17Кросс-доменный + гибридный след
v0.18Чистота запросов + честный след
v1.0Функционально полон: приоритезированные находки + рекомендации, CI, Apache 2.0
v1.1🔲Временная шкала · обнаружение rogue-DC / DCShadow · ADIDNS · проход по оборонительной позиции

Документация

  • FOOTPRINT.md — точный след LDAP / SYSVOL, который оставляет каждая проверка, и события на DC, которые она порождает (и не может породить).
  • SECURITY.md — порядок сообщений об уязвимостях, область действия и инварианты дизайна как проверяемые гарантии.
  • LICENSE — Apache 2.0.

Связанные проекты

Родительский проект: NetEnum — перечисление AD через ADSI / COM / LDAP.

Автор

@ssteelfactor-oss — исследования безопасности и внутренности COM / Windows.

Лицензия

Лицензируется на условиях Apache License 2.0 — см. LICENSE. Предоставляется «как есть», без каких-либо гарантий; запускайте только против каталогов, аудировать которые вы уполномочены.

Категории