Seguimiento y análisis de registros de actividad de escritorio remoto en Windows

En este artículo, consideraremos las características de auditar y analizar los registros de conexión RDP en Windows. Como regla general, los métodos descritos pueden ser útiles al investigar la actividad relacionada con RDP en servidores RDS (terminal) Windows en tareas forenses, cuando un administrador del sistema debe proporcionar la información sobre qué usuarios iniciaron sesión en el servidor RDS, cuando un usuario RDP específico autenticado y finalizado la sesión, desde qué dispositivo (un nombre o dirección IP) se conectó un usuario. Creo que esta información será útil tanto para los administradores de granjas corporativas RDS como para los propietarios de servidores RDP separados que se publican en Internet (los VPS de Windows siguen siendo bastante populares).

El artículo es aplicable al analizar los registros de RDP tanto en Windows Server 2008 R2, 2012 / R2, 2016 como en las ediciones de escritorio de Windows (Windows 10, 8.1 y 7).

Puede verificar los registros de conexión RDP usando el Visor de eventos de Windows (eventvwr.msc). Los registros de Windows contienen una gran cantidad de datos y es bastante difícil encontrar el evento que necesita. Cuando un usuario se conecta de forma remota al escritorio remoto de RDS (RDP), aparece una gran cantidad de eventos en el Visor de eventos de Windows. Hay varios registros diferentes donde puede encontrar la información sobre las conexiones de Escritorio remoto. Veremos los registros y eventos en las etapas principales de una conexión RDP que pueden ser de interés para el administrador:

  1. Conexión de red;
  2. Autenticación;
  3. Iniciar sesión;
  4. Desconexión / Reconexión de Sesión;
  5. Desconectarse.

Conexión de red es el establecimiento de una conexión de red a un servidor desde un cliente RDP de usuario. Es el evento con EventID 1149 (Remote Desktop Services: User authentication succeeded). Si se encuentra este evento, no significa que la autenticación del usuario se haya realizado correctamente. Este registro se encuentra en «Registros de aplicaciones y servicios -> Microsoft -> Windows -> Terminal-Services-RemoteConnectionManager > Operacional ”. Habilite el filtro de registro para este evento (haga clic con el botón derecho en el registro -> Filtrar registro actual -> EventId 1149).

registro de eventos de Windows Terminal-Services-RemoteConnectionManager filtrado

Luego, obtendrá una lista de eventos con el historial de todas las conexiones RDP a este servidor. Como puede ver, los registros proporcionan un nombre de usuario, un dominio (en este caso, se usa la Autenticación de nivel de red; si NLA está deshabilitado, el texto del evento se ve de manera diferente) y la dirección IP de la computadora, desde la cual se ha realizado la conexión RDP. iniciado.

EventID 1149 - Servicios de escritorio remoto: la autenticación de usuario se realizó correctamente

Autenticación muestra si un usuario de RDP se ha autenticado correctamente en el servidor o no. El registro se encuentra en «Windows -> Seguridad». Por lo que puede estar interesado en los eventos con EventID 4624 (An account was successfully logged on) o 4625 (An account failed to log on). Por favor, preste atención al valor de LogonType en la descripción del evento. Si se ha utilizado el servicio Escritorio remoto para crear una nueva sesión durante el inicio de sesión, LogonType = 10. Si el LogonType = 7, significa que un usuario se ha vuelto a conectar a la sesión RDP existente.

registro de seguridad: evento de inicio de sesión rdp con el nombre de usuario y la dirección IP del cliente remoto

Al mismo tiempo, puede encontrar un nombre de usuario en la descripción del evento en el Nombre de la cuenta campo, un nombre de computadora – en Nombre de la estación de trabajoy una dirección IP, en Dirección de red de origen.

Por favor, tenga en cuenta el valor de la TargetLogonID fiedl. Es una identificación única de la sesión RDP de un usuario que ayuda a realizar un seguimiento de la actividad adicional del usuario. Sin embargo, si se desconecta una sesión RDP y un usuario se vuelve a conectar, se le asignará un nuevo TargetLogonID (aunque una sesión RDP sigue siendo la misma).

Puede obtener la lista de eventos relacionados con la autenticación RDP exitosa (EventID 4624) usando este comando de PowerShell:

Get-EventLog security -after (Get-date -hour 0 -minute 0 -second 0) | ?{$_.eventid -eq 4624 -and $_.Message -match 'logon type:s+(10)s'} | Out-GridView

enumerar el evento de autenticación de rdp exitoso con un EventID 4624

Iniciar sesión se refiere a un inicio de sesión de RDP en el sistema, un evento que aparece después de que un usuario se ha autenticado correctamente. Es un evento con EventID 21 (Remote Desktop Services: Session logon succeeded). Estos eventos se encuentran en los «Registros de aplicaciones y servicios -> Microsoft -> Windows -> TerminalServices-LocalSessionManager -> Operacional ”. Como puede ver, aquí puede encontrar el ID de una sesión RDP de usuario: ID de sesión.

EventID 21 - Servicios de escritorio remoto: el inicio de sesión se realizó correctamente

El evento con EventID – 21 (Remote Desktop Services: Shell start notification received) significa que el shell del Explorador se ha iniciado correctamente (el escritorio aparece en la sesión RDP del usuario).

