Страх и ненависть в протоколе RDP
Все те из нас, кто всё ещё администрирует 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 Areo, двунаправленный звук и тому подобные вещи стали доступны именно с этой версией.
- Версия 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.
Отступление на тему того, как уладить подобные ситуации и не попасть впросак:Как администратор, всегда помните, иногда пользователи используют компьютер не по назначению. Иногда — это практически всегда. Если вы будете открыто говорить о правилах использования компьютеров в сети со своими пользователями, это не обязательно будет большой проблемой. Например, кто-то начинает тянуть гигабайты фильмов через торренты на работе? Не надо просто закрывать порты фаерволлом. Надо договориться с начальством, собрать всех на большую презентацию, и публично объяснить, что скачивать фильмы на рабочем месте — это большое ФИ с оттопыренным мизинцем, и делать так не надо. После этого скажите, что пока что всех прощаете, и все должны почистить все свои диски. А если кто-то будет продолжать лить, ему будет вручена премия в виде штрафа в 1МРОТ или что там у нас в ходу. Будьте открыты со своими пользователями по поводу нарушений, но не срамите их прилюдно. Если кто-то продолжает выкачивать все фильмы с участием Мии Калифы на работе, то разговор с ним должен быть один на один. Помните одну важную вещь — если позволить этому продолжаться без остановки и закрывать на это глаза — в один прекрасный момент вы подставите себя. Проход от My Little Pony → Весь архив PorhHub → что-то настолько отвратительное, что можно схлопотать 15 лет за решёткой и это не займет много времени. А отдуваться нужно будет вам. Когда вы закрываете вопрос таких пользователей на первой стадии, то ничего плохого не произойдёт. Когда вы пытаетесь сделать это на последней стадии, то вы работаете с человеком, которого загнали в угол, и которому грозит арест. Он может неправильно отреагировать. Так что ещё раз напоминаю, убедитесь, что использование этой функции может поставить вас в интересное положение.
Как видно, даже сами ребята из 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 вы сможете зайти на сервер удалённых рабочих столов и запустить команду qwnsta, которая скинет вам список всех активных соединений на данном сервере. После этого вы можете воспользоваться командой:
mstsc /shadow:{id} /control /noConsentPrompt
/shadow:{id}
позволяет вам подключиться и просматривать сессию с ID из qwinsta.
/control
позволит вам управлять этой сессией.
/noConsentPrompt
позволит вам ввалиться в сессию без того, чтобы пользователь узнал, что кто-то ввалился. (Работа этого флага зависит от того, как вы настроили GPO.
Это очень удобный инструмент для обучения пользователей, которые не знают, что делать в жизни. А ещё очень полезно для удалённой поддержки.
▍ Угрозы безопасности
Не будем забывать про маленькую, и очень занудную программку, которая называлась rdp2tcp. Она позволяет пользователям протягивать TCP-мосты через RDP. Для работы на клиентской стороне требуется линукс, так что это не та приблуда, которую будут использовать бухгалтерши. Это для более занудных людей, у которых чешутся руки, только дай что-нить сломать.
Вообще, сам по себе протокол является достаточно уязвимым. Вот, например, в своё время многие администраторы воспользовались подобными уловками, чтобы «по-быстрому» починить отсутствующие сертификаты:
Более того, некоторые администраторы, в попытке ускорить время подключение клиентов, начали изменять настройки NTML
В итоге вы в буквальном смысле получаете систему, в которой логин и пароль не передаются в открытую, разве что только бабушке на базаре!
Теперь можно смело утверждать, что сам по себе RDP не являлся и никогда не будет являться защищённым протоколом. Посему не носитесь с RDP по открытому интернету без VPN — это может угрожать всему живому.
▍ Будущее администрирования
Со всем вышесказанным выглядит так, что RDP не является первым протоколом, к которому все просто бросаются, для того, чтобы администрировать свои сервера. В лучшем случае — предоставлять доступ пользователям к серверу терминалов.
А что же делать нам, системным администраторам?
Ну, во-первых, я очень рекомендую понаслаждаться тем, что Windows в наши дни очень хорошо поддерживает SSH. Если хочется попробовать — можете создать Windows VPS на RUVDS;)
Как подключиться к виртуальному серверу Windows по RDP в сервисе RUVDS:Чтобы начать работу на вашем сервере, начните со следующих команд:Пуск -> Программы -> Стандартные -> Подключение к удалённому рабочему столу
.ИЛИ используйте Win+R (либо щелкните правой кнопкой мыши по кнопке Пуск, выберите Выполнить) наберите mstsc, нажмите ОК:
В появившемся окне впишите IP-адрес своего сервера, в строке — компьютер, он указан в вашем ЛК, в разделе «Мои серверы»:
Далее нажимаем «Подключить» и попадаем на окно с вводом учетных данных:
Во всех создаваемых виртуальных серверах на RUVDS генерируется уникальный пароль. Вводите логин (по умолчанию это Administrator) и пароль, из вашего личного кабинета, который будет виден, если нажать показать пароль, он также дублируется письмом на вашу электронную почту.
Чтобы вы смогли перенести файлы с вашего компьютера на свой виртуальный сервер, нужно подключить передачу данных:
Вот в общем-то и всё.
Windows 2019/Windows 10 отлично из коробки дружат с OpenSSH.
Если вам ещё не довелось этого испытать, то очень рекомендую его установить. Сразу после, вы сможете настроить Powershell-over-SSH.
Подробная инструкция, как настроить OpenSSH на Windows Server 2019 или 2022Для того, чтобы установить OpenSSH на Windows Server 2019 или 2022 Найдите и откройте Windows Settings. В новом окне перейдите в раздел «Apps» и выберите » Select Optional Features» в разделе «Apps & Features».Нажмите «Manage optional features», и выберите OpenSSH Server из полученного списка, затем нажмите «Install».
После установки, запустите PowerShell от Администратора. Вставьте следующую команду для установки OpenSSH Server.
Add-WindowsCapability -Online -Name OpenSSH.Server
Установите OpenSSH Client:Add-WindowsCapability -Online -Name OpenSSH.Client
Для настроки сервера можно использовать следующую комманду, которая откроет блокнот и можно будет добавить свои измененияstart-process notepad C:\Programdata\ssh\sshd_config
После всех настроек нужно запустить сервис командой:Start-Service sshd
Далее необходимо будет настроить FirewallДля этого в меню «Пуск» находим «Server Manager». Там выбираем «Tools» и клацаем на «Windows Defender Firewall with Advanced Security» в выпавшем списке.
Теперь кликаем на «Inbound Rules» в открывшемся окне и создаём новое правило «New Rule». В окне «New Inbound Rule Wizard» выбираем «Protocol and Ports», клацаем «TCP» и указываем порт 22 в «Specific local ports:». После жмём Next, Next даём название правилу и нажимаем Finish.
Теперь всё готово к подключению по ssh.
Подключиться можно с любой машины, как с linux, так и с Windows. Достаточно ввести:
ssh -l Administrator SERVER-IP
Согласиться с парой ключей:ECDSA key fingerprint is SHA256:Vv2A8NOfzCLR/e35Fm5UyqGeJptrn6ZlY6Vabx0wHXQ. Are you sure you want to continue connecting (yes/no/[fingerprint])?
И вы можете работать на удалённом сервере по ssh, пример подключения с linux-машины.
В таком состоянии вы можете управлять своим сервером через свой удобный ноутбук с убунтой. Правда, для этого нужно будет установить Powershell на линукс. И хотя, да, это будет выглядеть, как если бы вы взяли всех героев из Звёздных Войн и отправили их во вселенную Стар Трека, но, несмотря на это, вы сможете запускать административные скрипты на вашей Windows машине в RUVDS через Linux. Чем я на самом деле и рекомендую вам заняться.
Как подключиться к виртуальному серверу RUVDS на Windows по RDP из Linux?Для начала установим клиент удалённого доступа — Remmina:sudo apt-get update sudo apt-get install remmina remmina-plugin-rdp
Либо можно установить всё это через менеджер пакетов:После установки запускаем Remmina и настраиваем подключение к удалённому серверу:
В поле «Сервер» вписываете IP-адрес вашего сервера, имя пользователя сервера и пароль, который вам выдали при создании (его также можно посмотреть в ЛКв разделе «Мои серверы».
Параметр «Глубина цвета» нужно задавать таким, чтобы соединение не тормозило. Зачастую возникает ошибка, если поставить его слишком большим.
Вы можете копировать фалы из этой сетевой папки в папки на сервере и обратно. Для того, чтобы файлы возможно было копировать на сервер, можно задать общую папку, в данном примере имя папки «rdpfiles».
Не забываем сохранить подключение, с соответствующим именем.
После первого подключения, вам предложат принять сертификат. Соглашаемся с этим:
После подключения и всех настроек, можно будет управлять удалённым VPS-сервером. Подключённая папка будет доступна через проводник:
Либо, в случае, если у сервера нет графического интерфейса, то через PowerShell по адресу:
\\TSCLIENT\rdpfiles
Обратите внимание, что имя папки дано для примера. В вашем случае это имя может быть отличное от «rdpfiles», но в любом случае это будет подпапка папки \\TSCLIENT.Из обнаруженных проблем, клиента Remmina — иногда некорректно монтируется удалённая папка и сервер её не видит. Для этого необходимо полностью отключить клиент Remmina (в том числе выйти из фоновой версии программы) и перезапустить её. Тогда подключение работает корректно.
К счастью или к сожалению, Windows вымирает как ОС (субъективное мнение, да). Даже на домашних ноутбуках я всё чаще вижу разные версии линукса. Администрированием Windows занимаются только те компании, которые застряли в Excel и необходимости работать на RDP. Да и в Microsoft это понимают и пытаются поддержать Windows для разработчиков, путём ввинчивания туда WSL.
Но, как бы то ни было, пока что вы можете комфортно работать с Windows через RDP или SSH. Вопрос только в том, сколько вам понадобится времени на настройку клиентов.
▍ Полезные ссылки
Мощные VPS на SSD со скидками до 53%. Панель ISPmanager в подарок*.