Как работают программы удаленного доступа

Как работают программы удаленного доступа

В основе работы любого приложения для доступа к удалённым рабочим столам лежит использование протокола X Window System Protocol, стека сетевых технологий и одного (или нескольких) из протоколов удалённого доступа.

X Window System Protocol — это стандарт для операционных систем с оконным интерфейсом (Windows, Linux, macOS, FreeBSD). Данный протокол позволяет передавать команды серверу отрисовки пользовательских интерфейсов (X-серверу) и запрашивать у него состояния интерфейсов: расширение экрана, координаты курсора, положение и размеры активных окон, активность кнопок контроллеров и средств ввода/вывода.

За время существования протокола в его реализации накопилось множество нагромождений, усложняющих работу с протоколом и нагружающих ядро системы (хоть и незначительно, относительно мощностей сегодняшних устройств).

Однако, несмотря на многочисленные попытки разработать альтернативное решение, на сегодняшний день существует только одна система (Wayland), конкурирующая с X-сервером. Она активно внедряется в ОС на базе ядра Linux, но пока ни один из протоколов удалённого доступа не работает с ней «из коробки». Этот заставляет нас на время забыть о существовании альтернативы в контексте описания общего принципа работы приложений удалённого доступа.

Протоколы удалённого доступа служат для передачи команд с локальной машины на удалённый клиент и получения ответов от удалённой машины на локальный клиент.

Изначально существовали два основных протокола удалённого доступа: RDP (Remote Desktop Protocol) и RFB (Remote Frame Buffer).

RDP разрабатывался для организации доступа от одного физического устройства к другому. RDP-клиент записывает происходящее на удалённом рабочем столе в потоковое видео, кодирует его (обычно при помощи кодека H.264) и с минимальной задержкой передаёт на локальный клиент. Параллельно с видео-потоком удалённый клиент передаёт информацию от X-сервера, а локальный клиент синхронизирует полученное изображение с состояниями пользовательских интерфейсов.

RFB-протокол разрабатывался для организации доступа от тонкого клиента к виртуальной рабочей среде (VNC). VNC-клиент поддерживает большое количество алгоритмов сжатия и выбирает конкретный в зависимости от условий использования. В основе RFB-протокола лежит создание и передача сжатого растрового изображения в ответ на любую полученную от тонкого клиента команду.

Со временем оба протокола «обросли» реализациями функций конкурента и новыми функциями, соответствующими современным компьютерным технологиям. Все собственные протоколы, используемые в приложениях удалённого доступа, в той или иной степени основаны на RDP или RFB, расширяют, изменяют, совмещают или урезают их функциональность в зависимости от специфики использования конкретного приложения.

Стек сетевых технологий и протоколов у различных приложений удалённого доступа, в целом, одинаков, а использование конкретных технологий и протоколов определяется архитектурой приложения.

Протоколы удалённого доступа работают поверх протоколов транспортного уровня (TCP). Для того, чтобы два клиента удалённого доступа смогли установить соединение, им необходимо как-то найти друг друга. Когда клиенты находятся в локальной сети, для этого может использоваться UDP-протокол, он не позволяет установить прямое соединение между клиентами, но позволяет с высокой скоростью опрашивать все устройства в локальной сети на наличие клиента удалённого доступа и готовность установить соединение по протоколу TCP.

Обычно, даже при работе в локальной сети, все клиенты удалённого доступа подсоединены к серверу. В зависимости от архитектуры приложения, сервером может являться один из клиентов, но чаще это выделенный сервер, совмещающий в себе несколько функций.

Одной из важнейших функций является «знакомство» клиентов. В таком случае сервер называют сервером соединений (или сервером рукопожатий), и для подключения к нему клиент, как правило, использует 443 порт и протокол HTTPS или WebSocket. В свою очередь, сервер сопоставляет между собой ID клиента, сетевой и физический адреса устройства, учётные данные пользователя устройства (или клиента) и, возможно, некоторые другие данные, используемые в данном конкретном приложении. Когда два устройства находятся в разных подсетях, сервер передаёт клиентам необходимые данные для установления TCP-соединения.

В зависимости от степени закрытости сети, клиенту удалённого доступа может понадобиться поддержка работы с прокси-серверами или VPN. Некоторые приложения позволяют использовать сервер соединений в качестве моста, что увеличивает нагрузку на сервер, но позволяет избежать разворачивания собственного прокси- или VPN-сервера.

Работа протоколов удалённого доступа поверх TCP подразумевает, что каждое соединение защищено TLS (протокол защиты транспортного уровня). Некоторые приложения, находясь долгое время на рынке, но пользуясь относительно низким спросом, до сих пор могут использовать для защиты соединения SSL (слой защищённых сокетов) несмотря на то, что последняя версия (SSL 3.0) признана устаревшей и небезопасной ещё в 2015-м году. Для обеспечения надёжной защиты соединения рекомендуется, чтобы в приложении использовался протокол TLS 1.2 или выше.

Все современные сетевые соединения используют различные алгоритмы шифрования для защиты данных от перехвата. Наиболее распространённый алгоритм шифрования для приложений удалённого доступа — AES-256, но также используются AES-128 и AEAD-256. Также, для защиты соединения и передаваемых данных некоторые клиенты удалённого доступа позволяют использовать поверх TCP-соединения другие защищённые соединения и протоколы, например, SSH.

В конечном итоге, алгоритм работы приложений удалённого доступа сводится к следующей последовательности действий:

1. Авторизация локальных пользователей в клиентах:

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

2. Установление защищённого соединения между клиентами:

Стек сетевых технологий позволяет клиентам удалённого доступа найти друг друга как в локальной, так и в глобальной сети, проверить достоверность соединения и защитить каналы связи стандартизированными методами и алгоритмами.

3. Аутентификация и авторизация удалённого пользователя:

Использование протоколов удалённого доступа позволяет удалённому пользователю авторизоваться в системе локального устройства и работать на нём так, будто он находится непосредственно за локальным устройством.

4. Сессия удалённого доступа

В зависимости от внутренних требований безопасности и функциональных возможностей используемой системы удалённого доступа, каждая сессия может логироваться и/или полностью записываться на локальном и/или удалённом устройстве, сервере системы, при его наличии, и может быть передана (в виде лога и/или видеозаписи) в сервисы информационной безопасности.

5. Завершение сессии удалённого доступа

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

Начать дискуссию