Relay Lab
Автор статьи: Александр Колесников
В этом цикле статей попробуем воспроизвести максимальное количество Relay атак на инфраструктуру Windows. Рассмотрим настройку инфраструктуры, ее состав и версии Windows.
Relay
Лучшее описание этого термина, это описание ситуации, когда он может быть применен. Relay — это атака, в которой злоумышленник смог провести систему и создал условия man-in-the-middle атаки, когда он может контролировать трафик между клиентом и сервером.
По сути это означает, что можно передавать вообще любую информацию от имени клиента в сторону сервера и наоборот. Поэтому атакующему не составляет труда через себя пропускать запросы для аутентификации без изменений и добиваться идеальных условий для проведения атаки Relay.
Инфраструктуры под управлением операционной системы Windows могут быть уязвимы для такого рода атак но, чтобы их провести, злоумышленник должен попасть в локальную сеть.
В наших статьях мы будем подразумевать, что у злоумышленника уже получилось попасть в локальную сеть и теперь ему необходимо повысить свои привилегии или собрать больше информации о системе. Для этого он будет стараться использовать Relay атаки.
Есть ли ограничения у атак Relay? На самом деле Relay включает в себя целый набор атак, целью этих атак могут быть различные действия и сборы дополнительных данных. Однако, чтобы научиться их применять правильно, нужно понимать, какие существуют возможности.
Первый пункт, который нужно знать — это какие существуют протоколы в инфраструктуре, на которые можно устроить Relay. В сети можно найти достаточно интересные диаграммы, где показывается какие протоколы куда можно направлять. Несколько примеров картинок представлено ниже:
ntlm_rezume
Красным выделены пересечения протоколов, которые Windows не позволит выполнить Relay, а зеленые — это те протоколы, которые дают шанс атаке на успех. Почему всё так не точно? Каждый выпуск KB может ломать закономерности, поэтому нужно на каждой конкретной версии Windows проверять те данные, которые расположены на картинке.
Также в сети можно найти вот такую картинку относительно возможных протоколов для проведения Relay:
ntlm_relay
Итого, имеем набор примерных границ, где должен работать Relay, теперь попробуем сделать несколько тестов.
Настройка стенда
Не всегда возможно настраивать машины в облаке, где нет лимита на вычислительные возможности. Поэтому будем стараться оптимизировать стенд для работы с Relay атаками под систему, где есть от 400 Гб свободного места на жестком диске и 8 Гб оперативной памяти.
Для настройки стенда нам понадобится:
Основные тесты будем проводить с использованием операционной системы 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 сервером и прописать следующие данные:
Имя компьютера
DNS сервер, им будет первый сервер, который мы сделали контроллером домена.
Ввести сервера в домен
Все необходимые манипуляции можно выполнить из меню, которое вызывается на команду sconfig:
sconfig
Наименования меню можно выбирать по соответствующим номерам из списка, после введения данных, у вас будет готова мини инфраструктура для тестирования Relay атак. Дальнейшие настройки для проведения атак будем рассматривать в рамках проведения атаки. первая часть описания будет показывать что нужно настроить, если стандартная настройка не будет позволять выполнить атаку.
Набор атак
Определимся с полным списком атак, которые возможны для Relay. В нашей статье будем придерживаться классификации, в основе которой располагаются действия, которые позволяет выполнить Relay.
Как видно список довольно внушительный, но он еще может быть дополнен данными из картинок выше. То есть каждую атаку можно производить только в условиях работы каждого из протоколов. Поэтому 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. Вообще для этих целей можно и нужно пользоваться различными ухищрениями, чтобы пользователю нужно было делать поменьше действий, но об этом будем говорить в следующей части статьи.
Результат атаки можно увидеть ниже: