What's new
Runion

This is a sample guest message. Register a free account today to become a member! Once signed in, you'll be able to participate on this site by adding your own topics and posts, as well as connect with other members through your own private inbox!

Слежение за пользователями, с помощью теневого подключения к RDP – использование встроенных инструментов

handersen

Light Weight
Депозит
$0
Переведено для .IS.
Оригинальная статья: blog[.]bitsadmin[.]com/spying-on-users-using-rdp-shadowing
Автор статьи Arris Huijgen.
Автор перевода handersen.



Как-то в воскресенье после обеда, я развлекался со старым ноутом, пытаясь превратить его в медиа-центр для телевизора. И так как, что я предпочитаю встроенные средства Windows сторонним инструментам, после недолгого поиска в сети я узнал, что Microsoft Remote Desktop Protocol (RDP), поддерживает так называемое “теневое“ подключение, а RDP доступен во всех серверных версиях Windows, а также в версиях business edition для конечных пользователей.

Функционал теневого подключения подразумевает, что в то время как кто-то работает за своим компом, либо физически, либо удаленно по RDP – другой пользователь сможет видеть текущую сессию и даже контролировать ее! Это отлично подходит для моего случая с ноутбуком, подключенном к ТВ. Я могу управлять ноутбуком, подключенном к моему телевизору, прямо с дивана, а телевизор показывает то, что я хочу. Например Netflix, видео с YouTube или семейные фото. Если же я просто подключался по RDP к медиа-центру, на ТВ отображался экран блокировки, который предотвращает доступ к его настройкам.

Эта фича, сразу зацепила мой хакерский ум. Несмотря на то, что использование Windows Remote Management (WinRM) увеличивается, системные администраторы продолжают активно применять RDP. Более того, многие организации предоставляют доступ к внутренним ресурсам, используя RDP. В качестве операторов Red Team, мы так же можем применять эту возможность в ходе задач по слежению и за админами, и за пользователями - без размещения в удаленной системе дополнительных бинарников одновременно сливаясь с обычным трафиком. К тому же возможно использовать теневое подключение, если порт RDP заблокирован файерволом, но открыт порт SMB (да, вы прочли правильно - RDP через TCP порт 445). И наконец этот функционал можно применить, для создания бэкдора на удаленной системе, когда пользователь с низкими привилегиями, может видеть и захватывать сессии пользователей, имеющих высокие привилегии, чтобы получить в сети точку опоры.

Демо


Это демонстрационное видео (без звука) показывает, как сконфигурирована удаленная система для принятия теневых подключений без разрешения пользователя. Шаги из этого видео, будут разъяснены в оставшейся части этой статьи.


Видео в оригинальном блоге
Бэкап на DamageLiB
Теневое подключение к RDP

Для начала, давайте чуть-чуть подробнее рассмотрим функцию Microsoft для теневого подключения к RDP. Теневое подключение может быть выполнено между локальными пользователями одной и той же машины, а также удаленно, пользователем на удаленной машине.

Существуют две реализации функции теневого подключения. Старая реализация, бывшая частью Windows 7, являлась аналогом сервиса из Windows Server 2008 R2 и ранних версий Windows была частью службы Remote Desktop Services (termsrv.dll). Сейчас, эта функция вынесена в отдельные бинарники. В старой реализации, для инициализации сеанса теневого подключения на стороне клиента, применялся инструмент командной строки shadow.exe. Эта команда включена в версии Windows до Windows 7/Windows Server 2008 R2.

Новая реализация функции теневого подключения, представлена начиная с Windows 8.1 и является аналогом сервиса из Windows Server 2012 R2. После выполнения инициализации и установления сеанса, служба Remote Desktop Services порождает процессы RdpSaUacHelper.exe, RdpSaProxy.exe и RdpSa.exe, которые поддерживают теневое подключение активным. На стороне клиента, применяется средство подключение к Удаленному Рабочему Столу (mstsc.exe). В этой статье, мы будем рассматривать новую реализацию.

Между старой реализацией функции теневого подключения в Windows 7/Windows Server 2008 R2 и новой реализацией в Windows 8.1/Windows Server 2012 R2, были еще версии Windows 8/Server 2012. Эти ОС однако, не поддерживают ни одну из двух реализаций функции теневого подключения.

