
Инструмент для распыления Shadow Credentials по всему домену в надежде злоупотребить давно забытыми DACLs GenericWrite/GenericAll на других объектах в домене.
Инструмент для массового применения Shadow Credentials ко всему домену в надежде использовать давно забытые права GenericWrite/GenericAll DACL на другие объекты в домене.
Во многих проектах я вижу (в BloodHound), что группа "Everyone" / "Authenticated Users" / "Domain Users" или другая широкая группа, содержащая почти всех пользователей домена, имеет права GenericWrite/GenericAll DACL на другие объекты в домене.

Эти права можно использовать для добавления Shadow Credentials на целевой объект и получения его TGT и NT-хэша.
Мне пришло в голову, что можно просто попробовать массово применить Shadow Credentials ко всему домену и посмотреть, что сработает (очевидно, такой подход больше подходит для не скрытных проектов, не используйте это в red team, где требуется скрытность). Когда Shadow Credentials успешно добавлены, мы просто выполняем весь процесс PKINIT + UnPACTheHash — и вуаля, получаем NT-хэши.
Поскольку процесс очень быстрый, его можно использовать в самом начале проекта, и, надеюсь, у вас уже будут скомпрометированы некоторые пользователи и компьютеры до того, как вы начнёте основную работу.
Примечание: я переиспользовал много кода из моего предыдущего инструмента, поэтому антивирусы/EDR могут пометить это как KrbRelayUp...
Это происходит примерно так:
ShadowSpray поддерживает CTRL+C, поэтому если вы захотите остановить выполнение в любой момент, просто нажмите CTRL+C — ShadowSpray отобразит все полученные NT-хэши перед выходом (как показано в демонстрации ниже).
__ __ __ __ __ __
/__` |__| /\ | \ / \ | | /__` |__) |__) /\ \ /
.__/ | | /~~\ |__/ \__/ |/\| .__/ | | \ /~~\ |
Usage: ShadowSpray.exe [-d FQDN] [-dc FQDN] [-u USERNAME] [-p PASSWORD] [-r] [-re] [-cp CERT_PASSWORD] [-ssl]
-r (--RestoreShadowCred) Restore "msDS-KeyCredentialLink" attribute after the attack is done. (Optional)
-re (--Recursive) Perform ShadowSpray attack recursivly. (Optional)
-cp (--CertificatePassword) Certificate password. (default = random password)
General Options:
-u (--Username) Username for initial LDAP authentication. (Optional)
-p (--Password) Password for initial LDAP authentication. (Optional)
-d (--Domain) FQDN of domain. (Optional)
-dc (--DomainController) FQDN of domain controller. (Optional)
-ssl Use LDAP over SSL. (Optional)
-y (--AutoY) Don't ask for confirmation to start the ShadowSpray attack. (Optional)
Взято из статьи Elad Shamir в блоге о Shadow Credentials:
Если PKINIT-аутентификация не распространена в среде или необычна для целевой учётной записи, событие "Запрошен билет аутентификации Kerberos (TGT)" (4768) может указывать на аномальное поведение, если атрибуты Certificate Information не пусты.
Если для целевой учётной записи настроен SACL для аудита изменений объектов Active Directory, событие "Объект службы каталогов был изменён" (5136) может указывать на аномальное поведение, если субъект, изменяющий msDS-KeyCredentialLink, не является учётной записью синхронизации Azure AD Connect или учётной записью службы ADFS, которые обычно выступают в роли сервера Key Provisioning и легитимно изменяют этот атрибут для пользователей.
Более конкретный превентивный контроль — добавление записи управления доступом (ACE) для ЗАПРЕТА принципалу EVERYONE изменять атрибут msDS-KeyCredentialLink для любых учётных записей, не предназначенных для беcпарольной аутентификации Key Trust, и особенно для привилегированных учётных записей.
Detecting UnPACing and shadowed credentials от Henri Hambartsumyan из FalconForce
Специфичные для ShadowSpry обнаружения: