В этой статье описан алгоритм аутентификации к серверу удалённых рабочих столов (RDP) на сетевом уровне, который называется NLA.
Что такое NLA
Аутентификация на сетевом уровне (NLA) — это функция безопасности, используемая в протоколе RDP.
NLA использует протокол CredSSP который позволяет приложению передать учётные данные от клиента к серверу для удалённой проверки подлинности. CredSSP реализует зашифрованный канал для такой передачи учёных данных.
Алгоритм NLA позволяет выполнить аутентификацию ещё до начала подключения по протоколу RDP. Сервер удалённых рабочих столов проверяет учетные данные пользователя перед созданием сеанса и перед загрузкой полного графического интерфейса пользователя.
Таким образом, NLA значительно уменьшает ресурсы, используемые сервером при каждой попытке подключения, и тем самым снижает риски, связанные с атаками типа «отказ в обслуживании» (DoS).
Функция NLA появилась в NT 6.0, то есть в Windows Server 2008 или Windows Vista.
Как работает NLA
В процессе аутентификации клиент, пытающийся установить удаленное соединение, отправляет свои учетные данные серверу. Эти учетные данные зашифрованы и надежно упакованы с использованием протоколов аутентификации Kerberos или NTLM. Затем терминальный сервер передаёт эти учетные данные по защищенному каналу контроллеру домена на проверку. Контроллер домена проверяет их, прежде чем будет установлено полное подключение к удаленному рабочему столу.
Если учетные данные проверены, то терминальный сервер инициирует сеанс RDP. И загружает полный графический пользовательский интерфейс для пользователя. А если учетные данные неверны, сервер отказывает в подключении. Этот процесс происходит до того, как сервер выделит значительные ресурсы на подключение, таким образом защищая его.
Вот схема аутентификации NLA:
Проблема с контроллером домена на Samba
Недавно (летом 2023 года) Microsoft выпустила обновление и компьютеры Windows потеряли защищённый канал с контроллером домена на Samba. Разработчики Samba исправили работу в версии Samba 4.16. Об этом можно почитать здесь:
- https://bugs.launchpad.net/ubuntu/+source/samba/+bug/2027716
- https://bugzilla.samba.org/show_bug.cgi?id=15418
То есть, если у вас в качестве контроллера домена не обновлённая Samba. То обновлённые компьютеры Windows потеряют защищённый канал с контроллером домена.
Восстановление защищённого канала
Проверить что ваш Windows сервер поддерживает защищённый канал с контроллером домена можно с помощью команды PowerShell:
> Test-ComputerSecureChannel True
В случае повреждения защищённого канала вы увидите False.
Также, если защищённый канал повреждён, то вы будите видеть ошибки с кодом 3210 в журнале событий Windows:
Чтобы восстановить защищённый канал, на компьютерах с операционной системой Windows можно выполнить команду PowerShell:
> Reset-ComputerMachinePassword -Server DomainController -Credential DomainAdmin
Но эта команда не помогает в случае проблемы с Samba, описанной выше.