
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 и какой контроллер домена был источником. Право 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