Для использования теневого подключения к RDP, служба Remote Desktop Services (TermService), должна быть запущена (что и сделано по умолчанию), разрешена правилами файервола и в случае с Red Team из соображений скрытности, настройки необходимо сконфигурировать так, чтобы у пользователя не запрашивалось разрешение на теневое подключение. В статье мы поэтапно разберемся, как это настроить.

Конфигурирование теневого подключения

Конфигурирование теневого подключения, имеет только одну настройку, которая определяет будет ли пользователь при коннекте по теневому подключению запрашивать разрешение, сможет ли он только наблюдать за сессией или также ей управлять. Эта настройка задается через Групповые Политики:
  • Путь: Computer Configuration -> Policies -> Administrative Templates -> Windows Components -> Remote Desktop Services -> Remote Desktop Session Host -> Connections
  • Наименование: Set rules for remote control of Remote Desktop Services user sessions


В русской локализации:
  • Путь: Конфигурация компьютера->Административные шаблоны->Компоненты Windows->Службы удаленных рабочих столов->Узел сеансов удаленных рабочих столов->Подключения
  • Наименование: Устанавливает правила удаленного управления для пользовательских сеансов служб удаленных рабочих столов

Так как мы хотим остаться незамеченными и не изменять групповые политики на выбранной машине, мы сосредоточимся на конфигурировании конкретно этой настройки в реестре целевой машины. В реестре Windows эта настройка представлена как параметр Shadow типа DWORD в ключе HKLM\Software\Policies\Microsoft\Windows NT\Terminal Services.

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

Значение​
Имя​
Описание​
0​
DisableУдаленное подключение запрещено.
1​
EnableInputNotifyПользователь удаленного рабочего стола, имеет полный контроль над сессией пользователя, получив разрешение от текущего пользователя.
2​
EnableInputNoNotifyПользователь удаленного рабочего стола, имеет полный контроль над сессией пользователя, разрешение от текущего пользователя не требуется.
3​
EnableNoInputNotifyПользователь удаленного рабочего стола, может видеть сессию пользователя, получив разрешение от текущего пользователя. Удаленный пользователь не может управлять сессией.
4​
EnableNoInputNoNotifyПользователь удаленного рабочего стола, может видеть сессию пользователя, разрешение от текущего пользователя не требуется. Удаленный пользователь не может управлять сессией.

По умолчанию, значение Shadow, в реестре отсутствует и в этом случае его значение равно 1. При этом теневые подключения не будут приниматься, без согласия пользователя (владельца сессии). Так как в ходе задач Red Team, мы не хотим привлекать внимание пользователей, когда захватываем их Рабочий стол, мы установим это значение равным 2, таким образом мы сможем и наблюдать за рабочим столом, и если понадобится управлять им без согласия пользователя. Для принятия теневых подключений, необязательно разрешать Удаленный Рабочий стол в настройках SystemPropertiesRemote.exe, если пользователь вошел в систему локально и Удаленный Рабочий стол отключен, теневое подключение к сессии текущего пользователя, все же возможно. При этом служба Remote Desktop Services (TermService) - должна быть запущена.


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

Аутентификация


Подготовив все необходимые условия, давайте приступим к практической части.

Для установления сеанса теневого подключения, в первую очередь нам нужно убедиться, что мы авторизованы для доступа к удаленной системе – необходим либо аккаунт с правами администратора на удаленном хосте, либо пользователь или группа, которые добавлены в группу “Пользователи удаленного рабочего стола“ или некую категорию, которой явным образом предоставлен доступ к списку авторизации Удаленного рабочего стола. Последний вариант, будет подробнее рассмотрен в разделе “Теневое подключение, как бэкдор“ этой статьи.

Командная оболочка позволяет при аутентификации с достаточными правами, запустить например утилиту runas.exe с ключом /netonly. Любые процессы, вызванные из процесса запущенного с применением runas.exe, будут наследовать атрибуты безопасности родительского процесса и использовать их в случае, когда удаленный хост требует аутентификации. Командная строка runas.exe, будет выглядеть следующим образом, где “ДОМЕН“ может так же быть именем целевого компьютера, в случае использования локальных (не доменных) учетных данных.



Другие инструменты, вроде Rubeus и Kekeo, так же запросят соответствующие тикеты Керберос в процессе аутентификации.

Запрос интерактивных сеансов

Как только командная оболочка запущена с соответствующими атрибутами безопасности, у удаленной системы можно запрашивать запуск интерактивных сеансов. Существуют различные утилиты командной строки, которые могут показывать сеансы на удаленной системе. Вы можете использовать команду ниже или один из ее эквивалентов query.exe user /server:MYSERVER или qwinsta.exe /server:MYSERVER. В качестве альтернативы, можно использовать NoPowerShell командлет Get-WinStation с параметром -ComputerName MYSERVER. Все это также можно выполнить из памяти, использовав например команду Cobalt Strike execute-assembly. Все эти команды используют для связи порт Microsoft-DS (445/TCP).



В выводе команд, отображаются залогиненые пользователи, Id их сессий и некоторые другие подробности, вроде времени входа в систему и времени простоя. Id сессии, будут использоваться в дальнейших шагах. Эта команда выдаст результат, только если залогиненные пользователи и пользователь выполнивший запрос, имеет привилегию WINSTATION_QUERY (выданную явно или опосредованно, через членство в группе дающей ее). По умолчанию, этой привилегией обладают члены групп Администраторы, Пользователи удаленного рабочего стола и ИНТЕРАКТИВНЫЕ. Больше об этой привилегии, мы объясним позже в разделе “Теневое подключение, как бэкдор“ этой статьи. Можно конечно вообще пропустить этот шаг и просто угадывать Id сессии в следующих шагах, начав с 1 и увеличивая на единицу, каждый раз.

Конфигурирование теневого подключения по RDP

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

Кроме варианта с использованием службы Microsoft-DS на порту (445/TCP) и применения команд, вроде sc.exe, reg.exe, netsh.exe и Microsoft Management Console (mmc.exe), конфигурирование удаленной машины можно так же выполнить посредством WinRM/WMI, которые соответственно крутятся на портах 5985/TCP и/или 5986/TCP и 135/TCP. В PowerShell DCOM подключение к удаленному хосту, можно установить используя две следующие строки:



Переменная $s, содержит информацию о сеансе и будет использована во всех последующих секциях кода. В качестве альтернативы, можно использовать WinRM, удалив параметр -SessionOption.

Для получения более подробной информации о WMI, гляньте мою предыдущую статью по Извлечению учетных данных из удаленной системы Windows – здесь: https://blog.bitsadmin.com/extracting-credentials-from-remote-windows-system

Разрешаем теневые подключения по RDP

До того, как функцию теневого подключения станет возможно использовать с удаленной машиной, должны быть запущены службы Remote Desktop Services (TermService) и в файервол добавлено правило Remote Desktop - Shadow (TCP-In), разрешающее подключение. Если на целевой машине уже используются подключения по RDP (вывод quser.exe, показывает названия сеансов RDP-Tcp), этот шаг можно пропустить. В случае, когда пользователи работают за машиной только физически (т. е. не используют RDP), этот этап может понадобиться.

Служба TermService

Проверьте запущена ли служба, с помощью Диспетчера Служб (445/TCP) через sc.exe или Microsoft Management Console (mmc.exe), или с помощью WMI через DCOM или WinRM задействовав переменную $s с информацией о сеансе CimSession, описанную ранее. Если служба остановлена, ее надо запустить.

Вариант #1: Диспетчер Служб


Запрос



Запуск



Вариант #2: WMI



Запрос



Запуск



Вариант #3:
Диспетчер Служб GUI


Запрос

Запустите mmc.exe из сеанса powershell.exe, созданного в разделе этой статьи “Аутентификация“ и унаследовавшего соответствующие атрибуты безопасности. Нажмите Файл->Добавить или удалить оснастку (Ctrl + M) и добавьте в консоль оснастку “Службы“. Добавляя оснастку убедитесь, что выбрали Действие->Подключиться к другому компьютеру и ввели сетевое имя или IP целевой машины.

Запуск

Просто щелкните правой кнопкой мыши на службе Remote Desktop Services и выберите Запустить.

Правило файервола для теневых подключений


