8 мин

Страх и ненависть в протоколе RDP

Как протокол RDP менялся за последние десять лет: версии от NT 4.0 до десятки, полезные флаги mstsc, теневые подключения, дыры в безопасности и будущее администрирования Windows.

Все те из нас, кто всё ещё администрирует Windows на серверах, привыкли к протоколу RDP.

Последовательность Win+R → mstsc зашита не то что в мышечной, а наверняка уже в генетической памяти.

Но не все занимались изучением протокола RDP. Для нас это данность, которую мы не подвергаем вопросам. А зря. На самом деле протокол RDP менялся на протяжении последних 10 лет, и его использование позволяет создавать достаточно нестандартные системы. В том числе замечательный и прекрасный протокол может стать большой дырой в безопасности внутренней сети компании, если за ним не следить правильно.

В этой статье я расскажу, что происходило с протоколом RDP, куда всё катится и чего надо бояться.

Для начала — немного истории

Протокол RDP недавно обновился до версии 10. Хотя большинство из нас привыкли ещё к версии 5.1 и никогда не замечали изменений.

Краткое описание предыдущих пяти тысяч серий:

  • Версия 4 была первой, которую выпустили вместе с Windows NT 4.0.
  • Версия 5 была добавлена в Windows 2000. Она позволяла работать с принтерами на локальной машине.
  • Версия 5.1 была добавлена в Windows XP, позволяя работать с 24-битной палитрой и звуком.
  • Версию 5.2 добавили в Windows 2003, и она впервые включала в себя шифрование TLS. Более того, она обзавелась спасительной функцией Console Connection, которая не раз спасала пятую точку автора от поездок в ЦОД в 2 ночи.
  • Версия 6 была ключевой для всех тех пользователей-мажоров, которые использовали мульти-мониторные системы. Она вышла с Windows Vista.
  • Версия 6.1, добавленная в Windows Server 2008, позволяла перенаправлять принтеры с клиентского компьютера. Более того, она позволяла пропускать через RDP только определённые приложения (а не целый рабочий стол).
  • Версия 7, выпущенная с Windows 7, позволила ускорить перенаправление всех тех цацок, которые принесла с собой Windows Vista. Красивые анимации, Windows Aero, двунаправленный звук и тому подобные вещи стали доступны именно с этой версией.
  • Версия 7.1 позволяла работать с графическим адаптером на сервере через RemoteFX.
  • Версия 8 позволила наконец-то отключить перенаправление Aero Glass, которое было так нужно в версии 7. Ещё эта версия впервые позволила протягивать RDP-соединение через RDP-соединение. Помните те замечательные времена, когда нам приходилось играть в «Начало» (Inception) Кристофера Нолана? Весь фильм о том, что если ты подключаешься к RDP через RDP, то всё начинает работать очень медленно. Ну что же, всё починили. Плюс добавили кучу всяких ненужностей, которые уберут в следующем выпуске.
  • Версия 8.1 была такой же ненужной, как и сама Windows 8.1, помимо того что клиент перестал запускаться на всеми тогда любимой Windows 7. Новая версия содержала в себе отличную функцию Restricted Admin, которая позволяла подключиться к админской консоли, зная только хэш пароля, а не сам пароль. Сама Microsoft исправила эту дыру в безопасности, опубликовав 80-страничный документ, в котором вам подробно объясняют, что эта дыра — и не дыра вовсе.
  • Версия 10 привнесла поддержку High-DPI экранов и добавила всё то, о чём вы никогда не будете заморачиваться.

Ну что же. Вот вам и краткая история RDP. И хотя он и менялся, с виду ничего особого не происходило.

Но как вы видите на самом деле, что-то происходило, и в протоколе появлялись новые возможности, которые вы возможно никогда не использовали.

Пустите, у меня корочка!

Для начала посмотрим на возможность подключения к консоли сервера. Я много лет обучал Windows-администраторов и к своему ужасу часто обнаруживал, что люди не знают про этот полезный флаг самой mstsc.

Итак, при запуске mstsc из консоли или из меню Run… вы можете ввести mstsc /console или mstsc /admin для того, чтобы удалённо подключиться к консоли сервера. Это даёт вам доступ к сессии с идентификатором 0. То есть вы можете «напрямую работать» с монитором и клавиатурой самого сервера.

Зачем вам это нужно? Большинство администраторов не знают этой функции, потому что они не занимались администрированием серверов удалённых рабочих столов. И самый неприятный момент наступает, когда вдруг сервер лицензирования решает покинуть этот мир, а вы не можете удалённо подключиться к серверу RDP, чтобы его перенастроить.

Что же, запоминаем, что всегда можно ввести mstsc /? и посмотреть на параметры командной строки для клиента.

In shadow I stand

