Найти в Дзене
SEBERD IT Base

[711] Теневое подключение к сессии Windows через RDP

ПРЕДУПРЕЖДЕНИЕ: Статья предназначена для повышения осведомленности о киберугрозах и методах защиты. Все методы и инструменты, упомянутые в статье, должны использоваться только в законных целях, с разрешения владельцев систем и в рамках действующего законодательства РФ. Всё, что вы видите на экране при обычном RDP-подключении — это не тот рабочий стол, который видит пользователь за своим монитором. Это копия, созданная специально для вас. Я понял это, когда впервые попытался помочь коллеге с зависшей программой. Подключился через стандартный клиент удалённого рабочего стола и увидел пустой рабочий стол с дефолтными обоями, тогда как пользователь по телефону показывал свой экран с открытыми документами. Мы находились в разных графических окружениях одной и той же Windows. Система создаёт новую пользовательскую сессию при каждом входе через RDP. Это не ошибка, а архитектурное решение, обеспечивающее изоляцию. Каждая сессия получает: Для администрирования серверов такое поведение удобно.
Оглавление

ПРЕДУПРЕЖДЕНИЕ: Статья предназначена для повышения осведомленности о киберугрозах и методах защиты. Все методы и инструменты, упомянутые в статье, должны использоваться только в законных целях, с разрешения владельцев систем и в рамках действующего законодательства РФ.

Всё о shadow-подключении через RDP

Всё, что вы видите на экране при обычном RDP-подключении — это не тот рабочий стол, который видит пользователь за своим монитором. Это копия, созданная специально для вас.

Я понял это, когда впервые попытался помочь коллеге с зависшей программой. Подключился через стандартный клиент удалённого рабочего стола и увидел пустой рабочий стол с дефолтными обоями, тогда как пользователь по телефону показывал свой экран с открытыми документами.

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

Каждая сессия получает:

  • собственное пространство процессов;
  • отдельный экземпляр explorer.exe;
  • свой набор переменных окружения;
  • изолированный графический контекст.

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

https://seberd.ru/711/
https://seberd.ru/711/

Существует способ подключиться к уже работающей сессии без создания новой. В корпоративной среде это называется shadowing. Microsoft использует термин remote control of user sessions. Механизм позволяет администратору видеть и управлять тем же графическим контекстом, который видит пользователь, в реальном времени.

Чем подключение к активной сессии отличается от обычного RDP

Обычное RDP-подключение инициирует создание новой WinStation — объекта ядра Windows, управляющего графической сессией. Система загружает профиль пользователя, запускает оболочку explorer.exe, создаёт новое окружение рабочего стола. Происходит это даже если пользователь уже работает на том же компьютере. Результат — изолированное пространство процессов: тот же пользователь, те же права доступа, но совершенно другой набор запущенных приложений.

При shadow-подключении mstsc.exe работает иначе. Вместо создания новой WinStation он подключается к существующей, используя Session ID — числовой идентификатор, присвоенный сессии при входе пользователя. Графический вывод не дублируется, а разделяется. Вы видите точно то же изображение, которое формируется для монитора пользователя, с той же частотой обновления и теми же артефактами, если они есть.

Это различие критично для сценариев поддержки. Если у пользователя зависло приложение, отображается ошибка специфичного диалога или пропало сетевое подключение — вы увидите это в shadow-режиме. В обычном RDP вы увидите только свежую сессию, где всё работает нормально, потому что проблема существует в другом графическом контексте.

Почему при обычном RDP создаётся новая сессия пользователя

Архитектура Windows Terminal Services строилась на принципе сессионной изоляции ещё с версии Windows NT 4.0 Terminal Server Edition. Каждый входящий пользователь получает изолированное окружение по соображениям безопасности и стабильности. Если один пользователь запустит ресурсоёмкое приложение или вызовет сбой графической подсистемы, это не повлияет на сессии других пользователей.

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

Как подключиться к уже активной сессии и увидеть экран пользователя

Для подключения к существующей сессии используется тот же исполняемый файл mstsc.exe, что и для обычного RDP, но с дополнительными параметрами командной строки. Ключевой параметр — /shadow, после которого указывается числовой идентификатор целевой сессии.