Для подключения к именованному каналу, создаваемому процессом RdpSa.exe во время установления теневого подключения к сеансу, правило файерволла для Remote Desktop - Shadow (TCP-In), должно быть в состоянии “Включено“. По аналогии со службой Remote Desktop Services, мы сначала проверим разрешено ли подключение, и если нет – разрешим его.

Вариант #1: WMI


Запрос



Включение



Вариант #2: GUI оснастка управления файрволом



Для этой задачи необходимо, чтобы правила Windows Firewall Remote Management (WFRM) были уже разрешены на удаленной машине, в противном случае мы просто столкнемся с проблемой, когда нужно разрешить правила WFRM, для установки разрешения в правилах для Remote Desktop - Shadow через GUI. Если правила WFRM отключены, графический интерфейс, просто будет пустым или выдаст какую-нибудь ошибку.

Запрос

Запустите mmc.exe из окна cmd.exe имеющего соответствующие атрибуты безопасности. Нажмите Файл->Добавить или удалить оснастку (Ctrl + M) и добавьте в консоль оснастку Монитор брандмауэра защитника Windows в режиме повышенной безопасности. Добавляя оснастку убедитесь, что выбрали Действие->Подключиться к другому компьютеру и ввели сетевое имя или IP машины, с которой собираетесь соединиться по теневому подключению. Когда оснастка загрузится, выберите Правила для входящих подключений и найдите Remote Desktop - Shadow (TCP-In) или Удаленный рабочий стол - теневая копия (TCP входящий трафик) в русской локализации.


Включение

Просто щелкните на правиле правой кнопкой мыши и выберите Включить правило.

Вариант #3: netsh



Необходимые условия здесь такие же, как в варианте 2, с включением правила через GUI.

Запрос



Включение




Заметаем следы

Для удаления следов, правила файервола можно снова отключить через WMI, GUI или netsh.exe, соответственно вызовом метода Disable, щелкнув на правиле правой кнопкой мыши и отключить его, изменив Включено на нет.

Конфигурируем теневое подключение по RDP


Как упоминалось до этого, пользователь удаленной машины получит уведомление, когда кто-то попытается наблюдать или управлять его сеансом по теневому подключению. Чтобы принимались скрытые теневые подключения к сеансу пользователя, сначала нужно настроить ключ реестра Shadow. Реестр удаленной системы, можно подкорректировать применив несколько протоколов, в зависимости от доступных портов и конфигурации служб прослушивающих эти порты. Мы намерены установить значение Shadow в HKLM\Software\Policies\Microsoft\Windows NT\Terminal Services на удаленной машине, равным 2, которое позволит нам видеть и управлять сеансом, не информируя об этом пользователя.

Вариант #1: reg.exe



Если на целевом хосте разрешена служба Удаленного реестра - RemoteRegistry, можно использовать следующую команду:

Запрос



Установка



Вариант #2: WMI



Для этого варианта требуется, чтобы на удаленном хосте были доступны WMI (135/TCP) или WinRM (5985/TCP or 5986/TCP)

Запрос



Установка




Заметаем следы



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

reg.exe



WMI




Подключение



После проверки, и если понадобилось конфигурирования службы, правил файервола и политик теневого подключения, пришло время применить этот функционал для слежения за пользователями. В ОС Windows 8.1/Server 2012 R2 и более поздних, для отображения удаленного сеанса применяется инструмент Подключение к удаленному рабочему столу - Remote Desktop Connection mstsc.exe. Однако эту утилиту необходимо запускать из командной строки, так как из GUI не доступна опция теневого подключения. mstsc.exe имеет большое количество параметров, те из них, что относятся к теневому подключению – перечислены ниже.



Параметр​
Назначение​
Примечания​
/v:<server[:port]>Указывает удаленный комп, к которому вы собираетесь подключиться
/shadow:<sessionID>Указывает ID сеанса, который вы хотите отобразитьВместо идентификации ID сеанса, как описывалось ранее, можно просто подобрать ID, начав с 1
/controlРазрешает управлять сеансомДля этого параметра, требуется значение Shadow, равное 2
/noConsentPromptРазрешает теневое подключение без согласия пользователяДля этого параметра, требуется значение Shadow, равное 2 (или 4)

