К основному контенту

RDP Inception — атака через подключенные диски


Протокол RDP на сегодняшний день является одним из основных протоколов
удаленного доступа к машинам под управлением ОС Windows.
Помимо взаимодействия с удаленным компьютером он позволяет подключить
к удаленной машине локальные диски, порты и другие устройства.
На основании этого становится возможна атака, которая получила название
RDPInception, позволяющая захваченному RDP серверу атаковать клиентские
машины. Если атакованная машина подключается по цепочке через несколько
серверов и везде монтируются локальные диски, становится возможным
атаковать все машины в цепочке.

Как работает RDPInception

Для проведения атаки можно воспользоваться скриптом
а именно файлом run.bat.
Если вы пользуетесь Cobalt Strike, то можете использовать aggressor script,
которыйтак же доступен на гитхабе.
Посмотрим на содержимое bat-файла и разберем по порядку, что происходит:
Отображаем пользователю какой-нибудь неподозрительный текст.
Делаем небольшую задержу, чтобы убедиться, что локальные диски клиента
примонтировались.
Создаем директорию temp в корне примонтированного диска и диска машины,
на которую подключается жертва.
Самокопирование скрипта в эти директории.
Убеждаемся, что такого файла нет в TEMP (на всякий случай)
Ищем директории со словом startup




В них ищем уже более детально и записываем в файл temp_00.txt
После этого файл будет выглядеть примерно так
Далее в каждую директорию из файла пытаемся размножить скрипт run.bat
Очищаем временные файлы
Выполняем пейлоад (изначально закомментирован)
В качестве cradle должен выступать «достаточно умный» powershell скрипт,
способный по максимуму использовать права пользователя, который
подключился по RDP и всех последующих пользователей в цепочке RDP
подключений.
Для алгоритма можно использовать имя пользователя, его группы, подсеть,
другими словами, все, что мы можем узнать о пользователей, запустившем
скрипт.
В примере выше будет выполнен код в скобках только если пользователь
состоит в домене WINDOMAIN.
Атака становится возможна, поскольку при входе в систему
выполняются скрипты, расположенные в Startup директории.
Таким образом, при следующем входе в систему, все зараженные
пользователи выполнят этот скрипт.
Дальнейшее зависит от того, как хорошо написан powershell cradle.

Практический пример

Для того чтобы начать атаку нужно получить доступ к пользователю на
одной из машин, к которым он подключается по RDP, положить скрипт
run.bat в его Startup директорию и ждать подключения.
В качестве powershell кредла я буду использовать powershell empire агент.
Запускаем powershell empire, настраиваем листнер








Генерируем код агента







Изменяем в run.bat последнюю строку таким образом




Для демонстрации я указал, что если имя пользователя будет Admin,
то будет выполнен код powershell empire, а если Administrator, то будет
запущен калькулятор.
Положим файл на захваченный терминальный сервер или машину с
RDP доступом, выполним, чтобы размножить на все Startup директории
пользователей, к которым имеем доступ.








и подключимся к этой машине с другой Windows машины,
подключив диск C в настройках RDP клиента.
После успешной аутентификации получаем powershell empire
сессию с машины, к которой подключилась жертва.




Одновременно с этим, run.bat появляется и в Startup директориях пользователей
на машине, с которой произошло подключение.
В частности файл появляется в директории пользователя Administrator.
Теперь, если мы перелогинимся на RDP-клиента под Administrator, то автоматически
запустится калькулятор
Другие пользователи которые регулярно логинятся на эту машину по RDP
или физически потенциально могут заразить те машины, локальные диски
которых примонтировали при подключении. И так далее.

В заключении

Приведенный скрипт является в большей степени Proof-of-Concept.
В действительности, основываясь на этой технике можно выполнять
сложные атаки в условиях, когда другие методы продвижения в сети
становятся не эффективными.

Комментарии