Встроенный Remote Desktop Connection (
mstsc.exe)
клиент Windows сохраняет имена (IP адреса) удаленных серверов и пользователей в истории RDP подключений. RDP клиент при следующем запуске выбрать одно из сохраненных подключений и автоматически подставит имя пользователя. Если вы используете общедоступный или недоверенный компьютер, вы можете очистить историю RDP подключений в целях безопасности
В этой статье мы покажем, где в Windows хранится история подключений к удаленным рабочим столам и сохраненные пароли, и каким образом можно эту историю очистить.
Удалить историю RDP подключений в Windows
Windows хранит историю RDP подключений в нескольких местах и для полной очистки истории придется удалить данные отовсюду.
Удалить историю RDP в реестре пользователя
- Откройте редактор реестра
regedit.exe
и перейдите в HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client; - В подразделе Default хранятся записи реестра история о 10 последних RDP подключениях. Имена параметров называются MRU0-MRU9 (MRU – Most Recently Used), в значениях содержатся IP адресов/имен RDP хостов. Выберите все параметры реестра в ветке и удалите;
- Затем разверните ветку Servers. Здесь хранится список всех RDP серверов и сохраненных учетных записей пользователей, использующихся ранее. Имя пользователя содержится в параметре UsernameHint. Это имя автоматически подставляется в окно клиента mstsc.exe при подключении к этому RDP хосту. В параметре CertHash хранится отпечаток RDP сертификата сервера (см. статью о настройке доверенных TLS/SSL сертфикатов для RDP);
- Для очистки очистить истории RDP подключений нужно удалить содержимое ветки реестра Servers. Проще всего просто удалить ветку Servers целиком, а затем пересоздать ее вручную.
Удалить файл Default.rdp
Затем удалите скрытый файл RDP подключения Default.rdp в профиле пользователя
%userprofile%\Documents
. В нем хранится информация о самом последнем RDP подключении.
Просмотр и очистка журналов RDP подключений клиента
При подключении клиент RDP также сохраняет лог в журнал Event Viewer (Applications and Services Logs -> Microsoft -> Windows -> TerminalServices-ClientActiveXCore -> Microsoft-Windows-TerminalServices-RDPClient/Operational).
Чтобы просмотреть список всех исходящий RDP подключений, отфильтруйте событий из Event Viewer с помощью командлета Get-WinEvent:
$properties = @(
@{n='TimeStamp';e={$_.TimeCreated}}
@{n='LocalUser';e={$_.UserID}}
@{n='Target RDP host';e={$_.Properties[1].Value}}
)
Get-WinEvent -FilterHashTable @{LogName='Microsoft-Windows-TerminalServices-RDPClient/Operational';ID='1102'} | Select-Object $properties
Вы можете очистить этот журнал из консоли Event Viewer или с помощью команды:
WevtUtil cl Microsoft-Windows-TerminalServices-RDPClient/Operational
Очистка истории RDP в меню Пуск и таскбаре
Если вы наберете mstsc в поисковой строке Windows, или щелкните правой кнопкой по клиенту в панели задач, вы увидите в списке Recent историю предыдущих RDP подключения. Чтобы очистить историю RDP в меню пуск и списках быстрого перехода (jump lists), очистите списки Resent Items, удалив файлы в каталоге
%AppData%\Microsoft\Windows\Recent\AutomaticDestinations
.
Скрипт очистки истории (логов) RDP подключений
Для быстрой очистки истории RDP подключений в Windows вы можете воспользоваться готовым BAT скриптом:
@echo off
reg delete "HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Default" /va /f
reg delete "HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers" /f
reg add "HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers"
attrib -s -h %userprofile%\documents\Default.rdp
del %userprofile%\documents\Default.rdp
del /f /s /q /a %AppData%\Microsoft\Windows\Recent\AutomaticDestinations
Аналогичный PowerShell скрипт для удаления всех записей в истории RDP подключений:
Get-ChildItem "HKCU:\Software\Microsoft\Terminal Server Client" -Recurse | Remove-ItemProperty -Name UsernameHint -Ea 0
Remove-Item -Path 'HKCU:\Software\Microsoft\Terminal Server Client\servers' -Recurse 2>&1 | Out-Null
Remove-ItemProperty -Path 'HKCU:\Software\Microsoft\Terminal Server Client\Default' 'MR*' 2>&1 | Out-Null
$docsfoldes = [environment]::getfolderpath("mydocuments") + '\Default.rdp'
remove-item $docsfoldes -Force 2>&1 | Out-Null
Очистка Bitmap кэша клиента RDP
Клиент Remote Desktop Connection по умолчанию сохраняет редко изменяющиеся области удалённого рабочего стола в виде кэша растровых изображений (persistent bitmap caching). Благодаря кэшу клиента RDP позволяет существенно уменьшить трафик, передаваемый через сеть.
Кэш RDP клиента хранится в файлах *.bmc и *.bin в каталоге
%LOCALAPPDATA%\Microsoft\Terminal Server Client\Cache
:
В кэше RDP хранятся сырые растровые изображения RDP экрана в виде плиток 64×64 пикселя. С помощью простых PowerShell или Python скриптов (ищутся по запросу RDP Cached Bitmap Extractor) можно собрать из PNG файлов кэша большие области удаленого рабочего стола.
В целях безопасности рекомендует очистить папку RDP кэша и запретить RDP клиенту сохранять изображение экрана в кэш. Отключите опцию Persistent bitmap caching (Постоянное кэширование точечных рисунков) на вкладке Experience в клиенте.
Как запретить Windows сохранять историю RDP подключений?
Если вы хотите, чтобы Windows не сохраняла историю RDP подключений, нужно запретить запись в ветку реестра HKCU\Software\Microsoft\Terminal Server Client. Сначала отключите наследование разрешений на ветке (Permissions -> Advanced -> Disable inheritance). Затем измените ACL на ветку, выставив Deny галочку для всех пользователей, администраторов и даже SYSTEM. (но, вы должны понимать, что это уже unsupported configuration…).
Удаление сохраненных RDP паролей
Клиент RDP позволяет сохранять пароль пользователя для подключений во встроенный диспетчер учетных данных Windows (Credential Manager) и автоматически подключаться к удаленному хосту без ввода пароля.
Вы можете удалить сохраненные пароля для RDP из окна Credential Manager (выполните команду
rundll32.exe keymgr.dll,KRShowKeyMgr
) и удалите все записи с префиксом
TERMSRV\
.
Или вы можете очистить сохраненные учетные данные для RDP с помощью команды:
For /F "tokens=1,2 delims= " %G in ('cmdkey /list ^| findstr "target=TERMSRV"') do cmdkey /delete %H