Основные уязвимости Active Directory, 2 часть
Привет, читатель! Рад тебя видеть. Продолжаю серию статей по уязвимостям Active Directory. Настоятельно рекомендую ознакомиться с первой частью вот тут: первая часть . Я желаю услышать адекватную критику и рекомендации для улучшения контента. Не могу не повториться, сказав, что эти статьи вряд ли подойдут тем, кто занимается незаконным взломом. Эти статьи для тех, кто проводит легальный аудит, тот, кому требуется проверить максимум и защитить инфраструктуру как можно лучше. Заранее спасибо.
Приятного чтения!
3. Большое количество пользователей в привилегированных группах
Эта уязвимость связана с чрезмерным количеством пользователей в привилегированных группах, таких как:- Администраторы домена (Domain Admins)
- Администраторы схемы (Schema Admins)
- Администраторы предприятия (Enterprice Admins)
Наличие большого количества пользователей в привилегированных группах излишне увеличивает риск взлома домена, ведь если некоторые из этих пользователей будут скомпрометированы, это означает полную компрометацию домена. (вспоминаем из главы 2 про AdminCount)
Это не только разумно, но и действительно важно следовать принципам наименьших привилегий и назначать членство в эти группы только в случае крайней необходимости, что в идеале никогда не бывает.
Как проверить:
Чтобы проверить это, нам нужна только учетная запись домена с низким уровнем привилегий.Вот как перечислить эти группы с компьютера с Windows, присоединенного к домену:
Код:
net group "Schema Admins" /domain
net group "Domain Admins" /domain
net group "Enterprise Admins" /domain
На неподключенной машине с Windows нам нужно сначала пройти аутентификацию в домене:
Код:
runas /netonly /user:<DOMAIN>\<USER> cmd.exe
#Пример:
runas /netonly /user:corp.local\john cmd.exe
Вот как мы можем проверить это в Linux (например, Kali Linux) с помощью команды net:
Код:
net rpc group members 'Schema Admins' -I <DC-IP> -U "<USER>"%"<PASS>"
net rpc group members 'Domain Admins' -I <DC-IP> -U "<USER>"%"<PASS>"
net rpc group members 'Enterprise Admins' -I <DC-IP> -U "<USER>"%"<PASS>"
# Пример:
net rpc group members 'Domain Admins' -I 10.10.30.52 -U "john"%"pass123"
Если в любой из групп слишком много пользователей, то обязательно исправлять, не забыть про AdminCount, который сам не сбрасывается!!!!!
4. Учётные записи служб, являющиеся членами администраторов домена
Идея учетной записи службы состоит в том, чтобы назначить конкретную учетную запись пользователя с определенным набором привилегий для запуска определенной службы (или приложения), не требуя предоставления ей полных административных привилегий.
Проблема в том, что этим учетным записям назначаются непомерные привилегии и / или членство, например, при добавлении в группу «Администраторы домена».
Такая практика создает критический риск для инфраструктуры, поскольку для учетных записей служб обычно установлены слабые пароли, срок действия которых никогда не истекает, и поэтому их пароли меняются редко, если вообще когда-либо.
Это означает, что если такая уязвимая учетная запись службы будет скомпрометирована, это позволит злоумышленнику получить полный контроль над доменом AD. И, наверное, надолго.
Как проверить:
Просто просмотрите всех участников, принадлежащих к привилегированным группам:
Код:
net group "Schema Admins" /domain
net group "Domain Admins" /domain
net group "Enterprise Admins" /domain
В Linux мы можем использовать команду net, как показано в предыдущей главе.
Если в любой из этих групп есть учетные записи служб, то отмечаем в отчёте и идём дальше.
5. Чрезмерные привилегии (их неправильная настройка)
Эта уязвимость более сложная. Речь идет о неправильном использовании прав Active Directory и расширенных прав , также известных как записи управления доступом (ACE). Проблема заключается в том, что некоторые из этих прав предоставляются пользователю (или группе) с низкими привилегиями, чтобы разрешить изменение чего-то важного для пользователя (или группы) с более высокими привилегиями.Некоторые из прав, которые обычно используются не по назначению, включают:
- ForceChangePassword - Возможность сбросить пароль другого пользователя
- GenericAll - полный контроль над объектом (чтение / запись)
- GenericWrite - Обновление любых атрибутов объекта
- WriteOwner - Предполагает владение объектом
- WriteDacl - изменение DACL объекта
- SELF - произвольно изменять себя
Эти вещи могут иметь критическое значение и часто приводят к привилегиям администратора домена. Таким образом, пользователей с такими чрезмерными привилегиями называют теневыми администраторами домена (или скрытыми администраторами).
Вот очень хорошая статья, описывающая эту проблему более подробно и с примерами:
Abusing Active Directory ACLS
Как проверить:
Как упоминалось выше, это более сложный вопрос, требующий немножко покопаться. Однако все, что нам нужно, - это пользователь домена с низким уровнем привилегий и подходящий инструмент.Одним из инструментов, который очень помогает в этом процессе, является BloodHound . Вот краткое описание его использования:
1) Сначала мы используем «приемник» для сбора данных из среды AD - например, SharpHound .
2) Затем мы загружаем данные в интерфейс Bloodhound, где мы можем визуализировать отношения между объектами.
Затем язык запросов Bloodhound позволяет нам находить пути, как в этом примере:
Когда мы ищем эти права и доверяем неверным конфигурациям, мы обычно начинаем с предварительно созданных запросов, таких как:
- “Find Top 10 Users with Most Local Admin Rights”
- “Find Shortest Paths to Domain Admins”
- “Map Domain Trusts”
Вот еще несколько запросов, которые могут помочь ( ссылка1 , ссылка2 ).
6. Учётные записи служб, уязвимые для Kerberoasting
Kerberoasting - очень популярный вектор атаки, направленный на учетные записи служб в Active Directory.
Проблема заключается в том, что у этих учетных записей служб слабые пароли и когда для шифрования их паролей используется слабое шифрование Kerberos RC4.
Вот оригинальная статья (слайды) от Тима Медина - автора Kerberoasting:
Как проверить
Эта атака была автоматизирована с помощью нескольких инструментов (например , Impacket или Rubeus ) и все , что нужно для тестирования, чтобы иметь учетные данные низко привилегированный пользователь домена.Вот пример использования Impacket:
Код:
GetUserSPNs.py -request <DOMAIN>/<USER>:<PASS>
# Пример
GetUsersSPNs.py -request example.com/john:pass123
GetUsersSPNs.py -request -hash NTLMHASH example.com/john
Если мы получили какие-то хэши, это означает, что есть учетные записи служб, уязвимые для Kerberoasting. Если вас смущает, что сразу идёт агрессивный поиск юзеров, то можно вручную посмотреть возможные уязвимые аккаунты следующей командой:
Код:
setspn -T [домен] -Q */*c
После того, как мы получили хэши, мы можем попытаться взломать их. Вот пример использования Hashcat для атаки по словарю:
Код:
hashcat -m 13100 -a 0 hashes.txt wordlist.txt
# Быстрее, но длина пароля не должна превышать 31 символ
hashcat -m 13100 -a 0 -O --self-test-disable hashes.txt wordlist.txt
Вот что мы должны посоветовать нашим клиентам, чтобы защитить учетные записи служб от Kerberoasting:
- Используйте новые алгоритмы шифрования, такие как AES128, AES256 или лучше
- Принудительное использование надежных и сложных паролей (в идеале длиной 25+ символов)
- Убедитесь, что их пароль периодически меняется
- Не устанавливайте этим аккаунтам излишние привилегии, только самые необходимые
7. Пользователи с паролями, срок действия которых не истекает
В основном из-за удобства в некоторых организациях учетные записи домена настроены с установленным флагом DONT_EXPIRE_PASSWORD.
Это типичная конфигурация учетных записей служб, но иногда ее можно увидеть и в более привилегированных учетных записях домена.
Это означает, что срок действия их паролей никогда не истечет. Хотя это полезно / удобно в некоторых ситуациях, оно также может быть весьма опасным.
Учетные записи домена с высокими привилегиями и паролями с неограниченным сроком действия являются идеальными целями для атак с повышением привилегий и являются обычными «бэкдорными» пользователями для поддержания доступа, например, для групп APT (привет блечерам).
Как проверить:
Чтобы найти пользователей с паролями с неограниченным сроком действия, мы можем снова использовать упомянутый ранее инструмент LDAPDomainDump . Все, что нам нужно, - это учетные данные пользователя домена с низким уровнем привилегий и возможность доступа к порту LDAP любого контроллера домена.
Вот шаги:
1) Сначала соберите информацию с контроллера домена:
Код:
python ldapdomaindump.py -u <DOMAIN>\\<USER> -p <PASS> -d <DELIMITER> <DC-IP>
# Пример:
python ldapdomaindump.py -u example.com\\john -p pass123 -d ';' 10.100.20.1
2) После завершения сброса мы можем получить список пользователей с паролями с неограниченным сроком действия, используя следующую команду:
grep DONT_EXPIRE_PASSWD domain_users.grep | grep -v ACCOUNT_DISABLED | awk -F ';' '{print $3}'
В качестве альтернативы для получения списка таких пользователей на контроллере домена можно использовать следующую команду PowerShell:
Код:
Import-Module ActiveDirectory
Get-ADUser -filter * -properties Name, PasswordNeverExpires | where { $_.passwordNeverExpires -eq "true" } | where {$_.enabled -eq "true" }
Третья часть выйдет как можно скорее. Жду ваших рецензий)