Desconexión / reconexión de sesión – los eventos de desconexión / reconexión de la sesión tienen diferentes ID según la causa de la desconexión del usuario (desconexión por inactividad, la opción Desconectar ha sido seleccionada por el usuario en la sesión, la sesión RDP finalizada por otro usuario o un administrador, etc.). Puede encontrar estos eventos en los registros ubicados en “Registros de aplicaciones y servicios -> Microsoft -> Windows -> TerminalServices-LocalSessionManager -> Operational”. Consideremos los eventos de RDP más interesantes:

  • EventID – 24 (Remote Desktop Services: Session has been disconnected) – un usuario se ha desconectado de la sesión RDP;
  • EventID – 25 (Remote Desktop Services: Session reconnection succeeded) – un usuario se ha vuelto a conectar a la sesión RDP existente en el servidor;
  • EventID – 39 (Session <A> has been disconnected by session <B>): Un usuario se ha desconectado de la sesión RDP seleccionando la opción de menú correspondiente (en lugar de simplemente cerrar la ventana del cliente RDP). Si los ID de sesión son diferentes, un usuario ha sido desconectado por otro usuario (o un administrador);
  • EventID – 40 (Session <A> has been disconnected, reason code <B>). Aquí debe ver el código de motivo de desconexión en la descripción del evento. Por ejemplo:
    • código de razón 0 (No additional information is available) normalmente significa que un usuario acaba de cerrar la ventana del cliente RDP;
    • código de razón 5 (The client’s connection was replaced by another connection) significa que un usuario se ha vuelto a conectar a la sesión RDP anterior;
    • código de razón 11 (User activity has initiated the disconnect) significa que un usuario ha hecho clic en el botón Desconectar en el menú de inicio.

El evento con EventID 4778 en Windows -> Registro de seguridad (se reconectó una sesión a una estación de Windows). Un usuario se ha vuelto a conectar a una sesión RDP (a un usuario se le asigna un nuevo ID de inicio de sesión).

El evento con EventID 4799 en el registro «Windows -> Seguridad» (A session was disconnected from a Window Station). Se ha desconectado a un usuario de una sesión RDP.

Desconectarse se refiere al cierre de sesión del usuario del sistema. Se registra como el evento con EventID 23 (Remote Desktop Services: Session logoff succeeded) en “Registros de aplicaciones y servicios -> Microsoft -> Windows -> TerminalServices-LocalSessionManager -> Operational”.

EventID 23 - Servicios de escritorio remoto: cierre de sesión exitoso

Al mismo tiempo, el evento con EventID 4634 (An account was logged off) aparece en el registro de seguridad.

El evento con EventID 9009 (The Desktop Window Manager has exited with code <X>) en el registro del sistema significa que un usuario ha iniciado el cierre de sesión de la sesión RDP con la ventana y el shell gráfico del usuario han finalizado.

Aquí hay un breve script de PowerShell que enumera el historial de todas las conexiones RDP para el día actual desde los registros del servidor RDS del terminal. La tabla resultante muestra el tiempo de conexión, la dirección IP del cliente y el nombre de usuario remoto (si es necesario, puede incluir otros LogonTypes en el informe).

Get-EventLog -LogName Security -after (Get-date -hour 0 -minute 0 -second 0)| ?{(4624,4778) -contains $_.EventID -and $_.Message -match 'logon type:s+(10)s'}| %{
(new-object -Type PSObject -Property @{
TimeGenerated = $_.TimeGenerated
ClientIP = $_.Message -replace '(?smi).*Source Network Address:s+([^s]+)s+.*','$1'
UserName = $_.Message -replace '(?smi).*Account Name:s+([^s]+)s+.*','$1'
UserDomain = $_.Message -replace '(?smi).*Account Domain:s+([^s]+)s+.*','$1'
LogonType = $_.Message -replace '(?smi).*Logon Type:s+([^s]+)s+.*','$1'
})
} | sort TimeGenerated -Descending | Select TimeGenerated, ClientIP `
, @{N='Username';E={'{0}{1}' -f $_.UserDomain,$_.UserName}} `
, @{N='LogType';E={
switch ($_.LogonType) {
2 {'Interactive - local logon'}
3 {'Network connection to shared folder)'}
4 {'Batch'}
5 {'Service'}
7 {'Unlock (after screensaver)'}
8 {'NetworkCleartext'}
9 {'NewCredentials (local impersonation process under existing connection)'}
10 {'RDP'}
11 {'CachedInteractive'}
default {"LogType Not Recognised: $($_.LogonType)"}
}
}}

powershell: enumere los inicios de sesión rdp de hoy con una ip y un nombre de usuario

A veces, puede ser más conveniente ver e investigar los registros de RDP en la tabla de Excel, por lo que puede exportar cualquier evento de Windows a un archivo de texto e importarlo en Excel. Puede exportar el registro desde la GUI del Visor de eventos (solo si los registros de eventos no se borran), desde el símbolo del sistema:

WEVTUtil query-events Security > c:psrdp_security_log.txt

O así:

get-winevent -logname "Microsoft-Windows-TerminalServices-LocalSessionManager/Operational" | Export-Csv c:psrdp_connection_log.txt  -Encoding UTF8

Puede mostrar la lista de sesiones remotas actuales en su servidor RDS usando este comando:

qwinsta

El comando devuelve el ID de la sesión (ID), el nombre del usuario (NOMBRE DE USUARIO) y el estado de la sesión (Activo / Desconectado). Es conveniente utilizar este comando cuando necesite obtener el ID de la sesión RDP del usuario en caso de que se utilice una conexión en la sombra.

Qwinsta - lista de sesiones RDP y nombres de usuario

Puede mostrar la lista de los procesos en ejecución en la sesión RDP específica (se especifica el ID de sesión):

qprocess /id:5

qprocess: obtiene la lista de procesos para una sesión RDP

Los registros en el lado del cliente RDP no son muy informativos, pero puede verificar el historial de conexiones RDP en el registro del usuario.

Artículos Interesantes