Включаем NLA – Network Level Authentication
Функция NLA появляется в NT 6.0, а позже добавляется возможность её частичного использования в предыдущей версии ОС путём установки SP3 для XP.
Суть данной функции достаточно проста. В версиях RDP до 6.0 при подключении по RDP клиенту до аутентификации надо показать окно входа – т.е. вначале показать, а потом уже он попробует зайти в систему. Это создаёт простую уязвимость – сервер можно перегрузить пачкой запросов “а дай-ка мне попробовать новую сессию начать”, и он будет вынужден на все запросы отвечать созданием сессии и ожиданием входа пользователя. Фактически, это возможность DoS. Как с этим можно бороться? Логично, что надо придумать схему, целью которой будет как можно раньше запросить у клиента учётные данные. Оптимально – чтобы было что-то типа как kerberos в домене. Это и было сделано. NLA решает две задачи:
- Клиент аутентифицируется до инициации терминальной сессии.
- Появляется возможность передать данные локального клиентского SSP на сервер, т.е. начинает работать Single Sign-On.
Реализуется это через новый провайдер безопасности – CredSSP. Почитать его техническую спецификацию можно тут, ну, а говоря проще, надо всегда включать данную функцию. Конечно, учитывая, что для её работы нужно, чтобы:
- Клиентская ОС (та, с которой идёт подключение) была Windows XP SP3 и выше.
- Серверная ОС (та, к которой будет подключение) была Windows Server 2008 и выше.
КАК ВКЛЮЧАЕТСЯ NLA СО СТОРОНЫ RDP-СЕРВЕРА
Лучше всего включить NLA на всех серверах через групповую политику. Для этого надо зайти в целевой объект групповой политики и там последовательно выбрать “Computer Configuration” -> “Administrative Templates” -> “Windows Components” -> “Remote Desktop Session Host” -> “Security” и там включить параметр Require user authentication for remote connections by using Network Layer Authentication.
Можно включить и локально. Это делается путём вызова подменю Properties (стандартное подменю у Computer) и выбора там вкладки Remote, в которой будет выбор из трёх вариантов – запрещать подключения по RDP к данному хосту, разрешать подключения по любому RDP, разрешать только с NLA. Всегда включайте вариант с NLA, это в первую очередь защищает сервер.
NLA И WINDOWS XP
В случае, если у Вас Windows XP, то Вы также можете воспользоваться данной функцией. Распространённое утверждение “Для NLA нужна как минимум виста, это Microsoft сделал чтобы апгрейдились” ложно. В Service Pack 3 добавляется реализация CredSSP, позволяющая делегировать клиентские credentials’ы, которыми обладает местный SSP, на сервер. Т.е., говоря проще, это специально сделано, чтобы с Windows XP можно было подключаться на системы с NT 6.0+. На саму Windows XP SP3 с данной функцией подключаться не получится, поддержка NLA будет частичной (поэтому RDP сервер с поддержкой подключения клиентов с использованием NLA из Windows XP сделать штатными способами не получится, Windows XP будет только NLA-совместимым клиентом).
Включать данный функционал нужно в явном виде, так как несмотря на то, что Service Pack 3 добавляет приносит новую dll криптопровайдера, он её не включает.
КАК ВКЛЮЧИТЬ CREDSSP В XP
Ещё раз – данная операция проводится строго после установки Service Pack 3 на Windows XP и в контексте нашего разговора нужна для того, чтобы было возможно подключение к другим серверам по RDP 6.1 с использованием NLA.
Шаг первый – расширяем перечень Security Packages.
Для этого мы откроем ключ реестра
и найдём в нём значение . Нажмём правую кнопку и выберем “Modify” (не Modify Binary Data, а просто Modify). Там будет список вида “название package на каждой строке”. Нам надо добавить туда . Остальное надо оставить. Место добавления некритично.
Второй шаг – подцепляем библиотеку.
Ключ будет другим:
В нём надо будет найти значение (заметьте, как и в предыдущем случае, это не subkey, а значение), и модифицировать его по аналогии, только добавив . Остальное в списке, опять же, трогать не надо.
Теперь редактор реестра можно закрыть. После этих операций систему надо будет обязательно перезагрузить, т.к. криптопровайдеры – штука такая, которая на ходу точно не подцепится, и это скорее хорошо, чем плохо.
Enable Network Level Authentication
The steps to enable network-level authentication in windows 2008 R2 are:
- Open Administrator Windows power shell
- Type credit for switching to Local group policy editor.
- Once you are in LGPE, go to computer configuration, then navigate in this way:
- Administrative Templates
- Windows Components
- Remote desktop services
- Remote Desktop Session Host
- Security
- Search for “require user authentication for remote connections by using Network Level Authentication,” and double click on it.
- Choose Enable option and save the changes.
To configure the Network-level authentication in windows 10 while hosting a session, follow these steps:
- Run Remote desktop Host Server
- Go to its configuration by clicking on start, move to Administrative tools then remote desktop services. Here you will find an option of Remote Desktop Session Host Configuration, point to it.
- Navigate to the properties by right-clicking on the name of the connection
- Check the “Allow connections only from a computer running remotely with network-level authentication,” in the general tab.
- Once you complete these steps, follow the steps of group policy setting mentioned in the above section.
- Then press OK.
How to Enable Remote Desktop Windows 10?
First, provide access to the specific accounts and then follow these steps to allow the use of a Remote desktop connection.
- Start Control panel
- Point to System and security
- Click on Allow remote access under the system heading.
- Move to select the user and add using myLSU ID.
- Press Ok and finish.
- Once you finish this, you can perform the steps for enabling network-level authentication and your remote desktop sharing is ready.
Отключаем NLA на сервере RDS 2012
Чтобы на сервере RDS Windows Server 2012 отключить требование обязательного использования NLA клиентами, нужно в консоли Server Manager перейти в раздел Remote Desktop Services -> Collections -> QuickSessionCollection, выбрать Tasks -> Edit Properties, выбрать раздел Security и снять опцию: Allow connections only from computers running Remote Desktop with Network Level Authentication.
Естественно, нужно понимать, что отключение NLA на уровне сервера уменьшает защищенность системы и в общем случае использовать не рекомендуется. Предпочтительнее использовать вторую методику.
Самый правильный метод, это установка обновлений
Когда вам удалось везде подключиться и подошло время обслуживания ваших серверов, быстренько производим установку обновлений закрывающих брешь (CVE-2018-0886 | CredSSP Remote Code Execution Vulnerability).
- Windows Server 2012 R2 / Windows 8: KB4103715
- Windows Server 2008 R2 / Windows 7: KB4103712
- Windows Server 2016 / Windows 10 1607 — KB4103723
- Windows Server 2016 / Windows 10 1703 — KB4103731
- Windows Server 2016 / Windows 10 1709 — KB4103727
- Windows Server 2016 / Windows 10 1803 — KB4103721
13 марта Microsoft опубликовал описание уязвимости CVE-2018-0886 в протоколе проверки подлинности CredSSP, который в частности используется при подключении по RDP к терминальным серверам. Позже Microsoft опубликовал, что будет блокировать подключения к необновлённым серверам, где присутствует данная уязвимость. В связи с чем многие заказчики столкнулись с проблемами подключения по RDP.
В частности, в Windows 7 можно увидеть ошибку: «Произошла ошибка проверки подлинности. Указанная функция не поддерживается«
В Windows 10 ошибка расписана более подробно, в частности сказано «Причиной ошибки может быть исправление шифрования CredSSP»:
Для обхода ошибки со стороны клиента многие советуют отключить групповую политику, путём установки значения Encryption Oracle Remediation в Vulnerable: с помощью gpedit. msc в Конфигурация компьютера / Административные шаблоны / Система / Передача учётных данных, слева выбрать «Исправление уязвимости шифрующего оракула» (забавный конечно перевод), в настройках поставить «Включено» и выбрать «Оставить уязвимость».
или через реестр (т. к., например, в Windows Home нет команды gpedit. msc):
REG ADD HKLMSoftwareMicrosoftWindowsCurrentVersionPoliciesSystemCredSSPParameters /v AllowEncryptionOracle /t REG_DWORD /d 2
НО! Так делать не нужно! Т. к. таким образом вы оставляете уязвимость и риски перехвата вашего трафика и пр. конфиденциальные данные, включая пароли. Единственный случай, когда это может быть необходимо, это когда у вас вообще нет другой возможности подключиться к удалённому серверу, кроме как по RDP, чтобы установить обновления (хотя у любого облачного провайдера должна быть возможность подключения к консоли сервера). Сразу после установки обновлений, политики нужно вернуть в исходное состояние.
Если доступ к удалённому серверу есть, то ещё, как временная мера, можно отключить требование NLA (Network Level Authentication), и сервер перестанет использовать CredSSP. Для этого достаточно в Свойствах системы, на вкладке удалённые подключения снять соответствующую галку «Разрешить подключения только с компьютеров, на которых работает удалённый рабочий стол с проверкой подлинности на уровне сети«:
Но, это тоже неправильный подход.
Правильный подход — это всего-лишь установить нужные обновления на операционную систему, закрывающие уязвимость CVE-2018-0886 в CredSSP, причём, как серверную, куда вы подключаетесь, так и клиентскую, с которой вы подключаетесь.
Столкнулся на выходных с проблемой когда попробовал подключиться к рабочему серверу на Windows 8 с компьютера на Windows XP. По правилам безопасности нашей корпоративной сети, чтобы подключиться к удаленному компьютеру, сначала нужно поднять VPN соединение с сервером. Соединение по VPN прошло успешно, однако при попытке подключиться к серверу через удаленный рабочий стол, вылетела ошибка:
Чтобы это могло значить? Оказывается, в Windows server 8 и более позних версиях, введена дополнительная функция безопасности – Server Authentication. Для того, чтобы успешно пройти эту защиту, нужно выполнить следующее:
- Проверить что ваш Windows XP обновлен до service pack 3
- Обновить RDP клиент до последней версии Не обязательно
- Внести правки в реестр
На третьем пункте остановимся и рассмотрим его подробнее. Откроем редактор реестра
Win+R – regedit
откроем ветку HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlLsa , откроем параметр Security Packages и добавим в него tspkg (если уже есть, не добавляем).
После перейдем в ветку HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSecurityProviders, откроем параметр SecurityProviders и добавим библиотеку: credssp. dll
После этого закрываем редактор реестра и обязательно перезагружаем компьютер. После перезагрузки, подключение через RDP к серверу будет работать в штатном режиме, а сообщение “удалённый компьютер требует проверки подлинности” вас больше не потревожит.
Назначение CredSSP
Что такое CredSSP — это Win32 API, используемый системами Microsoft Windows для выполнения различных операций, связанных с безопасностью, таких как аутентификация. SSPI функционирует, как общий интерфейс для нескольких поставщиков поддержки безопасности (SSP). Поставщик поддержки безопасности — это библиотека динамической компоновки (DLL), которая делает один или несколько пакетов безопасности доступными для приложений.
C redSSP позволяет приложению делегировать учетные данные пользователя от клиента целевому серверу для удаленной аутентификации. CredSSP предоставляет зашифрованный канал протокола безопасности транспортного уровня . Клиент проходит проверку подлинности по зашифрованному каналу с использованием протокола SPNEGO (Simple and Protected Negotiate) с Microsoft Kerberos или Microsoft NTLM.
После проверки подлинности клиента и сервера клиент передает учетные данные пользователя на сервер. Учетные данные дважды шифруются с использованием ключей сеанса SPNEGO и TLS. CredSSP поддерживает вход в систему на основе пароля, а также вход в систему с использованием смарт-карт на основе X.509 и PKINIT.
Windows SSP
Следующие поставщики общих служб устанавливаются вместе с Windows:
- NTLM (Представлено в Windows NT 3.51 ) (msv1_0.dll) — обеспечивает проверку подлинности NTLM с запросом/ответом для клиент-серверных доменов до Windows 2000 и для не доменной аутентификации (SMB /CIFS).
- Kerberos (Представлен в Windows 2000 и обновлен в Windows Vista для поддержки AES ) (kerberos.dll). Предпочтителен для взаимной аутентификации клиент-серверного домена в Windows 2000 и более поздних версиях.
- Согласование (введено в Windows 2000) (secur32.dll) — выбирает Kerberos и, если не доступно, протокол NTLM. SSP обеспечивает возможность единого входа , иногда называемую встроенной аутентификацией Windows (особенно в контексте IIS). В Windows 7 и более поздних версиях представлен NEGOExts, в котором согласовывается использование установленных пользовательских SSP, которые поддерживаются на клиенте и сервере для аутентификации.
- Безопасный канал (он же SChannel) — Представлен в Windows 2000 и обновлен в Windows Vista и выше для поддержки более надежного шифрования AES и ECC. Этот поставщик использует записи SSL/TLS для шифрования полезных данных. (Schannel.dll)
- PCT (устарел) реализация Microsoft TLS/SSL — криптография SSP с открытым ключом, которая обеспечивает шифрование и безопасную связь для аутентификации клиентов и серверов через Интернет. Обновлено в Windows 7 для поддержки TLS 1.2.
- Digest SSP (Представлено в Windows XP ) (wdigest.dll) — Обеспечивает проверку подлинности HTTP и SASL на основе запросов/ответов между системами Windows и не-Windows, где Kerberos недоступен.
- Учетные данные (CredSSP) (Представлено в Windows Vista и доступно в Windows XP с пакетом обновления 3 (SP3)) (credssp.dll) — обеспечивает SSO и проверку подлинности на уровне сети для служб удаленных рабочих столов.
- Аутентификация с распределенным паролем (DPA) — (Представлено в Windows 2000) (msapsspc.dll) — Обеспечивает аутентификацию через Интернет с использованием цифровых сертификатов.
- Криптография с открытым ключом «пользователь-пользователь» (PKU2U) (представлена в Windows 7 ) (pku2u.dll) — обеспечивает одноранговую аутентификацию с использованием цифровых сертификатов между системами, которые не являются частью домена.
Solution #2: Disable NLA using Group Policy Editor
You can disable the Network Level Authentication with the help of Group Policy Editor. This is much more user-friendly, and you do not need any expert knowledge to get it done. The only drawback is you cannot get Local Group Policy Editor on Windows 10/11 Home version. Even if you sideload Group Policy Editor, you might not get the similar option in that third-party app. Therefore, this method is applicable to Windows 10/11 Pro and Enterprise users only.
- Open Local Group Policy Editor. You can search for it in the Taskbar search box. Or you can enter gpedit.msc in the Run prompt.
- After opening it, navigate to this path-
Computer Configuration > Administrative Templates > Windows Components > Remote Desktop Services > Remote Desktop Session Host > Security
- On your right-hand side, you should find a setting named Require user authentication for remote connections by using Network Level Authentication. Double-click on this setting to open the Properties.
- Make sure the Disabled is selected. If not, do choose that option and click the OK button to save your change.
Solution #3: Disable Network Level Authentication using Registry Editor
Network Level Authentication can be blocked via Registry Editor as well. However, you need to do that on the remote computer. This is quite easy when your host computer is connected to the remote computer via Local Area Network. In any case, if your Windows registry editor is disabled accidentally or by the syatem administartor, first enable the Windows registry editor. The advantage of this method is you can get Registry Editor on any version of Windows 11/10/8/7.
- Open Registry Editor. You can either search for it in the Taskbar search box, or you can enter regedit in the Run prompt.
- Go to File > Connect Network Registry.
- Enter the name of the remote computer and click the Check Names You should find the remote computer’s Registry Editor on your host computer.
- After opening Registry Editor of the remote computer, navigate to this path-
HKEY_LOCAL_MACHINE >SYSTEM > CurrentControlSet > Control >Terminal Server > WinStations > RDP-Tcp
- Here you can find two keys i.e. SecurityLayer and UserAuthentication. Open one after one and set the value to zero(0).
- After that, open PowerShell and enter this command-
restart-computer
After that, if you can connect to the remote computer via Remote Desktop.
Ping
При выяснении причин сбоя один из основных инструментов — консольная программа . Она позволяет получить информацию о работоспособности непосредственно самой сети, убедиться, что нет обрывов кабеля и работает стек TCP/IP. В командной строке введите команду , после выполнения которой вы узнаете, за какое время запущенные вами пакеты достигли машины с указанным IP-адресом и вернулись обратно. Если время отклика велико, то, скорее всего, имеются аппаратные проблемы — некачественный или слишком длинный кабель, наводки, перегибы и т. п. Проделайте ту же операцию со всеми IP вашей сети, чтобы выявить все проблемные участки. «Пинговать» компьютеры можно не только по их IP, но и по имени в рабочей группе или домене. Если же не работает «пингование» собственного ПК: , то проблема в локальной ОС и стеке протокола TCP/IP.
Оптимизация скорости RDP
Оптимизация скорости RDP – достаточно обширная тема, поэтому я разделю её на части. В этой будут те способы, которые будут уменьшать нагрузку на протокол до сжатия и до оптимизации сетевого уровня.
ЦВЕТНОСТЬ (БИТОВАЯ ГЛУБИНА)
В RDP 7.0 и выше доступны варианты 32,16 и 8 бит. Если речь идёт о работе, то для неё будет достаточно 16 бит. Это ощутимо снизит нагрузку на канал, притом иногда больше, чем в 2 раза, что удивительно, но факт. 8 бит, конечно, тоже можно, но уж больно страшно оно будет выглядеть. 16 бит же вполне приемлемы.
Включите на сервере параметр Limit Maximum Color Depth, либо сделайте аналогичное действие в настройках RDP client.
ОТКЛЮЧИТЕ CLEARTYPE
Когда у Вас выключен ClearType, протокол RDP передаёт не картинку, а команды по отрисовке символов. Когда включен – рендерит картинку со стороны сервера, сжимает и пересылает клиенту. Это с гарантией в разы менее эффективно, поэтому отключение ClearType значительно ускорит процесс работы и уменьшит время отклика. Сами удивитесь, насколько.
Это можно сделать как на уровне настроек клиента, так и на стороне сервера (параметр в разделе Remote Session Enviroment в Computer Configuration -> Policies -> Administrative Templates -> Windows Components -> Remote Desktop Services -> Remote Desktop Session Host).
УБЕРИТЕ WALLPAPER
Параметр в разделе Remote Session Enviroment в Computer Configuration -> Policies -> Administrative Templates -> Windows Components -> Remote Desktop Services -> Remote Desktop Session Host резко улучшит ситуацию с перерисовкой экрана терминальной сессии. Пользователи без котиков на десктопе выживают нормально, проверено.
ВКЛЮЧАЕМ И НАСТРАИВАЕМ КЭШИРОВАНИЕ ИЗОБРАЖЕНИЙ
Если на клиенте есть достаточно оперативной памяти, то имеет смысл включить и настроить кэширование битмапов. Это позволит выиграть до 20-50% полосы пропускания. Для установки надо будет зайти в ключ
и создать там параметры и , оба типа DWORD 32.
Параметр обозначает размер в килобайтах дискового кэша. Значение по умолчанию – 10. Имеет смысл увеличить этот параметр хотя бы до 1000.
Параметр обозначает размер в килобайтах кэша в RAM. Значение по умолчанию – 1500. Имеет смысл увеличить этот параметр хотя бы до 5000. Это будет всего 5 мегабайт на клиентскую сессию, при современных масштабах оперативной памяти это несущественно, и даже если приведёт к выигрышу 10% производительности, уже себя окупит. Кстати, этот же параметр можно поправить и в .rdp-файле; если сохранить своё RDP-подключение, а после открыть файл блокнотом, то среди параметров можно добавить что-то вида, где 5000 – это 5МБ кэша.
ОТКЛЮЧАЕМ DESKTOP COMPOSITION
Desktop Composition привносит всякие “красивости” типа Aero и его друзей и ощутимо кушает полосу пропускания. Для работы это не нужно и вредно. Параметр в разделе Remote Session Enviroment в Computer Configuration -> Policies -> Administrative Templates -> Windows Components -> Remote Desktop Services -> Remote Desktop Session Host необходимо выставить в параметр Disabled.
ОПТИМИЗИРУЕМ ПАРАМЕТРЫ DESKTOP WINDOW MANAGER
Параметры, находящиеся в разделе в , будут управлять “красивым” отображением плавно выезжающих меню и подобного. Их три – , и . Все их надо переключить в режим Enabled, т.е. по сути – отключить все эти функции.
ОТКЛЮЧАЕМ РЕДИРЕКТ НЕИСПОЛЬЗУЕМЫХ УСТРОЙСТВ
Если у Вас не планируется подключение определённых классов устройств (например, COM и LPT-портов), или аудио, имеет смысл отключить возможность их перенаправления со стороны сервера. Чтобы клиенты с дефолтными настройками RDP Client не тратили время подключения на согласование неиспользуемого функционала. Это делается там же, где и остальные настройки сервера, в Properties у RDP-Tcp, вкладка Client Settings (там же, где мы делали настройки с глубиной цвета), раздел Redirection.
НАСТРАИВАЕМ ОБЩУЮ ЛОГИКУ ОПТИМИЗАЦИИ ВИЗУАЛЬНЫХ ДАННЫХ RDP
Параметр, называющийся , находящийся в разделе в , будет управлять тем, как RDP будет воспринимает визуальные данные – как мультимедийные или как текстовые. Это, грубо говоря, “подсказка” алгоритму сжатия, как грамотнее себя вести. Соответственно, для работы надо будет выставить этот параметр в , а если хочется много красивых flash-баннеров, HTML5 и просматривать видеоклипы – лучше вариант .
Выбираем правильный сертификат для RDP
Если у Вас есть возможность пользоваться не-дефолтным сертификатом для RDP, то лучше пользоваться именно им. Это не повлияет на безопасность сессии как таковой, но повлияет на безопасность и удобство подключения. В сертификате, который оптимально использовать, должны быть следующие момент:
- Имя (в subject или SAN), посимвольно совпадающее с тем именем, которое вводит клиент, подключающийся к серверу.
- Нормальное расширение CDP, указывающее на рабочий CRL (желательно хотя бы на два – OCSP и статический).
- Желательный размер ключа – 2048 бит. Можно и больше, но помните об ограничениях CAPI2 в XP/2003.
- Не экспериментируйте с алгоритмами подписи/хэширования, если Вам нужны подключения со стороны XP/2003. Чуть больше информации про это в статье про настройку TLS, но вкратце – выберите SHA-1, этого вполне достаточно.
Чуть подробнее остановлюсь на выпуске специального сертификата для RDP-сервера.
ДЕЛАЕМ ВСЁ КРАСИВО – СПЕЦИАЛЬНЫЙ ШАБЛОН СЕРТИФИКАТА ДЛЯ RDP-СЕРВЕРОВ
Идеально будет, если сертификат для RDP сделать не на основе обычного шаблона (типа Web Server) и иметь в поле (которое в сертификате будет более привычно называться Enchanced Key Usage – EKU) стандартные значения и , а добавить свой шаблон, в котором будет единственное, специальное, не добавляемое стандартными способами значение применения –. Это значение Application Policy придётся создать вручную, его OID’ом будет, ну а после – уже можно сделать новый шаблон сертификата, на основании которого и выпустить сертификат, адресно “заточеный” под RDP Server.
Чтобы полностью автоматизировать эту операцию, сделайте у нового шаблона предсказуемое название – например, “RDPServerCert” – и зайдите в объект групповой политики, а там откройте Computer Configuration -> Policies -> Administrative Templates -> Windows Components -> Remote Desktop Services -> Remote Desktop Session Host -> Security. Выберите параметр и включите его, а в поле значения введите название – мы сделали RDPServerCert. Теперь все доменные хосты, подпадающие под эту политику, будут в случае включения на них RDP сами идти к Certification Authority, запрашивать в случае отсутствия себе сертификат на основе указанного шаблона, и автоматически делать его дефолтным для защиты подключений по RDP. Просто, удобно, эффективно.
Настройка Windows 10 и учётных записей
Тут всё ещё проще! Открываем свойства компьютера (win + pause) и выбираем Дополнительные параметры системы, как на скриншоте ниже.
В открывшемся окне переходим на вкладку Удаленный доступ. Отмечаем галочками Разрешить подключения удалённого помощника к этому компьютеру, Разрешить удаленные подключения к этому компьютеру. Остаётся теперь только Выбрать пользователей. Жмёте Добавить и выберете из списка необходимых вам пользователей.
Если у вас есть домен, то для удобства можно выбрать сразу всех Пользователи домена.
Настройка завершена! Для проверки запускаем файл RDPCheck.exe из папки с программой.