您是否想知道 MSTSC 中的“/public”命令行选项实际上有什么作用?它在 RDP 客户端中启用“公共模式”,该功能有点类似于 Web 浏览器中的“隐身模式”。此功能旨在用于“公共”或“共享”计算机,用户可能希望阻止凭据、会话详细信息和缓存图像在本地存储。
对于取证分析师来说,恶意攻击者在受感染系统上使用 MSTSC 留下的痕迹可能是信息金矿。以下是受 RDP 公共模式影响的所有功能的列表:
连接设置
您是否知道 mstsc 将连接设置保存到隐藏的 Default.rdp 文件中?启用公共模式后,mstsc 将不允许您将对连接设置的修改保存到该文件:
手动编辑它的最简单方法是从命令行启动记事本:notepad "~DocumentsDefault.rdp"。
凭证缓存
mstsc 使用 Windows 凭据管理器在本地保存凭据,以便在与同一服务器建立新连接时重复使用。公共模式禁用缓存凭据,因此即使本地有凭据,系统也会提示您输入凭据:
已保存的凭据使用“TERMSRV/”前缀,可以使用以下命令列出:
cmdkey /list | ? { $_ -Match "TERMSRV/" } | % { $_ -Replace ".*: " }
持久位图缓存
mstsc 留下的最值得注意的产物是持久位图缓存。在 RDP 中,服务器将桌面图像分解为位图片段,并将它们缓存在客户端上。当某个片段重复出现时,服务器会指示客户端重新使用缓存的版本,而不是重新发送。但是,只有在客户端存储了足够多的片段后,缓存才能提高性能。为了加快新连接的速度,持久位图缓存允许在会话之间保留位图。
虽然公共模式禁用此功能,但也可以使用BitmapCachePersistEnable:i:0.RDP 文件中的 单独禁用它。持久位图缓存将文件(bcache24.bmc、Cache0000.bin、Cache0001.bin 等)存储在 下%LOCALAPPDATA%MicrosoftTerminal Server ClientCache。虽然没有记录缓存格式,但您可以使用 BMC-Tools 提取其位图内容:
git clone <https://github.com/ANSSI-FR/bmc-tools> && cd bmc-toolspython .bmc-tools.py -s "$Env:LocalAppDataMicrosoftTerminal Server ClientCache" -d .
然后,您可以浏览以前远程桌面会话中的数千个位图片段:
请记住,位图缓存不是一种可靠的记录方法 - 它就像试图通过翻找回收站来重建碎纸文件一样。话虽如此,它仍然可以成为信息的宝库。
最近使用的服务器
Microsoft RDP 客户端可记住最多 10 个最近使用的 (MRU) 服务器,因此可以轻松地从下拉列表中选择服务器,而无需再次输入所有内容:
公共模式禁止更新存储在注册表中的服务器列表:
[HKEY_CURRENT_USERSoftwareMicrosoftTerminal Server ClientDefault]"MRU0"="10.10.0.25""MRU1"="IT-HELP-TEST.ad.it-help.ninja""MRU2"="IT-HELP-DVLS.ad.it-help.ninja""MRU3"="IT-HELP-WAC.ad.it-help.ninja""MRU4"="IT-HELP-GW.ad.it-help.ninja"
换句话说,您仍然会看到具有公共模式的下拉列表,但 mstsc 不会使用您连接到的新服务器来更新它。
服务器用户名提示
为了加快登录提示的速度,mstsc 会记住用于连接给定服务器的最后一个用户名并为您预先选择它:
[HKEY_CURRENT_USERSoftwareMicrosoftTerminal Server ClientServers10.10.0.25]"UsernameHint"="[email protected]""UsernameHint"="[email protected]"
除了显示用户名之外,此注册表项还会显示您已连接的服务器。同样,公开模式可防止使用和存储此信息。
服务器证书例外
世界上没有一位 IT 管理员不熟悉 MSTSC 的黄色证书警告对话框。是的,可以为 RDP 部署适当的证书,但说实话:我们都至少使用过一次“不要再询问我是否连接到此计算机复选框”:
[HKEY_CURRENT_USERSoftwareMicrosoftTerminal Server ClientServers10.10.0.25]"CertHash"=hex:13,fe,21,42,92,fc,6a,9d,ac,ea,a0,3d,b5,9b,59,c8,90,6f,37,b9,cc,"CertHash"=hex:13,fe,21,42,92,fc,6a,9d,ac,ea,a0,3d,b5,9b,59,c8,90,6f,37,b9,cc,31,08,9d,63,f7,4b,e7,c4,3b,77,f2
证书哈希本身并不是很有用,但由于它是按服务器名称存储的,因此它会留下您所连接过的服务器的痕迹。
服务器身份验证异常
RDP 中的服务器身份验证级别有点难以理解:服务器可以通过其证书、Kerberos 或两者进行身份验证。要了解公共模式如何影响服务器身份验证,请确保服务器身份验证设置为在服务器身份验证失败时发出警告。或者,使用以下命令修改 .RDP 文件authentication level:i:2:
请注意,公共模式如何禁用“不再询问我是否连接到此计算机”复选框,但也禁用已保存的凭据使用。如果您为服务器添加安全例外,它将存储在下HKEY_CURRENT_USERSoftwareMicrosoftTerminal Server ClientLocalDevices,如下所示:
[HKEY_CURRENT_USERSoftwareMicrosoftTerminal Server ClientLocalDevices]"10.10.0.25"=dword:0000004d"10.10.0.25"=dword:0000004d
目标服务器名称已存储,因此,它同样可用于查找您已连接的服务器。至于关联的 DWORD 值,它会根据您授权连接的本地资源或设备(驱动器、剪贴板、打印机等)而变化。
清理
RDP 公共模式很棒,但如果你以前没有使用过它,并且想要在干净的状态下重置 mstsc,该怎么办?以下是 PowerShell 代码片段,用于清除遗留的所有本地工件(已保存的凭据、持久位图缓存和注册表项):
cmdkey /list | ? { $_ -Match "TERMSRV/" } | % { $_ -Replace ".*: " } | % { cmdkey /delete:$_ }Remove-Item -Path "$Env:LocalAppDataMicrosoftTerminal Server ClientCache" -Recurse -ErrorAction SilentlyContinueRemove-Item -Path "$Env:LocalAppDataMicrosoftTerminal Server ClientCache" -Recurse -ErrorAction SilentlyContinueRemove-Item -Path "HKCU:SoftwareMicrosoftTerminal Server ClientDefault" -Force -ErrorAction SilentlyContinueRemove-Item -Path "HKCU:SoftwareMicrosoftTerminal Server ClientServers" -Recurse -Force -ErrorAction SilentlyContinueRemove-Item -Path "HKCU:SoftwareMicrosoftTerminal Server ClientLocalDevices" -Recurse -Force -ErrorAction SilentlyContinue
使用 RDP 公共模式可以解决奇怪的问题,这些问题通常是由剩余保存的凭据和用户名提示引起的。虽然这种情况很少见,但损坏的持久位图缓存可能会导致 RDP 出现视觉故障。我建议在不知道问题可能是什么时尝试公共模式,但它可能与上面列出的功能之一有关。
原文始发于微信公众号(Ots安全):不留痕迹地使用 RDP:MSTSC 公共模式
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论