Взяв ID сеанса, полученый в разделе Запрос интерактивных сеансов, мы можем сформировать командную строку для подключения к удаленной системе. В качестве альтернативы, мы можем пропустить этот шаг и просто подбирать ID сеанса. Проверяйте, что всегда прописываете ключ /noConsentPrompt. Даже, если значение Shadow в реестре установлено, чтобы не запрашивать разрешения у пользователя – на стороне клиента мы должны явно указать, что не хотим запрашивать разрешения.



Теперь откроется утилита Подключение к удаленному рабочему столу и в течение нескольких секунд отобразится экран удаленного сеанса. Это будет сессия в режиме только-для-чтения, когда можно наблюдать за тем, что делает пользователь. Если пользователь не проявляет активности, и мы решили захватить управление, существующий сеанс теневого подключения надо закрыть, и перезапустить однострочник с mstsc, добавив параметр /control, командная строка при этом станет выглядеть так:



Так как Windows Server допускает множественные подключения, можно также опустить параметр /v и просто оставить теневое подключение на локальной машине.

Эта статья подробно не рассматривает теневые подключения в Windows 7/Server 2008 R2 и предыдущих версиях ОС, тем не менее в варианте запуска из командной строки, теневое подключение можно запустить командой shadow.exe 1 /SERVER:MYSERVER, где 1 следует заменить на ID сеанса, полученый в разделе Запрос интерактивных сеансов. Для завершения сеанса, используйте Ctrl + *, где звездочку нужно использовать с NumPad-а. Если NumPad отсутствует, один из доступных вариантов – использование комбинации функциональных клавиш, например на ноутбуке HP, это Ctrl + FN + P.

Защищенный рабочий стол


Каждый раз, когда сеанс пользователя заблокирован, или запроса подтверждения UAC (правой кнопкой->Запуск от имени Администратора), при включенном защищенном рабочем столе (включен по умолчанию) и ключ /control при запуске mstsc.exe не применялся – сеанс теневого подключения выдаст черный экран со знаком паузы. Соответственно, после того как пользователь вернется в систему или переключится с защищенного рабочего стола на обычный, сеанс теневого подключения восстановится.


Сеанс теневого подключения приостанавливается, если на защищенном рабочем столе отображается окно ввода пароля.


Аналогичный экран с уведомлением UAC.

Если же при при запуске mstsc.exe применялся ключ /control, окно ввода пароля на защищенном рабочем столе не отображается, вне зависимости от значения параметра PromptOnSecureDesktop в HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System.

Теневое подключение, как бэкдор


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

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



Важно убедиться, что такой пользователь присутствует в выводе quser.exe (и к нему возможно теневое подключение) только после того, как новый пользователь вошел по RDP. Пользователи залогиненые в системе данный момент, должны из нее выйти (не обязательно отключаясь, достаточно сделать выход из системы) и затем войти снова, чтобы к ним стало возможным теневое подключение через нашу бэкдор-учетку. Список учетных записей пользователей и групп, имеющих доступ к Службе терминалов - Terminal Services (могущих запросить доступ по RDP или теневому подключению) можно посмотреть, выполнив следующую команду:



Значение параметра PermissionsAllowed, это битовая маска, которая представленна константами в следующей таблице. Эти значения, также могут быть получены чтением свойства StringSecurityDescriptor экземпляра RDP-Tcp WMI класса Win32_TSPermissionsSetting.

Значение​
Константа​
Описание​
0x00001WINSTATION_QUERYРазрешение запрашивать информацию о сеансе.
0x00002WINSTATION_SETРазрешение изменять параметры соединения.
0x00004WINSTATION_LOGOFFРазрешение делать выход пользователя из сеанса.
0xF0008WINSTATION_VIRTUAL | STANDARD_RIGHTS_REQUIRED
Разрешение использовать виртуальные каналы. Виртуальные каналы предоставляют доступ программам с сервера к устройствам пользователя.
0x00010WINSTATION_SHADOW
Разрешение теневых подключений или удаленного управления сеансом другого пользователя.
0x00020WINSTATION_LOGONРазрешение входа в сеанс на сервере.
0x00040WINSTATION_RESET
Разрешение перезапустить или завершить сеанс на сервере.
0x00080WINSTATION_MSGРазрешение на отправку сообщений в сеансы других пользователей.
0x00100WINSTATION_CONNECTРазрешение на подключение к другому сеансу.
0x00200WINSTATION_DISCONNECTРазрешение на отключение сеанса.

