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