Закрепился в домене под обычной учёткой — и что дальше? Брутфорс и CVE — пути очевидные, но шумные. Самые элегантные цепочки эскалации идут через ACL-мисконфигурации — они не требуют zero-day, не генерируют аномальный трафик и работают через штатные механизмы AD. Ты не ломаешь систему — ты пользуешься ею «по инструкции».
Каждый объект в AD защищён списком DACL, который состоит из записей ACE. Каждая ACE определяет: кто и что может делать с объектом. Проблема в том, что в реальных доменах ACL копятся годами. Helpdesk получает право сбрасывать пароли, но scope не ограничен. Подрядчик ушёл — а его ACE на OU с серверами осталась. Домену 10+ лет, три поколения админов сменилось, а ACL — как геологические слои.
🎯 Три права, которые реально опасны:
1. GenericAll — полный контроль над объектом. На пользователе: сброс пароля, установка SPN для Kerberoasting, запись в
msDS-KeyCredentialLink для Shadow Credentials. На группе — добавить себя в неё. На компьютере — настроить RBCD. Классический кейс: пользователь с GenericAll на привилегированного юзера, тот — член группы с доступом к Azure AD Sync, у которой права репликации. Три хопа — и DCSync.2. WriteDACL — право переписать правила игры. Имея WriteDACL на объект домена, добавляешь себе
DS-Replication-Get-Changes и DS-Replication-Get-Changes-All — и вот тебе DCSync. Интересный нюанс: WriteDACL оставляет меньше следов, чем WriteOwner. Смена владельца генерирует Event ID 4662 с отдельной записью аудита, а прямая правка DACL — нет.3. WriteOwner — стать владельцем объекта. Владелец может модифицировать DACL, значит путь всё равно ведёт туда же. Двухшаговая операция: сначала
Set-DomainObjectOwner, затем Add-DomainObjectAcl — и ты контролируешь объект.⚠️ Отдельного внимания заслуживает WriteDACL на корневой домен. На одном из проектов обнаружилось, что сервисная учётка системы мониторинга имела это право — админ когда-то делегировал ей доступ для чтения атрибутов, но промахнулся со scope. Итог: прямой путь к DCSync через учётку мониторинга.
🔍 Искать такие пути удобно через BloodHound с кастомными Cypher-запросами. Стандартный «Shortest Path to Domain Admins» находит очевидное, но настоящие артефакты скрыты глубже. Запрос для поиска неожиданных принципалов с WriteDACL на домен:
MATCH p=(n)-[:WriteDacl]->(m:Domain)
WHERE NOT n.name STARTS WITH 'DOMAIN ADMINS'
RETURN pОтсекаешь легитимные пути от Domain Admins — и видишь всё остальное. Иногда результат заставляет поседеть.
Полный разбор цепочек — GenericAll до DCSync, делегирование Kerberos, RBCD-атаки — в статье. Читай, пока не прочитал твой Blue Team.
https://codeby.net/threads/privilege-escalation-v-active-directory-acl-ataki-delegirovaniye-i-tsepochki-ot-genericall-do-dcsync.92729/