
Инструмент малошумного перечисления безопасности Active Directory с использованием нативных интерфейсов ADSI/COM. Перечисляет ACL, делегирование, доверительные связи, ADCS, цели Kerberoast и пути атак без использования .NET или PowerShell, формируя вывод, совместимый с BloodHound.
BloodHound показывает вам путь. Kestrel показывает то, что уже внутри.
Все строят карту одного и того же: пути атаки — кто может добраться до Domain Admin. Это правильный вопрос, и инструменты, отвечающие на него, превосходны. Но граф «кто до кого может добраться» слеп к целому классу проблем, потому что некоторые из худших вещей в Active Directory — вовсе не путь.
Это бэкдор, вваренный в атрибут. Сертификат, который продолжает аутентифицировать ещё долго после смены пароля. Разрешение, вписанное в саму схему, так что каждый созданный с этого момента объект молча его наследует. Удалённая учётная запись, право вернуть которую кто-то тихо сохранил за собой. Объект, скрытый от перечисления единственным deny-read ACE.
Ничто из этого не является ребром в графе. Всё это прямо сейчас лежит в вашем каталоге. Kestrel читает это — с помощью нативных вызовов Windows, обычных прав доменного пользователя, без сервера, без Python, без агента, и со столь сдержанным следом на контроллере домена, что он задокументирован событие за событием.
Один .exe. Одна команда. Всё ниже.
Наступательная экосистема для AD — SharpHound, impacket, Certipy и граф за ними — великолепна, и все они смотрят на одну и ту же поверхность: достижимость. Kestrel смотрит на три измерения, которые эта поверхность выразить не может.
defaultSecurityDescriptor схемы, скрытые объекты, deny-ACE OWNER RIGHTS, ключи AD FS DKM. Инструменты для графов не собирают это, потому что здесь нет ребра, которое можно нарисовать.Дело не в том, что Kestrel быстрее графа. Он отвечает на вопросы, которые граф задать не может.
| Син | Что находит 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
Не стена вывода. Только значимые находки, ранжированные, каждая с командой для её устранения.
--opengraph) для объединения с вашей существующей коллекцией, или переход от любого субъекта (--from).--diff относительно снимка прошлой недели, чтобы поймать то, что изменилось; и инструмент, чей точный детектируемый след опубликован, чтобы вы могли внести его в белый список и настроить свои оповещения вокруг него.Kestrel работает только на чтение. Он никогда не пишет в каталог, никогда не реплицирует, никогда не требует SeSecurityPrivilege, никогда не обращается к облаку. Чтение кто может выполнять DCSync выглядит в сетевом трафике совершенно не так, как выполнение DCSync — никакого DRSUAPI, никакой сигнатуры репликации 4662. Каждый выполняемый им запрос и каждое событие, которое он может (и не может) сгенерировать, каталогизированы в FOOTPRINT.md. Аудитор, который рассказывает защитнику, как именно его поймать, — это не противоречие, это и есть весь смысл.
Возьмите сборку. Каждый успешный запуск CI публикует артефакт Kestrel.exe — скачайте его на вкладке Actions, инструментарий не требуется.
Или соберите сами. Visual Studio (v143+) или MSBuild: