Протокол 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. В действительности, основываясь на этой технике можно выполнять сложные атаки в условиях, когда другие методы продвижения в сети становятся не эффективными.

Материалы: https://www.mdsec.co.uk/2017/06/rdpinception/