• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Основные уязвимости Active Directory, 4 часть

valeraleontev

RAM
Пользователь
Регистрация
12.08.2021
Сообщения
100
Решения
5
Реакции
211
Основные уязвимости Active Directory, 4 часть
Привет, читатель! Рад тебя видеть. Продолжаю серию статей по уязвимостям Active Directory.
Настоятельно рекомендую ознакомиться с предыдущими главами:

  • Первая часть
  • Вторая часть
  • Третья часть
Я желаю услышать адекватную критику и рекомендации для улучшения контента. Не могу не повториться, сказав, что эти статьи вряд ли подойдут тем, кто занимается незаконным взломом. Эти статьи для тех, кто проводит легальный аудит, тот, кому требуется проверить максимум и защитить инфраструктуру как можно лучше. Заранее спасибо.

Приятного чтения!


13. Неактивные учетные записи домена



Эта уязвимость связана с наличием учетных записей пользователей, которые не использовались в течение длительного времени в соответствии с их «датой последнего входа в систему». Эти учетные записи обычно принадлежат:

  • Сотрудники, ушедшие из компании
  • Временные аккаунты
  • Тестовые аккаунты

Наличие неиспользуемых учетных записей домена повышает риск организации быть взломанной, поскольку дает возможность скомпрометировать эти учетные записи, например, с помощью брутфорса системы. (лично видел рдп доступ в многомиллионную $ компанию с кредами reports:reports )

Должен существовать механизм (политика) для отключения или удаления этих учетных записей на основе периодических проверок, например, после 30 дней бездействия. Конечно, срок может меняться.


Как проверить:


Чтобы найти неактивные учетные записи домена, мы снова можем использовать упомянутый ранее инструмент 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) После завершения сбора данных отсортируйте пользователей по дате их последнего входа в систему, используя следующую команду:

sort -t ';' -k 8 domain_users.grep | grep -v ACCOUNT_DISABLED | awk -F ';' '{print $3, $8}'

1630076881900.png


Если мы увидим что-то подобное, то мы должны сообщить об этом заказчику.

14. Привилегированные пользователи с просроченным паролем.


Эта уязвимость связана с тем, что пользователи с высоким уровнем привилегий и пользователи с правами администратора настроены с одним паролем на очень долгое время, например, на полгода или более.

Почему это проблема?

Привилегированные учетные записи являются целями для злоумышленников (например, APT и блечеры), и если их пароли не меняются периодически, то это дает злоумышленникам достаточно времени для успешного перебора и взлома учетных данных.

Как упоминалось ранее, все привилегированные учетные записи и служебные учетные записи должны регулярно менять пароли.


Как проверить:

Как точно определить привилегированного пользователя? Один очень хороший индикатор - это атрибут AdminCount, о котором уже упоминалось ранее. Итак, все, что нам нужно сделать, это получить список этих пользователей и посмотреть, когда в последний раз меняли их пароль.
Звучит немного сложно, но с упомянутым ранее инструментом 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) После завершения дампа получите список пользователей с атрибутом AdminCount, равным 1, путем анализа файла domain_users.json:

jq -r '.[].attributes | select(.adminCount == [1]) | .sAMAccountName[]' domain_users.json > privileged_users.txt

3) Теперь просмотрите список привилегированных пользователей, отобразите дату их последнего сброса пароля (pwdLastSet) и отсортируйте ее:

while read user; do grep ";${user};" domain_users.grep; done < privileged_users.txt | \ grep -v ACCOUNT_DISABLED | sort -t ';' -k 10 | awk -F ';' '{print $3, $10}'

1630077450500.png


Похоже, эти 5 привилегированных пользователей долгое время не меняли пароль, смело репортим!

15. Пользователи со слабым паролем


Несмотря на наличие политики паролей и развитой среды, все же могут существовать учетные записи домена со слабыми паролями.
Это очень распространенная проблема, особенно в больших средах Active Directory.


Как проверить:


Чтобы проверить пользователей домена на наличие слабых учетных данных, нам сначала нужно составить список пользователей. И чтобы получить список, мы должны иметь аккаунт пользователями с низким уровнем привилегий к домену.

Вот что мы можем сделать на машине с Windows, присоединенной к домену:

1) Сначала нам нужно получить список пользователей из AD, и для этого мы можем использовать следующую комбинацию PowerShell (либо любыми другими удобными для вас способами):


Код:
$a = [adsisearcher]”(&(objectCategory=person)(objectClass=user))”
$a.PropertiesToLoad.add(“samaccountname”) | out-null
$a.PageSize = 1
$a.FindAll() | % { echo $_.properties.samaccountname } > users.txt

Либо с помощью impacket:

Код:
samrdump.py <ip>
#Пример:
samrdump.py 10.10.10.10

Либо с помощью следующей команды получите все учетки на хосте:
net user

(а добавив флаг /domain команда выполняет операцию на контроллере основного для данного компьютера домена.)

2) Теперь мы можем передать этот список в любой из следующих инструментов для брутфорса: (атака называется распыление паролей ака Password Spraying)

  • Модуль PowerShell DomainPasswordSpray.ps1
  • Invoke-BruteForce.ps1 модуль PowerShell
  • Сканер Metasploit smb_login
  • Nmap ldap-brute сценарий NSE
  • Инструмент CrackMapExec
  • Инструмент Медуза
  • Инструмент Ncrack
  • Инструмент Hydra

Рассмотрим два варианта. CrackMapExec и скрипт повершелл:
1) Скрипт
1630078287700.png