Примеры команд:

mstsc /shadow:3 /v:COMPUTERNAME /control

mstsc /v:COMPUTERNAME /shadow:3 /control

Параметр /control необходим, если вы планируете управлять сессией. Без него подключение работает только для просмотра. Параметр не принимает значений: запись вида /control:3 приведёт к ошибке.

Когда shadow-подключение лучше обычного RDP

Shadow-подключение не заменяет обычный RDP, а дополняет его. Оно незаменимо в нескольких сценариях:

  • Удалённая поддержка пользователей с сохранением контекста.
  • Обучение и демонстрация действий на экране пользователя.
  • Диагностика спорадических ошибок, воспроизводимых только в конкретной сессии.

Как подключиться через mstsc /shadow

Получение Session ID через qwinsta или quser

Для просмотра активных сессий можно использовать:

qwinsta /server:remote-pc

quser /server:remote-pc

Session ID находится в колонке ID.

Примеры подключения

Только просмотр:

mstsc /v:192.168.1.100 /shadow:3

Полное управление:

mstsc /v:192.168.1.100 /shadow:3 /control

Без запроса согласия пользователя:

mstsc /v:192.168.1.100 /shadow:3 /control /noConsentPrompt

Завершение shadow-сессии

Ctrl + * (звёздочка на цифровой клавиатуре) — прерывает подключение, но не завершает сессию пользователя.

Требования и права для shadow-подключения

Для Windows 8.1 / Server 2012 R2 и выше достаточно членства в группе Remote Desktop Users + разрешение на удалённое управление сессиями через групповую политику.

Настройка политики

Политика: Set rules for remote control of Remote Desktop Services user sessions

Возможные значения:

  • 0 — удалённое управление запрещено полностью
  • 1 — полный контроль с разрешения пользователя
  • 2 — полный контроль без разрешения пользователя
  • 3 — просмотр с разрешения пользователя
  • 4 — просмотр без разрешения пользователя

Через реестр:

reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services" /v Shadow /t REG_DWORD /d 2 /f

Автоматизация через BAT и PowerShell

Пример BAT файла

@echo off

mstsc /v:%1 /shadow:3 /control /noConsentPrompt

Пример PowerShell скрипта

param(

[Parameter(Mandatory=$true)][string]$ComputerName,

[Parameter(Mandatory=$true)][string]$UserName,

[switch]$ViewOnly

)

# Получаем список активных сессий

$sessions = qwinsta /server:$ComputerName | ForEach-Object { ($_ -replace '\s+', ' ').Trim() } | Where-Object { $_ -match $UserName -and $_ -match 'Active' }

if ($sessions.Count -eq 0) {

Write-Host "Активная сессия для пользователя $UserName не найдена" -ForegroundColor Red

exit 1

}

$sessionId = ($sessions[0] -split ' ')[2]

$arguments = @("/v:$ComputerName","/shadow:$sessionId","/noConsentPrompt")

if (-not $ViewOnly) { $arguments += "/control" }

Start-Process mstsc -ArgumentList $arguments

Write-Host "Подключение к сессии $sessionId на $ComputerName..." -ForegroundColor Green

Мониторинг shadow-подключений

События фиксируются в Event Viewer:

Applications and Services Logs → Microsoft → Windows → TerminalServices-RemoteConnectionManager → Operational

ID 20503 — начало shadowing

ID 20504 — завершение shadowing

Текущее количество подключений:

qwinsta /counter

Важные заметки

Shadow-подключение экономит часы работы при поддержке пользователей, позволяет диагностировать проблемы в их естественной среде и обучать без отрыва от рабочего процесса. Но при отключённом запросе согласия пользователь никогда не узнает, что за его работой наблюдают. Корпоративные политики должны регламентировать использование таких технологий. Аудит подключений через Event Viewer обязателен. И еще раз: использование /noConsentPrompt без явного разрешения нарушает принципы информационной этики.

#технологии #IT #софт #администрирование #безопасность #Windows #удаленныйдоступ #системноеадминистрирование