Remote Desktop Protocol (протокол удалённого рабочего стола, RDP) — проприетарный протокол, разработанный Microsoft примерно в 1998 году. Начиная с XP каждая версия Windows включает системный компонент
mstsc.exe
.Благодаря RDP, можно подключиться к другой системе и работать за ней словно за своим компьютером. То же самое делают, например, AnyDesk и TeamViewer, у которых протоколы схожей функциональности.
▍ Как работает RDP
В общих словах, базовая функция протокола удалённого рабочего стола — передача видеопотока от сервера клиенту. На сервере стоит устройство видеозахвата, которое записывает видео, сжимает его кодеком H.264 — и отправляет клиенту с минимальной задержкой по TCP/IP.
Конечно, только отправить видеопоток недостаточно, это же не простая видеотрансляция. Это лишь часть виртуальных каналов в RDP. Нужно ещё получить обратную связь от клиента, а именно зашифрованные данные об активности мыши и клавиатуры.
Информация между клиентом и сервером в RDP передаётся параллельно по тысячам виртуальных каналов
На сервере RDP использует собственный видеодрайвер для рендеринга вывода изображения на экран, внедряя информацию о рендеринге в сетевые пакеты с помощью протокола RDP и отправляя их по сети на клиент. На клиенте RDP получает данные рендеринга и интерпретирует пакеты в соответствующие вызовы API интерфейса графических устройств Microsoft Windows (GDI). На сервере у RDP собственный драйвер клавиатуры и мыши для приёма этих событий от клиента.
В сеансе удалённого рабочего стола все переменные среды — например, определяющие глубину цвета, включение и отключение обоев — определяются настройками отдельного соединения RCP-Tcp. Все функции и методы для описания переменных описаны в справочнике по веб-подключению к удалённому рабочему столу и интерфейсе поставщика WMI служб удалённых рабочих столов.
Если вдаться в детали, то в рамках стека RDP интерес представляют четыре ключевых компонента:
- служба многоточечной связи (MCSMux)
- Generic Conference Control (GCC)
- Wdtshare.sys — драйвер для передачи пользовательского интерфейса, сжатия, шифрования, кадрирования и т. д.
- Tdtcp.sys — транспортный драйвер для упаковки контента RDP в пакеты TCP/IP
MCSmux и GCC являются частью семейства стандартов T.120 Международного союза электросвязи (ITU). В частности, MCSmux представляет два стандарта:
- T.122: Определяет многоточечные услуги
- T.125: Определяет протокол передачи данных
Стек протоколов
MCSMux управляет:
- назначением каналов путём мультиплексирования данных на заранее определённые виртуальные каналы в рамках протокола
- уровням приоритетов
- сегментацией передаваемых данных
Примерно так работает система, в двух словах. И, видимо, не только RDP, но и во всех остальных программах для удалённого управления компьютером, в том числе в проприетарных протоколах AnyDesk или TeamViewer.
▍ Версии RDP
Microsoft продолжает планомерно дорабатывать протокол RDP. В последние годы версии RDP соответствую версиям операционной системы, с которой он выходит.
Например, версия 7.0 вышла вместе с Windows 7 и Windows Server 2008 R2, версия 8 — с Windows 8 и Windows Server 2012 и так далее. Ниже небольшая табличка с перечислением нескольких последних версий RDP и новых функций для каждой. Что характерно, большинство новых функций RDP было доступно только в версиях Windows Enterprise or Ultimate.
Версия RDP | Версия Windows | Новые функции RDP |
---|---|---|
7.0 | Windows 7 и Windows Server 2008 R2 |
|
7.1 | Windows 7 SP1 и Windows Server 2008 R2 SP1 |
|
8.0 | Windows 8 и Windows Server 2012 |
|
8.1 | Windows 8.1 и Windows Server 2012 R2 |
|
10.0 | Windows 10 |
|
Как видим, в серверных версиях Windows RDP гораздо функциональнее, чем в клиентских. Кстати, это касается и некоторых других компонентов Windows. Это одна из причин, почему админы часто ставили Windows Server даже на персоналки. Они тогда говорили, что Windows Server 2012 даже работает стабильнее, чем обычная Windows 7, почти никогда не падает.
В Windows 10/11 стабильность клиентских версий Windows повысили, так что эта проблема уже не так актуальна. Сейчас про «синий экран смерти» мало кто вспоминает (тем более он уже не синий), а раньше BSOD случался чуть ли не ежедневно от банальных причин…
Впрочем, мы отвлеклись.
▍ Официальный клиент
Как уже говорилось — начиная с Windows XP, все версии Windows включают системный компонент службы терминалов
mstsc.exe
. Вызвать его можно прямо из консоли. Команда mstsc.exe /?
выводит справку:В справке перечислены все допустимые параметры и команды
mstsc.exe
. Количество параметров зависит от версии операционной системы (см. таблицу выше). Как видим, все команды можно вводить в консоли, то есть работать с клиентом полностью из командной строки. Например:mstsc /v:192.168.1.1
mstsc /w:1024 /h:768
mstsc /edit D:\RDPfiles\user2.rdp
— редактировать параметры удалённого подключения в файле D:\RDPfiles\user2.rdp
.Как понятно из последней команды, все настройки подключения хранятся в файле
.rdp
, так что их легко переносить с компьютера на компьютер, просто копируя файл.Если запустить из командной строки
mstsc.exe
, то откроется окошко с графическим интерфейсом.В этом GUI доступны все основные параметры запуска, как из командной строки. Хотя в консоли всё-таки свободы больше: например, можно установить произвольный размер окна для удалённого рабочего стола, а не выбирать из ограниченного списка шаблонов.
▍ Свободные реализации
Хотя протокол сугубо проприетарный, существует множество сторонних реализаций клиентов и серверов RDP, которые отличаются от проприетарного оригинала Microsoft. К сожалению, из-за закрытости протокола они реализуют не всю функциональность RDP.
Из интересных проектов можно упомянуть Xrdp — опенсорсный RDP-сервер под Linux. Xrdp обеспечивает графический вход на удалённые машины по RDP и принимает соединения от различных клиентов:
-
FreeRDP
-
rdesktop
-
KRDC
-
NeutrinoRDP
- Windows MSTSC (Microsoft Terminal Services Client, он же mstsc.exe), то есть нативный клиент, описанный выше
- Microsoft Remote Desktop (находится в Microsoft Store, отличается от MSTSC).
Многие из них работают на некоторых или всех ОС Windows, Mac OS, iOS и/или Android.
Транспорт RDP по умолчанию шифруется с помощью TLS.
Кроме доступа к удалённому рабочему столу Linux, поддерживается и доступ к удалённым ресурсам, включая двустороннюю передачу клипборда, редирект звука, микрофона и диска (монтирование локальных дисков на удалённый компьютер).
В описании Xrdp упомянуты популярные опенсорсные RDP-клиенты: FreeRDP (macOS, Windows, Linux), rdesktop, KRDC, NeutrinoRDP. Есть десяток GUI-клиентов поверх rdesktop, коммерческий клиент Thincast на базе FreeRDP, а также GTK-клиент Remmina.
▍ Уязвимости
В связи со сложностью проприетарного протокола и внедрением новых функций и закрытым исходным кодом в RDP постоянно находят новые уязвимости. Обычно это критические уязвимости с удалённым исполнением кода. Конечно, RDP притягивает злоумышленников, ведь дыра в нём почти сразу предоставляет полный доступ к удалённому компьютеру. Наверное, и сейчас существуют 0day-уязвимости в RDP, о которых не сообщают общественности, но знающие люди ими пользуются.
В целом же приятно видеть, что проприетарный протокол Microsoft обрастает опенсорсным софтом и библиотеками, так что постепенно интегрируется в открытую экосистему — и выбирается из проприетарного рабства. В рамках новой политики Microsoft по поддержке Open Source можно ожидать, что она и сама когда-нибудь откроет исходный код RDP.
Комментарии (25)
SerpentFly
21.06.2023 09:43+5
vis_inet
21.06.2023 09:43+31Так и не понял из статьи про "вырывание (почти) из рабства"...
remzalp
21.06.2023 09:43Есть опенсорсная реализация как сервера, так и клиента, что для проприетарного протокола уже (почти) хорошо
SabMakc
21.06.2023 09:43+9И чем наличие опенсорсных реализаций делает протокол менее проприетарным?
Или вышла какая-то свежая реализация? Xrdp с 2004го года живет потихоньку...
erkesh
21.06.2023 09:43+6так этим "почти" MS RDP аналогам сто лет в обед. А если сравнить их качество с MS RDP - как пешком до луны
mihmig
21.06.2023 09:43+10Да, только они работают а-ля VNC (тупо гоняют битмапы).
Проприетарный же RDP несколько быстрее, так как передаёт по сети GDI-примитивы.
Vasjen
21.06.2023 09:43+4BSOD в WIN10 все еще синий
Но да, так же часто как в XP, еще до выхода SP3, он не падает.
Shaginov
21.06.2023 09:43+1Кстати, есть видео из первых рук (ну ладно, из вторых) о том, как BSOD эволюционировал: https://www.youtube.com/watch?v=KgqJJECQQH0
ZetaTetra
21.06.2023 09:43+2Microsoft Remote Desktop (находится в Microsoft Store, отличается от MSTSC).
Внутри использует COM компонент и написан на C#.
Поэтому его легко реверсануть и написать свою реализацию.
(Про остальные не знаю, не изучал)Но наличие решений испольующих этот компонент, не приближает открытости решения, как это НЕ произошло с Trident'ом...
Думается мне, единственный вариант появления открытого решения - если бизнес начнёт платить за реверс, как это произошло с Biff8.
atd
21.06.2023 09:43Это одна из причин, почему админы часто ставили Windows Server даже на персоналки. Они тогда говорили, что Windows Server 2012 даже работает стабильнее, чем обычная Windows 7, почти никогда не падает.
Почему в прошедшем времени? И сейчас 2022 сильно приятней 10/11, не надо постоянно бороться с системой, один раз настоил и вперёд. Удобно, что нужные компоненты можно добавить в несколько кликов, а не наоборот, отковыривать от клиентской версии ненужный шлак...
Единственная проблема, с которой я пока что столкнулся
— запоротый драйвер I²C-периферии, так что не на все ноуты можно воткнуть сервер. Драйвер от 10ки удалось запихнуть, но стартовать он почему-то отказывается
dscheg
21.06.2023 09:43+1Кстати до недавнего времени Microsoft Remote Desktop App из Microsoft Store был уязвим к MitM (легко реализуется через https://github.com/GoSecure/pyrdp) при повторных подключениях к серверу с самоподписанным сертификатом без NLA из-за того, что при указании галки "Don't ask about this certificate again" сохранял в качестве идентификатора trusted сертификата его серийный номер, а не отпечаток.
Ссылка на CVE: https://msrc.microsoft.com/update-guide/en-US/vulnerability/CVE-2023-28290
Исправляли уязвимость полгода (зарепортил 2022-12-03, закрыта 2023-05-25). В какой-то момент после моего репорта на странице заметок о релизах https://aka.ms/rdwinupdates добавилась формулировка "We're no longer updating the Remote Desktop app for Windows with new features"
aik
21.06.2023 09:43Благодаря RDP, можно подключиться к другой системе и работать за ней словно за своим компьютером. То же самое делают, например, AnyDesk и TeamViewer, у которых протоколы схожей функциональности.
Всё же не стоит сравнивать RDP со всякими там энидесками. Задачи у них разные. RDP — это удалённая работа в первую очередь, терминальный режим. А тимвьюверы — это удалённое управление, подключение к существующей сессии, проход NAT'а.
theurus
21.06.2023 09:43anydesk и teamviewer принципиально отличаются от rdp, работают совсем по другому. и открытые клоны (возможно не все) работают так же как anydesk и teamviewer, не используют главный козырь настоящего rdp - передачу изображения в виде векторов
khajiit
21.06.2023 09:43+1передачу изображения в виде векторов
Не изображений в виде векторов, а GDI-примитивов, подобно тому как
xpra
илиssh -X
пробрасывают отрисовку на клиента.
И которую вам радостно поломают 1С, Autodesk, Adobe, 3DS, любой аудиоплеер или браузер, или даже штатный dwm.
woozlix
21.06.2023 09:43Однажды нехороший мамкин хакер зашел на мой виндоус сервер по RDP и украл около 100к рублей с аккаунта. Сервак был в одном из популярных хостингов и был защищен стандартным паролем. Может быть кому-то пригодится мой совет: максимально защищайте RDP-сервера
domix32
21.06.2023 09:43Дефолтные пароли нанесли ущерба заметно больше 100к. Да и в среднем надо всё защищать по максимуму, разве что кроме honeypot.
domix32
21.06.2023 09:43+1H.264
А откуда дровишки? Насколько знаю там повсеместно используется хитрый вариант RLE.
vit1252
21.06.2023 09:43А зачем RDP использовать? В смешанных стеках одни проблемы. Может посмотреть в стороны VNC или какого-то другого открытого протокола?
Iskatel_S
21.06.2023 09:43Забыли упомянуть RDP-сервер, встроенный в гипервизор VirtualBox. Хотя конечно VNC в нём был бы уместнее.
Tarakanator
21.06.2023 09:43Функция слежки за пользовательскими сессиями со стороны администратора возвращена обратно
Это что за функция? rdp shadow? Так её нельзя использовать для этого на несерверной винде, или подразумевается какая-то другая функция?
SGordon123
citrix тут совсем не у дел?
MockBeard
Кто сейчас помнит про Sybase SQL, из которого вырос MS SQL?
AnGord
Увы, они не успели за прогрессом. Постепенно большую часть их ключевых функций внедрили у себя МС и встал вопрос - а зачем citrix ?