Built-in Windows Remote Desktop Connection (RDP) Client (mstsc.exe) จะบันทึกชื่อคอมพิวเตอร์ระยะไกล (หรือ IP Address) และ Username ที่ใช้ Login หลังจากการเชื่อมต่อสำเร็จทุกครั้ง ตอนเริ่มต้นครั้งต่อไป RDP Client จะเสนอให้ผู้ใช้เลือกจากรายการการเชื่อมต่อที่เคยใช้มาก่อน ผู้ใช้สามารถเลือกชื่อ RDS/RDP Host จากรายการ และ Client จะกรอก Username ที่เคยใช้ Login ให้อัตโนมัติ

เรื่องนี้สะดวกจากมุมมอง End-user แต่ไม่ปลอดภัยจากมุมมอง Security โดยเฉพาะเมื่อคุณเชื่อมต่อกับ RDP Server จากคอมพิวเตอร์สาธารณะหรือที่ไม่น่าเชื่อถือ
ข้อมูลเกี่ยวกับ Session RDP (Terminal) ทั้งหมดถูกเก็บแยกต่างหากใน Registry Hive ของแต่ละ User คือ Non-admin จะไม่สามารถดูประวัติการเชื่อมต่อ RDP ของ User อื่นได้
ในบทความนี้จะแสดงว่า Windows เก็บประวัติและ Credentials ที่บันทึกไว้ของ Remote Desktop Connections ที่ไหน วิธีลบรายการจากหน้าต่าง mstsc และล้าง RDP Logs
วิธีล้าง RDP Connection Cache จาก Registry
ข้อมูลเกี่ยวกับการเชื่อมต่อ RDP ทั้งหมดถูกเก็บใน Registry ของแต่ละ User ไม่สามารถลบคอมพิวเตอร์ (หรือหลายตัว) ออกจากรายการประวัติการเชื่อมต่อ RDP ด้วย Built-in Tools ของ Windows ต้องล้าง Registry Key ด้วยตนเอง
- รัน Registry Editor (
regedit.exe) ไปที่ Registry Key HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client - ต้องใช้ 2 Registry Keys ใน Section นี้: Default (เก็บประวัติ 10 การเชื่อมต่อ RDP ล่าสุด) และ Servers (มีรายการ RDP Servers ทั้งหมดและ Username ที่เคยใช้ Login)

- ขยาย Registry Key HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Default ซึ่งมีรายการ 10 IP Address หรือ DNS Name ของ Remote Computer ที่ใช้ gầnล่าสุด (MRU – Most Recently Used) ชื่อ (หรือ IP) ของ Remote Desktop Server จะเก็บอยู่ใน Value ของ Parameter MRU* เพื่อล้างประวัติการเชื่อมต่อ RDP ล่าสุด ให้ Select Parameters ทั้งหมดที่ชื่อ MRU0-MRU9 คลิกขวาเลือก Delete

- ขยาย Key HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers มีรายการ RDP Connections ทั้งหมดที่ User นี้เคยสร้าง ขยาย Reg Key ที่มีชื่อ (หรือ IP) ของ Host ใด Host หนึ่ง สังเกต Value ของ Parameter UsernameHint แสดง Username ที่ใช้เชื่อมต่อกับ RDP/RDS Host Username นี้จะถูกใช้เชื่อมต่ออัตโนมัติ นอกจากนี้ ตัวแปร CertHash มี Thumbprint ของ SSL Certificate ของ RDP Server (ดูบทความ "Configuring trusted TLS/SSL certificates for RDP")

- เพื่อล้างประวัติการเชื่อมต่อ RDP ทั้งหมดและ Username ที่บันทึกไว้ ต้องล้างเนื้อหาของ Servers Registry Key เนื่องจากไม่สามารถ Select Nested Registry Keys ทั้งหมดพร้อมกันได้ จึงง่ายกว่าที่จะลบ Key Servers ทั้งหมด แล้วสร้างใหม่ด้วยตนเอง

