
Kestrel v.1.1.0
Инструмент малошумного перечисления безопасности Active Directory с использованием нативных интерфейсов ADSI/COM. Перечисляет ACL, делегирование, доверительные связи, ADCS, цели Kerberoast и пути атак без использования .NET или PowerShell, формируя вывод, совместимый с BloodHound.
Kestrel
BloodHound показывает вам путь. Kestrel показывает то, что уже внутри.
Все строят карту одного и того же: пути атаки — кто может добраться до Domain Admin. Это правильный вопрос, и инструменты, отвечающие на него, превосходны. Но граф «кто до кого может добраться» слеп к целому классу проблем, потому что некоторые из худших вещей в Active Directory — вовсе не путь.
Это бэкдор, вваренный в атрибут. Сертификат, который продолжает аутентифицировать ещё долго после смены пароля. Разрешение, вписанное в саму схему, так что каждый созданный с этого момента объект молча его наследует. Удалённая учётная запись, право вернуть которую кто-то тихо сохранил за собой. Объект, скрытый от перечисления единственным deny-read ACE.
Ничто из этого не является ребром в графе. Всё это прямо сейчас лежит в вашем каталоге. Kestrel читает это — с помощью нативных вызовов Windows, обычных прав доменного пользователя, без сервера, без Python, без агента, и со столь сдержанным следом на контроллере домена, что он задокументирован событие за событием.
Один .exe. Одна команда. Всё ниже.
Вы смотрели не в ту сторону
Наступательная экосистема для AD — SharpHound, impacket, Certipy и граф за ними — великолепна, и все они смотрят на одну и ту же поверхность: достижимость. Kestrel смотрит на три измерения, которые эта поверхность выразить не может.
- Время. Граф — это снимок. Kestrel читает метаданные репликации — когда изменился атрибут Tier-0 и какой DC стал источником этого изменения. Право DCSync, выданное прошлой ночью, — это не та же находка, что право, существующее годами, и только одно из них означает, что вас атакуют прямо сейчас.
- Персистентность в атрибуте, а не в ребре. Shadow credentials, SID history, reanimate-tombstones, бэкдоры в
defaultSecurityDescriptorсхемы, скрытые объекты, deny-ACEOWNER RIGHTS, ключи AD FS DKM. Инструменты для графов не собирают это, потому что здесь нет ребра, которое можно нарисовать. - Защитная позиция, вывернутая наизнанку. Не «кто может атаковать», а «что не защищено» — учётная запись Tier-0 вне своего периметра, учётная запись синхронизации со случайным RID, которую никто не пометил, политика блокировки, которая никогда не ограничивает перебор.
Дело не в том, что Kestrel быстрее графа. Он отвечает на вопросы, которые граф задать не может.
Каждый грех AD — в одном нативном exe
| Син | Что находит Kestrel | Флаг(и) |
|---|---|---|
| Репликация и делегирование | Права DCSync (кто может реплицировать — без фактической репликации), неограниченное / ограниченное / RBCD / S4U делегирование | --acl · --delegation |
| Злоупотребление сертификатами | AD CS ESC1–5/9, мошеннический CA в хранилище NTAuth, долгоживущая персистентность через сертификаты, ACL ключа AD FS DKM — предусловие Golden SAML | --adcs · --adfs |
| Персистентность в атрибутах | Теневые учётные данные, инъекция истории SID, права на реанимацию tombstone, скрытые объекты, бэкдоры defaultSecurityDescriptor в схеме, осиротевший adminCount | --shadowcreds · --sidhistory · --acl · --schema · --adminsdholder |
| Открытые и поддающиеся взлому учётные данные | GPP cpassword, секреты unattend/sysprep и пароли скриптов в SYSVOL, учётные записи, уязвимые к Kerberoasting и AS-REP roasting, пробелы в покрытии LAPS | --gpp · --roast · --laps |
| Междоменные и гибридные связи | Внешние субъекты в привилегированных группах, учётные записи синхронизации Entra Connect с меткой Tier-0, состояние доверия, учётные записи компьютеров, созданные через MachineAccountQuota (mS-DS-CreatorSID) | --groups · --trust · --machines |
| Состояние и разведка | Политика паролей / PSO, возраст krbtgt, настройки GPO для LLMNR / NBT-NS / WDigest / NTLMv1, читатели gMSA, устаревшие компьютеры, топология делегирования | --pwdpolicy · --policy · --gmsa · --stale |
| Археология | Осиротевшие опасные ACE (право, принадлежащее удалённому субъекту — SID не разрешается ни в кого), устаревшие привилегированные учётные записи (забытые, с избыточными правами, с древним паролем) | --archaeology |
| Укрепление домена | Флаги dSHeuristics для анонимного LDAP / исключения AdminSDHolder, широкое членство в Pre-Windows 2000 Compatible Access | --hardening |
| Состояние сервисов (читается из AD, без пакетов к сервису) | Эскалация Exchange-to-DA и EOL, захват контейнера SCCM и карта сайта, отравление зоны ADIDNS (Authenticated Users могут создавать записи) | --exchange · --sccm · --dns |
Два десятка с лишним проверок, которые обычно разбросаны по дюжине скриптов и двум языкам. Здесь они — один бинарник, и всё заканчивается единым вердиктом, отсортированным по критичности.
Одна строка
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. Красный, синий, фиолетовый.
- Красный / серый — перечисление механизмов персистентности и делегирования, которые пропускает граф, экспорт напрямую в BloodHound CE OpenGraph (
--opengraph) для объединения с вашей существующей коллекцией, или переход от любого субъекта (--from). - Синий — приоритизированный список устранённых находок;
--diffотносительно снимка прошлой недели, чтобы поймать то, что изменилось; и инструмент, чей точный детектируемый след опубликован, чтобы вы могли внести его в белый список и настроить свои оповещения вокруг него. - Фиолетовый — один артефакт, который обе стороны читают одинаково. Красный находит, синий исправляет, все указывают на один и тот же номер строки.
Детектируемый по замыслу
Kestrel работает только на чтение. Он никогда не пишет в каталог, никогда не реплицирует, никогда не требует SeSecurityPrivilege, никогда не обращается к облаку. Чтение кто может выполнять DCSync выглядит в сетевом трафике совершенно не так, как выполнение DCSync — никакого DRSUAPI, никакой сигнатуры репликации 4662. Каждый выполняемый им запрос и каждое событие, которое он может (и не может) сгенерировать, каталогизированы в FOOTPRINT.md. Аудитор, который рассказывает защитнику, как именно его поймать, — это не противоречие, это и есть весь смысл.
Быстрый старт
Возьмите сборку. Каждый успешный запуск CI публикует артефакт Kestrel.exe — скачайте его на вкладке Actions, инструментарий не требуется.
Или соберите сами. Visual Studio (v143+) или MSBuild: