вернуться к обзору Больше статей

Видят ли сайты удалённый рабочий стол? Проверяем признаки

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

Сайт может считывать признаки в браузере и на их основе предполагать удалённый доступ. Но обычные API экрана и графики, о которых речь ниже, не возвращают флаг сеанса удалённого рабочего стола. Они описывают среду браузера. Коммерческие средства обнаружения обещают больше, а установленное ПО для мониторинга — вообще отдельный случай. Безоговорочное «да» или «нет» стирает как раз то различие, которое здесь важно.

Если коротко: страница, открытая в браузере удалённого компьютера, считывает среду этого браузера, а не напрямую железо ноутбука, с которого вы подключились. Размеры экрана и строки GPU могут измениться, но ни то ни другое не доказывает, что RDP активен. Сравните реальные показания ниже: результат — это сравнение среды, а не справка о наличии или отсутствии удалённого доступа.

Сайт считывает данные браузера на удалённом компьютере

Допустим, вы управляете Windows-компьютером с MacBook. Если Chrome запущен на этом Windows-компьютере, страница выполняется там же. MacBook показывает рабочий стол и передаёт ваши действия. Посещение сайта не становится посещением с Mac лишь потому, что ваши пальцы лежат на клавиатуре Mac.

С Chrome Remote Desktop, AnyDesk и TeamViewer начинать нужно с того же: выясните, где запущен браузер со страницей. Не путайте клиент удалённого доступа, даже если он открыт в браузере, с браузером внутри рабочего стола, которым вы управляете.

Данные какого компьютера считывает сайт?
  1. Устройство, с которого вы подключилисьПоказывает удалённый рабочий стол и передаёт ваши действия.
  2. Соединение с удалённым рабочим столомПередаёт изображение рабочего стола и пользовательский ввод между устройствами.
  3. Браузер на удалённом компьютереВыполняет страницу и отвечает на её вызовы браузерных API.
  4. СайтПолучает сигналы страницы и сетевое соединение браузера.
Обычная веб-страница

Может считывать доступные ей значения браузера. Эти API не предоставляют флаг сеанса RDP или список процессов.

Установленное ПО или ПО под управлением администратора

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

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

Это обычная схема удалённого управления, а не гарантия для всех функций перенаправления. В управляемой конфигурации ресурсы могут перенаправляться, а ПО на обоих устройствах — работать совместно. Установленный агент или расширение с подходящими разрешениями тоже могут передавать сведения, недоступные обычной странице. Если сервис попросил что-то установить, его возможности нужно разбирать отдельно.

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

Измените среду без удалённого рабочего стола

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

Сравниваем показания браузера, а не гадаем об удалённом доступе

Зафиксируйте исходные значения, измените размер окна браузера или масштаб страницы и сравните показания. Данные остаются в памяти этого компонента; перезагрузка страницы их удаляет.

Пока показаны только текущие значения. Для начала зафиксируйте исходные.

Снимки браузерной среды
Источник (API)Исходное значениеТекущее значениеСравнение
navigator.userAgentНе зафиксированоОжидание браузераНе сравнивалось
screen.width / heightНе зафиксированоОжидание браузераНе сравнивалось
screen.availWidth / availHeightНе зафиксированоОжидание браузераНе сравнивалось
screen.colorDepth / pixelDepthНе зафиксированоОжидание браузераНе сравнивалось
window.innerWidth / innerHeightНе зафиксированоОжидание браузераНе сравнивалось
window.devicePixelRatioНе зафиксированоОжидание браузераНе сравнивалось
UNMASKED_VENDOR_WEBGLНе зафиксированоОжидание браузераНе сравнивалось
UNMASKED_RENDERER_WEBGLНе зафиксированоОжидание браузераНе сравнивалось

Доступ к подробным сведениям WebGL сейчас: Подробные сведения WebGL недоступны либо браузер ещё не загрузился.

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

Таблица считывает navigator.userAgent, размеры screen, доступную область экрана, глубину цвета и пикселя, размеры области просмотра, devicePixelRatio и строки отладочного расширения WebGL, если они доступны. Названия API указаны рядом со значениями. Ничто здесь не перечисляет установленные программы и не запрашивает состояние сеансов Windows.

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

