Автор статьи: Александр Колесников

В статье мы продолжим знакомиться с атаками Relay в инфраструктуре Windows Active Directory. Начальные настройки тестового стенда можно найти в первой части этого цикла статей. А сейчас попробуем провести Relay атаки на взаимодействие по протоколам SMB->LDAP, HTTP->LDAP и HTTP->RPC.

Используемые протоколы

Перечень протоколов, которые могут быть использованы для проведения атак типа Relay на самом деле довольно обширен. Все используемые протоколы продиктованы функционалом операционной системы Windows, а именно - NTLMSSP (NT Lan Manager (HTLM) Security Support Provider) этот механизм как раз и срабатывает автоматически в ОС, когда необходимо пройти процедуру аутентификации. Беда этого механизма заключается лишь в том, что аутентификация основана на challenge-response методах, которые изначально никак не были защищены, и только со временем в Windows были добавлены митигации, которые требуют проверки целостности и подлинности от пересылаемых данных. Поэтому сегодня пользователь для любого используемого протокола может настраивать состояние механизмов проверки целостности и подписи запросов и ответов. Причем некоторые настройки устанавливаются автоматически как устанавливается дополнительный функционал в операционную систему.

Для примера, приведем часть из списка протоколов, которые могут использовать NTLM в качестве способа проведения аутентификации:

  • RPC

  • SMB

  • HTTP

  • LDAP

  • IMAP

  • SMTP

  • POP3

  • ...

Стоит еще так же упомянуть, что протоколы, которые перечислены выше, могут использоваться клиентским программным обеспечением, которое устанавливается в операционную систему и оно тоже может стать целью для атаки. Кстати, если говорить о программном обеспечении, которое можно атаковать через Relay, то здесь можно вспомнить один интересный пример.

Интересное применение Relay атак

Наверное одна из самых первых относительно простых Relay атак, которую легко использовать для эскалации привилегий - Hot Potato. Да, атака довольно старая, но метод, который лежит в её основе как раз демонстрирует, что использование Relay атак даже на локальной машине может принести очень много пользы.

Суть атаки заключается в том, что атакующему нужно выполнить несколько условий:

  1. Заставить систему запросить WPAD

  2. Подменить адрес на WPAD 127.0.0.1

  3. Подложить свой собственный WPAD

  4. Провести аутентификацию от имени ОС

Визуально весь алгоритм выглядит так:

HotPotato
HotPotato

Конечно же набор уязвимостей, которые позволяли так здорово заполучить привилегии пользователя SYSTEM исправили в далеком 16м году. Однако для эскалации привилегий на системах Windows 7, которые не содержат патчей MS16-077 и MS16-075, метод все еще может быть действенным.

Атаки Relay для получения повышенных привилегий развиваются и сегодня, перечень известных Potato можно найти ниже:

Для каждой атаки можно подобрать ОС Windows той версии, которая является уязвимой.

Relay практика

Итак, просмотрев небольшой экскурс по Relay атакам, попробуем провести атаку HTTP->LDAP. Для этого нам потребуется:

  • Windows Server Core 2016 - контроллер домена.

  • Windows Server 2016 Desktop Experience - сервер в AD (можно делать контроллером, можно просто сервером в AD).

  • Ubuntu Server 20.04 в качестве системы, которая будет проводить атаку.

Инструменты на системе Ubuntu Server 20.04:

Атаки Relay, где конечным протоколом взаимодействия становится LDAP сложны тем, что последний даже в установке по умолчанию может требовать специальное подтверждение целостности, без которого не будет происходить подключение и взаимодействие системы. Поэтому провести атаку SMB->LDAP получится только вот с таким результатом:

smbToLdap
smbToLdap

Команды с картинки:

ntlmrelayx.py -t ldap://192.168.56.101 -smb2support

Можно ли с этим что-то сделать? Да, только нужно чтобы на сервере не была установлена настройка Forced Sign для взаимодействия LDAP (по умолчанию не выставлено). Поэтому мы можем прибегнуть к небольшой модификации запроса это достаточно просто сделать через флаг ntlmrelayx - remove-mic.

Remove-mic это флажок, который просто уберет Message Integrity Check параметр из данных, которые отправил клиент. Попробуем:

removeMicSMBToLdap
removeMicSMBToLdap

Похоже, что работает.

Теперь попробуем сделать Relay HTTP->LDAP, сложность этой атаки по сути не отличается ничем от предыдущей, разница только в запуске ntlmrelayx, вместо smb нужно написать ldap. Для этой атаки стоит помнить, что запуск аутентификации для сервера из powershell или просто обращением к Relay серверу недостаточно, нужно чтобы NTLM SSP действительно начал процесс аутентификации. В большинстве случаев Relay HTTP->LDAP выполняется с небольшим дополнением - сервер Relay будет запрашивать введение пароля пользователя.

Ниже пример таких действий:

HTTPToLDAPPassword
HTTPToLDAPPassword

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

HTTPToLdapRelay
HTTPToLdapRelay

Последний вариант Relay, который хотелось бы практически разобрать это HTTP->RPC. RPC протокол интересен тем, что позволяет обращаться не просто в стандартные приложения типа веб серверов, но и так же "общаться" с операционной системой. Как при этом выглядит атака:

ntlmrelayx -t rpc://192.168.56.101 -c "echo 'test' >> C:\test.txt"
ntlmrelayxRPC
ntlmrelayxRPC

И проверка результата:

relayResult
relayResult

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

ADData
ADData

В следующей статье попробуем разобраться в последних версиях Potato эксплойтов и заставим системы без взаимодействия с пользователем.

Напомню, что данная серия статей подготовлена в преддверии старта курса: «Пентест. Практика тестирования на проникновение».

Комментарии (0)