Протокол RDP на сегодняшний день является одним из основных протоколов
удаленного доступа к машинам под управлением ОС Windows.
Помимо взаимодействия с удаленным компьютером он позволяет подключить
к удаленной машине локальные диски, порты и другие устройства.
На основании этого становится возможна атака, которая получила название
RDPInception, позволяющая захваченному 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 директории.
способный по максимуму использовать права пользователя, который
подключился по RDP и всех последующих пользователей в цепочке RDP
подключений.
Для алгоритма можно использовать имя пользователя, его группы, подсеть,
другими словами, все, что мы можем узнать о пользователей, запустившем
скрипт.
В примере выше будет выполнен код в скобках только если пользователь
состоит в домене WINDOMAIN.
Атака становится возможна, поскольку при входе в систему
выполняются скрипты, расположенные в Startup директории.
Таким образом, при следующем входе в систему, все зараженные
пользователи выполнят этот скрипт.
Дальнейшее зависит от того, как хорошо написан powershell cradle.
пользователи выполнят этот скрипт.
Дальнейшее зависит от того, как хорошо написан powershell cradle.
Практический пример
Для того чтобы начать атаку нужно получить доступ к пользователю на
одной из машин, к которым он подключается по RDP, положить скрипт
run.bat в его Startup директорию и ждать подключения.
одной из машин, к которым он подключается по RDP, положить скрипт
run.bat в его Startup директорию и ждать подключения.
В качестве powershell кредла я буду использовать powershell empire агент.
Запускаем powershell empire, настраиваем листнер
Генерируем код агента
Изменяем в run.bat последнюю строку таким образом
Запускаем powershell empire, настраиваем листнер
Генерируем код агента
Изменяем в run.bat последнюю строку таким образом
Для демонстрации я указал, что если имя пользователя будет Admin,
то будет выполнен код powershell empire, а если Administrator, то будет
запущен калькулятор.
Положим файл на захваченный терминальный сервер или машину с
RDP доступом, выполним, чтобы размножить на все Startup директории
пользователей, к которым имеем доступ.
RDP доступом, выполним, чтобы размножить на все Startup директории
пользователей, к которым имеем доступ.
После успешной аутентификации получаем powershell empire
сессию с машины, к которой подключилась жертва.
сессию с машины, к которой подключилась жертва.
Одновременно с этим, run.bat появляется и в Startup директориях пользователей
на машине, с которой произошло подключение.
В частности файл появляется в директории пользователя Administrator.
Теперь, если мы перелогинимся на RDP-клиента под Administrator, то автоматически
запустится калькулятор
запустится калькулятор
Другие пользователи которые регулярно логинятся на эту машину по RDP
или физически потенциально могут заразить те машины, локальные диски
которых примонтировали при подключении. И так далее.
или физически потенциально могут заразить те машины, локальные диски
которых примонтировали при подключении. И так далее.
В заключении
Приведенный скрипт является в большей степени Proof-of-Concept.
В действительности, основываясь на этой технике можно выполнять
сложные атаки в условиях, когда другие методы продвижения в сети
становятся не эффективными.
В действительности, основываясь на этой технике можно выполнять
сложные атаки в условиях, когда другие методы продвижения в сети
становятся не эффективными.
Комментарии
Отправить комментарий