Метка «Без изменений» означает только, что два доступных для чтения значения совпали. «Изменилось» — что они различаются. Если измерение недоступно, виджет не считает два отсутствующих значения совпадением. Звучит не так эффектно, как красная плашка «Обнаружен RDP». Зато именно такой вывод позволяют сделать измерения.

Размер экрана — не однозначный признак удалённого рабочего стола

screen.width и screen.height возвращают размеры экрана, доступные веб-странице, в CSS-пикселях. window.innerWidth и window.innerHeight описывают область просмотра страницы. Это разные измерения, и ни одно из них не гарантирует точное число физических пикселей монитора.

Масштаб страницы добавляет ещё одну ловушку. Как объясняет документация devicePixelRatio, обычное масштабирование страницы влияет на DPR, а масштабирование жестом сведения или разведения пальцев — нет. Перенос окна между дисплеями с разной плотностью пикселей тоже может его изменить. Изменившийся коэффициент говорит о смене показания, а не о человеке за удалённой клавиатурой.

Удалённый сеанс может предоставить другую конфигурацию дисплеев. Но то же самое бывает при смене монитора или масштаба рабочего стола. И наоборот: при удалённом подключении браузер может продолжить сообщать прежние значения. По одним показаниям экрана нельзя определить, какое объяснение верно.

Старый трюк с глубиной цвета не проверяет RDP

В старых ответах иногда советуют проверять, не ниже ли ожидаемой screen.colorDepth. За этим стоят два допущения: браузер показывает нужное различие в параметрах дисплея, а объясняется оно только удалённым доступом. Ни одно из них не даёт надёжного универсального детектора.

Текущий редакторский черновик CSSOM View описывает эти поля и допускает предоставление сведений об экране с учётом приватности. Для глубины цвета он рекомендует возвращать 24, если браузер не знает глубину или предпочитает не раскрывать её ради приватности. Там же описаны особенности совместимости значений 24 и 32. Это рабочий черновик, а не спецификация RDP.

Так что «24 означает локальный сеанс», а «32 — удалённый» — выдуманные вердикты, приклеенные к настоящим числам. Записать числа можно. Получить достоверное состояние сеанса, просто переименовав их, — нет.

Программный GPU — подсказка, а не доказательство

Необязательное расширение WEBGL_debug_renderer_info открывает доступ к строкам производителя и рендерера. Спецификация Khronos определяет их как сведения о графическом драйвере и обсуждает причины, по которым браузеры могут скрывать эти подробности ради приватности. Индикатор удалённого доступа в ней не определён.

Программный рендерер говорит о том, какой способ рендеринга сообщает браузер. Он не говорит, кто управляет мышью. Обратная ошибка ничуть не лучше: название аппаратного GPU не исключает удалённого сеанса. Microsoft прямо документирует рендеринг с ускорением GPU в Azure Virtual Desktop через RDP.

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

Что на самом деле обещают коммерческие детекторы удалённого доступа

Не превращайте отсутствие стандартного флага в утверждение «ни один сайт никогда не сможет обнаружить удалённый доступ». PREBYTES предлагает обнаружение удалённого рабочего стола с внедрением JavaScript на сайте, активными и пассивными слоями детектирования и передачей оценки риска через API. Это заявления поставщика. Мы не тестировали его продукт и не проверяли точность независимо.

Вердикт коммерческого продукта не равнозначен одному свойству screen, и этот виджет не воспроизводит такой продукт. Поведенческие модели он тоже не проверяет. Тормозящий курсор ничего не доказывает: у задержек бывают другие причины. Удалённый ввод человеком — не то же самое, что управление браузером через Selenium; этот отдельный вопрос разбирает наша статья об обнаружении автоматизации.

Сравните свою конфигурацию, прежде чем её менять

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

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

Для законного QA-тестирования с несколькими профилями может пригодиться менеджер профилей вроде Incogniton, но это не доказательство того, что удалённый доступ невозможно обнаружить. Соблюдайте правила сервиса об удалённом доступе, а не считайте результат любого чекера отпечатков разрешением.

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

Логотип Incogniton

Повысьте уровень своей приватности

Стрелка