Как протокол RDP (почти) вырвался из проприетарного рабства

в 9:00, , рубрики: FreeRDP, IT-стандарты, KRDC, Microsoft Remote Desktop, Microsoft Terminal Services Client, mstsc.exe, NeutrinoRDP, open source, rdesktop, rdp, Remote Desktop Protocol, Remote Desktop Services, ruvds_статьи, Terminal Services, Windows MSTSC, xrdp, Блог компании RUVDS.com, Серверное администрирование, системное администрирование

Как протокол RDP (почти) вырвался из проприетарного рабства - 1


Remote Desktop Protocol (протокол удалённого рабочего стола, RDP) — проприетарный протокол, разработанный Microsoft примерно в 1998 году. Начиная с XP каждая версия Windows включает системный компонент mstsc.exe.

Благодаря RDP, можно подключиться к другой системе и работать за ней словно за своим компьютером. То же самое делают, например, AnyDesk и TeamViewer, у которых протоколы схожей функциональности.

▍ Как работает RDP

В общих словах, базовая функция протокола удалённого рабочего стола — передача видеопотока от сервера клиенту. На сервере стоит устройство видеозахвата, которое записывает видео, сжимает его кодеком H.264 — и отправляет клиенту с минимальной задержкой по TCP/IP.

Конечно, только отправить видеопоток недостаточно, это же не простая видеотрансляция. Это лишь часть виртуальных каналов в RDP. Нужно ещё получить обратную связь от клиента, а именно зашифрованные данные об активности мыши и клавиатуры.

Как протокол RDP (почти) вырвался из проприетарного рабства - 2
Информация между клиентом и сервером в 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: Определяет протокол передачи данных

Как протокол RDP (почти) вырвался из проприетарного рабства - 3
Стек протоколов

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
  • Смена названия со «службы терминалов» на «службу удалённого доступа»
  • Поддержка редиректа Windows Media Player, двунаправленного звука, нескольких мониторов, элементов интерфейса Aero Glass
  • Улучшенное сжатие битмапов
  • Редирект Easy Print
  • Докинг языковой панели
7.1 Windows 7 SP1 и Windows Server 2008 R2 SP1
  • Внедрение проприетарной технологии RemoteFX, которая включает виртуализацию GPU, что означает совместное использование физического графического адаптера несколькими виртуальными машинами (кстати, это пригодилось для майнеров во время биткоин-бума начала 2010-х годов), редирект USB, новый более качественный lossy-кодек для сжатия видео и текста
  • В серверной версии RemoteFX (то есть в версии для Windows Server) реализовали механизм адаптивной графики с подстройкой под разные параметры среды окружения, поддержку UDP для WAN, мультитач (передача жестов между устройствами), нативную интеграцию VoIP, прямую передачу и рендеринг аудио- и видеоконтента через RemoteFX Media Redirection API, выбор GPU (софтверный или с аппаратной поддержкой
  • Поддержка DirectX 11
8.0 Windows 8 и Windows Server 2012
  • Адаптивная графика
  • Автоматический выбор TCP или UDP
  • Мультитач, vGPU, более продвинутый редирект USB и некоторые другие функции, ранее доступные только в серверной версии
  • На верхней панели клиента RDP появилась кнопка «Качество соединения»

    Как протокол RDP (почти) вырвался из проприетарного рабства - 4

  • Ограниченная поддержка вложенных сессий
  • Удалены функции слежки за пользовательскими сессиями со стороны администратора и Aero Glass
8.1 Windows 8.1 и Windows Server 2012 R2
  • Функция слежки за пользовательскими сессиями со стороны администратора возвращена обратно
  • Исправлены глюки Microsoft Office 2013 при работе RemoteApp, это специальный режим работы Remote Desktop Services с интеграцией конфигурации сессии в операционную систему клиента
  • Появился режим «ограниченный админ», где вместо пароля передаётся его хэш. Microsoft опубликовала 82-страничное руководство, как защититься от кражи хэша в этом режиме
10.0 Windows 10
  • Реализован зум AutoSize (полезен для клиентов с экранами высокого разрешения)
  • Основной графический кодек проапгрейдили до H.264/AVC
  • Небольшое обновление RemoteFX для Windows Server: поддержка OpenGL 4.4 и OpenCL 1.1, больше выделенной видеопамяти для адаптера RemoteFX, различные улучшения производительности в транспорте и API. Ещё RemoteFX Media Streaming (H.264) заменил Multi Media Redirection (MMR)

Актуальная версия RDP — 10.0.

Как видим, в серверных версиях Windows RDP гораздо функциональнее, чем в клиентских. Кстати, это касается и некоторых других компонентов Windows. Это одна из причин, почему админы часто ставили Windows Server даже на персоналки. Они тогда говорили, что Windows Server 2012 даже работает стабильнее, чем обычная Windows 7, почти никогда не падает.

В Windows 10/11 стабильность клиентских версий Windows повысили, так что эта проблема уже не так актуальна. Сейчас про «синий экран смерти» мало кто вспоминает (тем более он уже не синий), а раньше BSOD случался чуть ли не ежедневно от банальных причин…

Впрочем, мы отвлеклись.

▍ Официальный клиент

Как уже говорилось — начиная с Windows XP, все версии Windows включают системный компонент службы терминалов mstsc.exe. Вызвать его можно прямо из консоли. Команда mstsc.exe /? выводит справку:

Как протокол RDP (почти) вырвался из проприетарного рабства - 5

В справке перечислены все допустимые параметры и команды mstsc.exe. Количество параметров зависит от версии операционной системы (см. таблицу выше). Как видим, все команды можно вводить в консоли, то есть работать с клиентом полностью из командной строки. Например:

mstsc /v:192.168.1.1

mstsc /w:1024 /h:768

mstsc /edit D:RDPfilesuser2.rdp — редактировать параметры удалённого подключения в файле D:RDPfilesuser2.rdp.

Как понятно из последней команды, все настройки подключения хранятся в файле .rdp, так что их легко переносить с компьютера на компьютер, просто копируя файл.

Если запустить из командной строки mstsc.exe, то откроется окошко с графическим интерфейсом.

Как протокол RDP (почти) вырвался из проприетарного рабства - 6

В этом GUI доступны все основные параметры запуска, как из командной строки. Хотя в консоли всё-таки свободы больше: например, можно установить произвольный размер окна для удалённого рабочего стола, а не выбирать из ограниченного списка шаблонов.

Как протокол RDP (почти) вырвался из проприетарного рабства - 7

▍ Свободные реализации

Хотя протокол сугубо проприетарный, существует множество сторонних реализаций клиентов и серверов 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.

Как протокол RDP (почти) вырвался из проприетарного рабства - 8

Кроме доступа к удалённому рабочему столу 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.

Автор:
ru_vds

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js