Сам Скрипт (тут ссылка), синтаксис, я думаю, понятен

2) CrackMapExec, (в команде сократил до cme)

Код:
cme <protocol> <target(s)> -u username1 -p password1 password2
                           -u username1 username2 -p password1
                           -u ~/file_containing_usernames -p ~/file_containing_passwords
                           -u ~/file_containing_usernames -H ~/file_containing_ntlm_hashes
#Пример:
                cme smb 192.168.1.105 -u Administrator -H 32196B56FFE6F45E294117B91A83BF38 -x ipconfig

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Вот как мы могли бы сделать то же самое в Linux (например, Kali Linux):


1) Получите список пользователей домена AD с помощью команды net:

Код:
[LEFT]net rpc group members 'Domain Users' -I <DC-IP> -U "<USER>"%"<PASS>"
#Пример:
net rpc group members 'Domain Users' -I 192.168.10.50 -U "john"%"pass123" > users.txt
[/LEFT]


2) Теперь мы можем использовать его в любых вышеупомянутых инструментах, например, в Metasploit для атаки входа в систему:

Код:
use auxiliary/scanner/smb/smb_login
set RHOSTS <DC-IP>
set SMBDomain <DOMAIN>
set SMBPass file:pwdlist.txt
set USER_FILE users.txt
set THREADS 5
run


--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

ВНИМАНИЕ ! Перед запуском любой атаки на вход в систему мы всегда должны знать о корпоративной политике паролей, чтобы предотвратить блокировку пользователей.

16. Учетные данные в SYSVOL и настройках групповой политики (GPP)


Эта уязвимость связана с хранением учетных данных в общих сетевых папках SYSVOL, которые представляют собой папки на контроллерах домена, доступные и читаемые всем пользователям домена, прошедшим проверку подлинности.

Папки SYSVOL обычно используются для хранения корпоративных групповых политик, файлов конфигурации и других данных, которые отправляются пользователям при входе в систему и т. Д.

Хранение учетных данных в папках SYSVOL - это то, что администраторы иногда делают или предпочитают делать в определенный момент времени, чтобы решить некоторые проблемы конфигурации. Например, запуск приложения на клиентских машинах при входе в систему, для которого требуются права администратора.

Излишне говорить, что этого никогда не следует делать, потому что любой пользователь домена может получить доступ к общим ресурсам SYSVOL и найти учетные данные.

Типичные примеры:

  • Предпочтения групповой политики (GPP) с атрибутом cPassword ( MS14-025 )
  • Жестко заданные учетные данные в различных скриптах и файлах конфигурации

Как проверить:


Чтобы проверить это, нам необходимо обладать всеми учетными данными пользователя домена с низким уровнем привилегий.

Вот что мы можем сделать на машине с Windows, присоединенной к домену:


Код:
findstr /s /n /i /p password \\\\<DOMAIN>\sysvol\<DOMAIN>\*

# Пример:
findstr /s /n /i /p password \\\\corp.com\sysvol\corp.com\*

Эта команда будет анализировать все файлы в папке SYSVOL и искать шаблон «password».
Эквивалентная команда в Linux (например, Kali Linux) будет:

Код:
mount.cifs -o domain=<DOMAIN>,username=<USER>,password=<PASS> //<DC-IP>/SYSVOL /mnt

# Пример:
mount.cifs -o domain=example.com,username=john,password="pass@123" //10.10.139.115/SYSVOL /mnt

# Поиск:
grep -ir 'password' /mnt

Также мы можем использовать следующий модуль метасплойт:
use /post/windows/gather/credentials/gpp
Скорее всего, мы найдем что-нибудь интересное.

Например, мы могли найти атрибут cPassword в XML-файлах GPP, который можно было бы мгновенно расшифровать с помощью утилиты 'gpp-decrypt', встроенной в Kali Linux:

1630079016000.png


Теперь мы можем попытаться использовать этот пароль и аутентифицироваться с его помощью на компьютерах Windows, обнаруженных в сети. Или где-нибудь в другом месте.


Заключение​


Каждый, кто когда-либо углублялся в мир Active Directory, безусловно, согласится со мной, когда я скажу, что обеспечение безопасности Active Directory - непростая задача. Чтобы сделать это и снизить связанные с этим риски, требуются колоссальный уровень знаний и многолетний опыт.

Но даже тогда работа не будет сделана до конца. Она на самом деле никогда не выполняется, потому что всегда есть новые требования, новые функции, новые открытия и новые уязвимости, и поэтому всегда есть возможности для улучшения. Но я уверен, что ни для кого в мире информационной безопасности это не удивительно.

Я надеюсь, что эта статья предоставила по крайней мере некоторую ценную информацию для тестеров на проникновение и аудиторов, чтобы помочь их клиентам защитить свои среды Active Directory.
 
Спасибо, довольно хорошие переводы
Вам спасибо!) Рад, что понравилось. Постараюсь в скором времени написать небольшую личную доку по привилегиям и перемещению
 
Вам спасибо!) Рад, что понравилось. Постараюсь в скором времени написать небольшую личную доку по привилегиям и перемещению
тс спасибо ,статьи понравились
далее есть ,что почитать ?
 
тс спасибо ,статьи понравились
далее есть ,что почитать ?
Добрый вечер! рекомендую следующие курсы от PA:
CRTP
CRTE
Attacking MsSQL Servers
Network Pentesting
Global Central Bank
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх