MAIN MENU
Blog de Devolutions

Anuncios, actualizaciones y análisis de Devolutions.

Using RDP without leaving traces rdm remote desktop manager adventures cto

Uso de RDP sin dejar rastro: el modo público de MSTSC

La opción de línea de comandos `/public` en MSTSC activa el "modo público", que impide que RDP almacene credenciales, detalles de sesión e imágenes en caché. Este artículo analiza su impacto en la seguridad y el análisis forense.

¿Se ha preguntado alguna vez qué hace realmente la opción de línea de comandos “/public” en MSTSC? Activa el “modo público” en el cliente RDP, una función algo similar al “modo incógnito” de los navegadores web. Está pensada para usarse en un ordenador “público” o “compartido”, donde los usuarios quieren evitar que las credenciales, los detalles de sesión y las imágenes en caché se almacenen localmente.

Para los analistas forenses, los rastros que deja un atacante malicioso al usar MSTSC en un sistema comprometido pueden ser una mina de oro de información. A continuación, una lista de todas las funciones afectadas por el modo público de RDP:

Configuración de conexión

¿Sabía que mstsc guarda la configuración de conexión en el fichero oculto Default.rdp? Con el modo público activado, mstsc no le permitirá guardar modificaciones en la configuración de conexión en dicho fichero:

!!Mstsc public mode rdm devolutions blog remote desktop manager

La forma más sencilla de editarlo manualmente es abrir Notepad desde la línea de comandos: notepad "~\Documents\Default.rdp".

Almacenamiento en caché de credenciales

El Administrador de credenciales de Windows es utilizado por mstsc para guardar credenciales localmente y reutilizarlas en nuevas conexiones al mismo servidor. El modo público desactiva el uso de credenciales en caché, de modo que se le solicitarán las credenciales incluso si están disponibles localmente:

!!Mstsc public mode rdm devolutions blog remote desktop manager

Las credenciales guardadas usan el prefijo “TERMSRV/” y pueden listarse con este comando:

cmdkey /list | ? { $_ -Match "TERMSRV/" } | % { $_ -Replace ".*: " }

El modo público también impide que el usuario guarde credenciales en el aviso de inicio de sesión:

!!Mstsc public mode rdm devolutions blog remote desktop manager enter credentials

Almacenamiento en caché de mapas de bits persistente

El rastro más notable que deja mstsc es la caché de mapas de bits persistente. En RDP, el servidor divide la imagen del escritorio en fragmentos de mapa de bits y los almacena en caché en el cliente. Cuando un fragmento se repite, el servidor indica al cliente que reutilice la versión en caché en lugar de reenviarlo. Sin embargo, el almacenamiento en caché solo mejora el rendimiento después de que el cliente haya guardado suficientes fragmentos. Para acelerar las nuevas conexiones, la caché de mapas de bits persistente permite conservar los mapas de bits entre sesiones.

Aunque el modo público desactiva esta función, también puede desactivarse por separado usando BitmapCachePersistEnable:i:0 en el fichero .RDP. La caché de mapas de bits persistente almacena ficheros (bcache24.bmc, Cache0000.bin, Cache0001.bin, etc.) en %LOCALAPPDATA%\Microsoft\Terminal Server Client\Cache. Aunque el formato de la caché no está documentado, puede usar BMC-Tools para extraer su contenido de mapas de bits:

git clone <https://github.com/ANSSI-FR/bmc-tools> && cd bmc-tools
python .\bmc-tools.py -s "$Env:LocalAppData\Microsoft\Terminal Server Client\Cache" -d .

Después podrá examinar miles de fragmentos de mapas de bits de sesiones de escritorio remoto anteriores:

!!Mstsc public mode rdm devolutions blog remote desktop manager

Tenga en cuenta que la caché de mapas de bits no es un método de grabación fiable; es como intentar reconstruir documentos triturados rebuscando en el cubo de reciclaje. Aun así, puede seguir siendo una mina de información.

Servidores usados recientemente

El cliente RDP de Microsoft recuerda hasta los 10 servidores usados más recientemente (MRU, por sus siglas en inglés), lo que facilita seleccionar un servidor desde el menú desplegable sin tener que volver a escribirlo:

!!Mstsc public mode rdm devolutions blog remote desktop manager

El modo público desactiva la actualización de esa lista de servidores, que se almacena en el registro:

[HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Default]
"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"

Dicho de otro modo, seguirá viendo la lista desplegable con el modo público activado, pero mstsc no la actualizará con los nuevos servidores a los que se conecte.

Sugerencias de nombre de usuario por servidor

Para agilizar el proceso en el aviso de inicio de sesión, mstsc recuerda el último nombre de usuario utilizado para conectarse a un servidor determinado y lo preselecciona automáticamente:

!!Mstsc public mode rdm devolutions blog remote desktop manager

Esta información se almacena en el registro en HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers\Server\UsernameHint, de este modo:

[HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers\10.10.0.25]
"UsernameHint"="Administrator@ad.it-help.ninja"

Además de revelar el nombre de usuario, esta clave del registro también revela los servidores a los que se ha conectado. De nuevo, el modo público impide que esta información se use y se almacene.

Excepciones de certificado de servidor

No hay ni un solo administrador de TI en el universo que no esté familiarizado con el cuadro de diálogo de advertencia amarillo de certificado de MSTSC. Sí, es posible implementar certificados adecuados para RDP, pero seamos sinceros: todos hemos usado alguna vez esa casilla “No volver a preguntarme para conexiones a este equipo”:

!!Mstsc public mode rdm devolutions blog remote desktop manager

Como habrá imaginado, el modo público de RDP desactiva las excepciones de certificado de servidor, ya que se guardan en el registro en HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers\Server\CertHash, de este modo:

[HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Servers\10.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,\
  31,08,9d,63,f7,4b,e7,c4,3b,77,f2

El hash del certificado en sí no es muy útil, pero como se almacena por nombre de servidor, deja constancia de los servidores a los que se ha conectado.

Excepciones de autenticación de servidor

El nivel de autenticación del servidor en RDP es un poco más difícil de entender: el servidor puede autenticarse mediante su certificado, Kerberos, o ambos. Para ver cómo afecta el modo público a la autenticación del servidor, asegúrese de que la autenticación del servidor esté configurada para avisarle si dicha autenticación falla. Otra opción es modificar su fichero .RDP con authentication level:i:2:

!!Mstsc public mode rdm devolutions blog remote desktop manager

Al conectarse a un servidor no fiable (cuando ni la validación de certificado ni la validación de Kerberos pueden usarse para autenticar el servidor), debería ver este cuadro de diálogo de advertencia de seguridad:

!!Mstsc public mode rdm devolutions blog remote desktop manager

Observe cómo el modo público desactiva la casilla “No volver a preguntarme para conexiones a este equipo”, pero también desactiva el uso de credenciales guardadas. Si añade una excepción de seguridad para un servidor, se almacenará en HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\LocalDevices, de este modo:

[HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\LocalDevices]
"10.10.0.25"=dword:0000004d

El nombre del servidor de destino queda almacenado, así que, de nuevo, puede usarse para averiguar a qué servidores se ha conectado. En cuanto al valor DWORD asociado, este cambia en función de los recursos o dispositivos locales que haya autorizado para la conexión (unidades, portapapeles, impresora, etc.).

Limpieza

El modo público de RDP es estupendo, pero ¿qué pasa si no lo usó antes y quiere restablecer mstsc a un estado limpio? A continuación, un fragmento de código de PowerShell para eliminar todos los rastros locales dejados atrás (credenciales guardadas, caché de mapas de bits persistente y claves del registro):

cmdkey /list | ? { $_ -Match "TERMSRV/" } | % { $_ -Replace ".*: " } | % { cmdkey /delete:$_ }
Remove-Item -Path "$Env:LocalAppData\Microsoft\Terminal Server Client\Cache" -Recurse -ErrorAction SilentlyContinue
Remove-Item -Path "$Env:LocalAppData\Microsoft\Terminal Server Client\Cache" -Recurse -ErrorAction SilentlyContinue
Remove-Item -Path "HKCU:\Software\Microsoft\Terminal Server Client\Default" -Force -ErrorAction SilentlyContinue
Remove-Item -Path "HKCU:\Software\Microsoft\Terminal Server Client\Servers" -Recurse -Force -ErrorAction SilentlyContinue
Remove-Item -Path "HKCU:\Software\Microsoft\Terminal Server Client\LocalDevices" -Recurse -Force -ErrorAction SilentlyContinue

Usar el modo público de RDP puede ser útil para solucionar problemas extraños, causados a menudo por credenciales guardadas y sugerencias de nombre de usuario residuales. Aunque es poco frecuente, una caché de mapas de bits persistente corrupta puede provocar fallos visuales en RDP. Recomiendo probar el modo público cuando no tenga idea de cuál podría ser el problema, ya que podría estar relacionado con alguna de las funciones mencionadas anteriormente.

Más de Noticias

Leer más artículos