- ลบไฟล์ RDP Connection เริ่มต้น (ซึ่งมีข้อมูล Session RDP ล่าสุด) – Default.rdp (ไฟล์ Hidden อยู่ใน Directory Documents)
- Windows ยังบันทึก Recent Remote Desktop Connections ไว้ใน Jump Lists หากพิมพ์
mstscในกล่อง Search ของ Windows 10 การเชื่อมต่อ RDP ที่เคยใช้จะปรากฏในรายการ สามารถปิดการติดตาม Recent Files และ Locations ใน Jump List ได้โดย Registry DWORD Parameter Start_TrackDocs ใน Reg KeyHKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced(ตั้งค่าเป็น 0) หรือล้าง Recent Items Lists โดยลบไฟล์ใน Directory%AppData%\Microsoft\Windows\Recent\AutomaticDestinations

หมายเหตุ วิธีการล้างประวัติการเชื่อมต่อ Remote Desktop ที่อธิบายข้างต้นใช้ได้กับ Windows Desktop ทุกรุ่น (Windows XP ถึง Windows 10) และ Windows Server
สคริปต์ล้างประวัติการเชื่อมต่อ RDP
ข้างต้นแสดงวิธีล้างประวัติ RDP ด้วยตนเอง แต่การทำด้วยตนเอง (โดยเฉพาะบนหลายคอมพิวเตอร์) ใช้เวลานาน ดังนั้นนำเสนอ Script ขนาดเล็ก (BAT File) ที่ช่วยล้างประวัติ RDP อัตโนมัติ
เพื่อทำให้การล้างประวัติ RDP เป็นอัตโนมัติ สามารถวาง Script นี้ไว้ใน Windows Startup หรือรันบนคอมพิวเตอร์ User ผ่าน GPO Logoff Script
@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
การทำงานของ Script:
- ปิดการแสดงข้อมูลบน Console
- ลบ Parameters ทั้งหมดใน Registry Key HKCU\Software\Microsoft\Terminal Server Client\Default (ล้างรายการ RDP ล่าสุด)
- ลบ Reg Key HKCU\Software\Microsoft\Terminal Server Client\Servers ทั้งหมด (ล้างรายการ RDP ทั้งหมดและ Username ที่บันทึก)
- สร้าง Registry Key ที่ลบไปใหม่
- เปลี่ยน Attribute ของไฟล์ Default.rdp ใน Profile Directory ของ User ปัจจุบัน (Default เป็น Hidden และ System)
- ลบไฟล์ Default.rdp
- ล้างรายการ Remote Desktop Connection จาก Jump List Recent Items
นอกจากนี้ ยังสามารถล้างประวัติ RDP ได้ด้วย PowerShell Script:
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
$docs = [environment]::getfolderpath("mydocuments") + '\Default.rdp'
remove-item $docs -Force 2>&1 | Out-Null
หมายเหตุ ฟีเจอร์ล้างประวัติ RDP นี้ Built-in อยู่ใน System/Registry Cleaners หลายตัว เช่น CCleaner ฯลฯ
วิธีป้องกันไม่ให้ Windows บันทึกประวัติการเชื่อมต่อ RDP
หากคุณ ไม่ต้องการ ให้ Windows บันทึกประวัติการเชื่อมต่อ RDP ต้องปฏิเสธการเขียนใน Registry Key HKCU\Software\Microsoft\Terminal Server Client สำหรับ User Accounts ทั้งหมด ก่อนอื่น Disable Permission Inheritance บน Reg Key ที่ระบุ (Permissions -> Advanced -> Disable inheritance) จากนั้นเปลี่ยน Registry Key ACL โดยติ๊กตัวเลือก Deny สำหรับ Users (แต่ต้องเข้าใจว่านี่เป็น Unsupported Configuration)