Например значение 983999, установленное по умолчанию для группы Администраторы, в HEX выглядит, как 0xF03BF, что означает включение всех флагов из таблицы, за исключением WINSTATION_RESET.

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

Этот метод создает или обновляет значение Security типа REG_BINARY, ключа HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp. Можно также, непосредственно создать или изменить этот ключ, через удаленный реестр или WMI, как описывалось ранее. Альтернативным способом создать этот бэкдор, является прямое обновление значения DefaultSecurity, ключа HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations. Оно используется в случае, когда отсутствует значение Security, ключа RDP-Tcp.

Для удаления следов нашего бэкдора, используйте следующую команду PowerShell, где AccountName, это значение указывающее пользователя, который должен быть удален из конфигурации:



В качестве альтернативы, возможно так же вернуть все разрешения к значениям по умолчанию и удалить все добавленные учетные записи (созданные для бэкдора), использовав метод RestoreDefaults экземпляра RDP-Tcp класса Win32_TSPermissionsSetting:



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



Защита


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

Предотвращение


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

  • Для запрета теневых подключений вообще, используйте белые списки приложений, это позволит блокировать запуск процессов RdpSaUacHelper.exe, RdpSaProxy.exe и RdpSa.exe.
  • В групповых политиках, раз и навсегда явно укажите такое значение параметра Shadow, при котором требуется согласие пользователя, для просмотра или управления сеансом – таким образом бэкдор станет бесполезным, это предполагает, что условный злоумышленник в дальнейшем не получит достаточных привилегий для установки значения Shadow по своему желанию.
  • Разрешение WINSTATION_SHADOW следует убрать для всех учеток доступных через класс WMI Win32_TSAccount даже не смотря на то, что злоумышленник с административными привилегиями, может снова выдать себе разрешения.
Выявление


Этот раздел охватывает некоторые техники, которые можно применить для выявления теневых подключений.

Выявление факта создания или изменения значения Shadow


Настройте оповещение на событие создания или изменение значения Shadow в ключе HKLM\Software\Policies\Microsoft\Windows NT\Terminal Services.

Выявление запуска процессов, отвечающих за теневые подключения


При соединении по теневому подключению порождаются процессы. При установлении теневого подключения к системе запускаются следующие процессы:

Объект​
Потомок #1​
Потомок #2​
Потомок #3​
Процесс
C:\Windows\system32\RdpSaUacHelper.exe
C:\Windows\system32\RdpSaProxy.exeC:\Windows\system32\RdpSa.exe
Описание процессаПомощник агента сеансов RDP для UACПрокси-агент сеанса RDPАгент сеанса RDP
Родитель
C:\Windows\system32\svchost.exe -k netsvcsC:\Windows\system32\svchost.exe -k DcomLaunchC:\Windows\system32\RdpSaProxy.exe
Описание родителя
Служба настройки удаленного рабочего стола
Служба запуска процессов сервера DCOM.
Прокси-агент сеанса RDP

Когда процесс RdpSa.exe запущен из под конкретного пользователя, к его сеансу выполнено теневое подключение, когда же процесс остановлен – теневой сеанс завершен.

Сеть


На сетевом уровне, при запуске сеанса теневого подключения на машине внутри сети, можно наблюдать определенные пакеты DCE/RPC:

Аспект​
Фильтр Wireshark​
Примечание​
Для того, чтобы создать вызов к UUID отвечающему за установление сеанса теневого подключения, должен быть открыт именованный канал SessEnvPublicRpc
smb2.filename == "SessEnvPublicRpc"
Возможно, было бы проще применить IDS, который будет искать клиентов, обращающихся к этому именованному каналу. Могут быть и другие (легальные) способы использования этого канала, помимо слежки, которые я не исследовал.
DCE/RPC цепляется к интерфейсу UUID 1257b580-ce2f-4109-82d6-a9459d0bf6bc
dcerpc.cn_bind_to_uuid == 1257b580-ce2f-4109-82d6-a9459d0bf6bc
Это UUID библиотеки SessEnv.dll,службы настройки удаленного рабочего стола (SessionEnv). Этот UUID экспортирует одну единственную функцию с opnum 0, называющуюся RpcShadow2.