Одно из самых полезных нововведений, как мне показалось, в RDP. Возможность удалённой «прослушки» соединений пользователя. При настройке этой опции я рекомендую пользоваться здравым смыслом и Уголовным кодексом страны, в которой вы находитесь. Как минимум проконсультируйтесь с местными юристами и убедитесь, что у особо рьяного любителя клубнички в интернетах не будет возможности написать на вас донос властям за то, что вы его спалили на сайте My Little Pony.

(Отступление на тему того, как уладить подобные ситуации и не попасть впросак.)

Как видно, даже сами ребята из Microsoft очень долго не знали, что делать с этой функцией. Сначала они её добавили в версии 7, убрали в 7.1, а потом снова добавили в версии 8.

Для того чтобы включить эту функцию, надо будет покопаться в GPO. На сервере RDP настройте: Computer Configuration -> Administrative Templates -> Windows components -> Remote Desktop Services -> Remote Session Host -> Connections.

Настройте Set rules for remote control of Remote Desktop Services user sessions по вашему вкусу. Я обычно выбирал Full Control with user’s permission, то есть пользователь будет уведомлён о моём присутствии. Хотя, если ваши корпоративные правила позволяют, можно и не уведомлять :)

После применения этой GPO вы сможете зайти на сервер удалённых рабочих столов и запустить команду qwinsta, которая скинет вам список всех активных соединений на данном сервере. После этого вы можете воспользоваться командой:

mstsc /shadow:{id} /control /noConsentPrompt

/shadow:{id} позволяет вам подключиться и просматривать сессию с ID из qwinsta.

/control позволит вам управлять этой сессией.

/noConsentPrompt позволит вам ввалиться в сессию без того, чтобы пользователь узнал, что кто-то ввалился. (Работа этого флага зависит от того, как вы настроили GPO.)

Это очень удобный инструмент для обучения пользователей, которые не знают, что делать в жизни. А ещё очень полезно для удалённой поддержки.

Угрозы безопасности

Не будем забывать про маленькую и очень занудную программку, которая называлась rdp2tcp. Она позволяет пользователям протягивать TCP-мосты через RDP. Для работы на клиентской стороне требуется линукс, так что это не та приблуда, которую будут использовать бухгалтерши. Это для более занудных людей, у которых чешутся руки, только дай что-нибудь сломать.

Вообще, сам по себе протокол является достаточно уязвимым. Вот, например, в своё время многие администраторы воспользовались подобными уловками, чтобы «по-быстрому» починить отсутствующие сертификаты:

(скриншот настроек клиента, отключающих проверку сертификата)

Более того, некоторые администраторы, в попытке ускорить время подключения клиентов, начали изменять настройки NTLM:

(скриншот настроек NTLM)

В итоге вы в буквальном смысле получаете систему, в которой логин и пароль не передаются в открытую, разве что только бабушке на базаре!

Теперь можно смело утверждать, что сам по себе RDP не являлся и никогда не будет являться защищённым протоколом. Посему не носитесь с RDP по открытому интернету без VPN — это может угрожать всему живому.

Будущее администрирования

Со всем вышесказанным выглядит так, что RDP не является первым протоколом, к которому все просто бросаются, для того, чтобы администрировать свои сервера. В лучшем случае — предоставлять доступ пользователям к серверу терминалов.

А что же делать нам, системным администраторам?

Ну, во-первых, я очень рекомендую понаслаждаться тем, что Windows в наши дни очень хорошо поддерживает SSH. Если хочется попробовать — можете создать Windows VPS на RUVDS ;)

(Как подключиться к виртуальному серверу Windows по RDP в сервисе RUVDS.)

Windows 2019 / Windows 10 отлично из коробки дружат с OpenSSH.

Если вам ещё не довелось этого испытать, то очень рекомендую его установить. Сразу после, вы сможете настроить Powershell-over-SSH.

(Подробная инструкция, как настроить OpenSSH на Windows Server 2019 или 2022.)

В таком состоянии вы можете управлять своим сервером через свой удобный ноутбук с убунтой. Правда, для этого нужно будет установить Powershell на линукс. И хотя, да, это будет выглядеть, как если бы вы взяли всех героев из «Звёздных войн» и отправили их во вселенную «Стар Трека», но, несмотря на это, вы сможете запускать административные скрипты на вашей Windows-машине в RUVDS через Linux. Чем я на самом деле и рекомендую вам заняться.

(Как подключиться к виртуальному серверу RUVDS на Windows по RDP из Linux?)

К счастью или к сожалению, Windows вымирает как ОС (субъективное мнение, да). Даже на домашних ноутбуках я всё чаще вижу разные версии линукса. Администрированием Windows занимаются только те компании, которые застряли в Excel и необходимости работать на RDP. Да и в Microsoft это понимают и пытаются поддержать Windows для разработчиков, путём ввинчивания туда WSL.

Но, как бы то ни было, пока что вы можете комфортно работать с Windows через RDP или SSH. Вопрос только в том, сколько вам понадобится времени на настройку клиентов.

Полезные ссылки

  • Статья про SSH
  • Наш обзор актуальных RDP-клиентов

Читать дальше

Похожие посты