ผลคือ mstsc.exe จะไม่สามารถเขียนข้อมูล RDP Connection ลง Registry ได้
วิธีล้าง Remote Desktop Bitmap Cache
RDP Client มีฟีเจอร์ Persistent Bitmap Caching RDP Client บันทึกส่วนของ Remote Screen ที่เปลี่ยนแปลงน้อยเป็น Raster Image Cache ขอบคุณฟีเจอร์นี้ mstsc.exe โหลดส่วนของหน้าจอที่ไม่เปลี่ยนแปลงจาก Local Drive Cache แทน ทำให้ลดปริมาณข้อมูลที่ส่งผ่านเครือข่าย
RDP Cache เป็น 2 ประเภทไฟล์ใน Directory %LOCALAPPDATA%\Microsoft\Terminal Server Client\Cache:
- *.bmc
- *.bin

ไฟล์เหล่านี้เก็บ Raw RDP Screen Bitmaps เป็น Tiles ขนาด 64x64 Pixel ด้วย PowerShell หรือ Python Scripts ง่ายๆ (ค้นหาโดย Query RDP Cached Bitmap Extractor) สามารถได้ไฟล์ PNG ที่มีชิ้นส่วนของ Remote Desktop Screen และนำไปใช้ดึงข้อมูลลับได้ ขนาด Tile เล็ก แต่เพียงพอที่จะให้ข้อมูลที่มีประโยชน์แก่ผู้ที่ศึกษา RDP Cache

สามารถป้องกันไม่ให้ RDP Client เก็บ Cache รูปภาพหน้าจอ Remote Desktop ได้โดยปิดตัวเลือก Persistent bitmap caching บนแท็บ Advanced

บางครั้งการใช้ RDP Cache อาจเสียหาย:
Bitmap Disk Cache Failure. Your disk is full or the cache directory is missing or corrupted. Some bitmaps may not appear.
ในกรณีนี้ ต้องล้าง RDP Cache Directory หรือปิด Bitmap Caching Option
การล้าง Saved RDP Credentials
หากตอนสร้างการเชื่อมต่อ RDP ใหม่ ก่อนกรอกรหัสผ่าน User ติ๊กเลือก Remember Me Username และ Password จะถูกบันทึกใน Windows Credential Manager ครั้งต่อไปที่เชื่อมต่อกับคอมพิวเตอร์เดียวกัน RDP Client จะใช้ Password ที่บันทึกไว้ก่อนหน้านี้สำหรับ Authentication บน Remote Host อัตโนมัติ

สามารถลบ Saved RDP Password ได้โดยตรงจากหน้าต่าง mstsc.exe เลือก Connection เดียวกันจากรายการ และคลิกปุ่ม Delete ยืนยันการลบ Credentials ที่บันทึก

อีกวิธีคือลบ Saved RDP Password จาก Windows Credential Manager โดยตรง ไปที่ Control Panel\User Accounts\Credential Manager เลือก Manage Windows Credentials ในรายการ Saved Passwords หาชื่อคอมพิวเตอร์ (รูปแบบ TERMSRV/192.168.1.100) ขยายรายการที่พบ และคลิกปุ่ม Remove

ในสภาพแวดล้อม Active Directory Domain สามารถปิดการบันทึก Password สำหรับ RDP Connections ได้โดยใช้ GPO เฉพาะ – Network access: Do not allow storage of passwords and credentials for network authentication (ดูบทความเกี่ยวข้อง)
การลบ Event Logs ที่เกี่ยวกับ RDP บน Remote Host
Connection Logs ยังถูกเก็บฝั่ง RDP/RDS Host ด้วย สามารถหาข้อมูลประวัติการเชื่อมต่อ RDP ใน Event Viewer Logs:
- Security
- Applications and Services Logs -> Microsoft -> Windows -> TerminalServices-RemoteConnectionManager -> Operational
- TerminalServices-LocalSessionManager -> Admin

อ่านเพิ่มเติมเกี่ยวกับการวิเคราะห์ RDP Connection Logs ในบทความลิงก์
สามารถล้าง Event Logs บน RDP Server ได้โดยใช้ wevtutil หรือ PowerShell