Выявление создание бэкдора


Выявляете изменение настроек удаленного рабочего стола, наблюдая за значением переменной Security ключа HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp и значением DefaultSecurity ключа HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations. При штатной работе системы эти ключи не будут меняться, таким образом любая их модификация может указывать на попытку злоумышленника ослабить систему авторизации в настройках теневых подключений.

Техники MITRE ATT&CK


В этом разделе действия, предпринимаемые для слежения и управления сеансами RDP, сопоставлены с классификацией фреймворка MITRE ATT&CK:

Тактика​
ID​
Наименование​
Детали​
Боковое перемещение
T1550​
Использование альтернативных данных аутентификацииПрименяется runas.exe, чтобы аутентифицироваться, как другой пользователь
Обнаружение
T1033​
Обнаружение пользователя/владельца системы
Запрашиваются сеансы с удаленной машины
Обход защиты
T1112​
Модификация системного реестраНастраивается ключ реестра Shadow
C2 (управление через командные серверы)
T1219​
ПО удаленного доступаВзаимодействие с сеансом существующего пользователя
C2 (управление через командные серверы)
T1071​
Протокол прикладного уровняТеневое подключение выполняется по протоколу SMB
Закрепление
T1098​
Манипулирование учетной записью
Настройка удаленного рабочего стола, для разрешения теневых подключений к сеансам пользователей с низкими привилегиями


Проблемы и их решения


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

quser

Ошибка​
Возможные причины​
Ошибка 0x00000005, при перечислении имен сессий. Error [5]:Access is denied.
Отсутствуют разрешения у текущего пользователя, используйте runas.exe /netonly для вызова quser.exe от имени другого пользователя имеющего соответствующие привилегии на удаленной машине.

mstsc

Ошибка​
Возможные причины​
Ошибки отсутствуют, но окно mstsc просто исчезает.На удаленном хосте отключено правило файерволла для теневых подключений. Обмен пакетами невозможен на сетевом уровне, т. к. целевая машина отбрасывает все пакеты.
Ошибка теневого подключения: Групповыми политиками требуется согласие пользователя. Проверьте конфигурацию групповых политик.Значение переменной Shadow в реестре не равно 2.
Ошибка теневого подключения: Пользователь или Администратор отклонил запрос.
Не указан ключ /noConsentPrompt в командной строке запуска mstsc. Это подразумевает, что пользователь целевой системы увидел следующий диалог: Запрос удаленного управления: BITSADMIN\Administrator запрашивает просмотр вашего сеанса удаленно. Вы принимаете этот запрос? Да/Нет. Вариант 1: пользователь не ответил на запрос в течение 30 сек. Запрос будет отклонен автоматически. Вариант 2: пользователь нажал кнопку Нет.
Ошибка теневого подключения: Интерфейс на найден.На удаленной машине не запущена служба удаленных рабочих столов (TermService).
Ошибка теневого подключения: Версия Windows запущенная на сервере не поддерживает теневые подключения пользователей
На целевом хосте ОС Windows 8/Server 2012 или более ранняя и она не поддерживает новую реализацию теневых подключений. Попытайтесь использовать утилиту shadow.exe, которая поставлялась с Windows 7/Server 2008 R2 и более ранними версиями.
Доступ запрещенВы неаутентифицированы в системе, запустите mstsc из командной строки, вызванной с необходимыми атрибутами безопасности.

Для дополнительного чтения

Завершая работу над этой статьей я узнал, что аналогичное исследование уже было проведено Романом Максимовым. Наши исследования пересекаются в одних моментах и дополняют друг друга в других. Если вы хотите прочесть больше по этой теме, прочтите этот интереснейший пост в блоге: https://swarm.ptsecurity.com/remote-desktop-services-shadowing/ !



Ссылки
  1. Microsoft Docs: Win32_TSRemoteControlSetting WMI class - RemoteControl method
  2. NoPowerShell (dev)
  3. Microsoft Docs: PromptOnSecureDesktop setting
  4. Microsoft Docs: Win32_TSAccount WMI class
 
Top