Skip to main content
Back to all walkthroughs
Room Icon

RDP Lateral Movement Analysis

Trace RDP lateral movement through Windows event logs and on-host triage artifacts.

medium

90 min

55

User profile photo.
User profile photo.

To access material, start machines and answer questions login.

is widely used by system administrators to manage remotely Windows hosts across an environment. However, attackers abuse this same capability for lateral movement, pivoting through stolen credentials and chaining across multiple hosts to reach high-value targets. Sophos's Active Adversary Report for 1H 2024 (opens in new tab) found that attackers abused RDP in 90% of the incidents it investigated, and used it for internal lateral movement in 90% of those cases, and Mandiant's ransomware retrospective (opens in new tab) reported similar numbers, with ransomware operators like BianLian (opens in new tab) and RansomHub (opens in new tab) and nation-state actors like Volt Typhoon (opens in new tab) all documented using it under ATT&CK T1021.001 (opens in new tab).

In this room, we will focus on RDP as a lateral movement technique in Windows environments. We'll learn how to identify, correlate, and reconstruct RDP-based lateral movement during real-world investigations.

Learning Objectives

  • Read RDP-specific event log entries on source and destination hosts and identify malicious sessions by the patterns that distinguish them from legitimate ones
  • Correlate RDP activity between source and destination using IP pivots, account names, and Terminal Services session events
  • Recover RDP-specific on-host artifacts (the Terminal Server Client registry keys and the ) when event logs are cleared
  • Apply audit policies, network controls, and detection rules that actually reduce RDP-based lateral movement exposure

Prerequisites

Machine Access

Before proceeding, start the lab by clicking the green Start Machine button. Please wait about three minutes for the machine instance to launch.

Set up your virtual environment

To successfully complete this room, you'll need to set up your virtual environment. This involves starting the Lab Machine, ensuring you're equipped with the necessary tools and access to tackle the challenges ahead.
Lab machine
Status:Off

We provide access to an analyst workstation preloaded with the Velociraptor Windows.KapeFiles.Targets triage collections for this room. Once it's up, a session opens on the right side of the screen; if you don't see it, click the blue Show Split View button at the top of the page. If you prefer using RDP, you can use the following credentials:

Credentials

Only needed if you're using your own machine.

Username
DFIRUser
Password
TryH@cKMe1!433
IP address
MACHINE_IP
Connection via
RDP

On the D:\ drive, you'll find two folders: D:\Walkthrough\ holds the triage we'll use in Tasks 4 and 5, and D:\Challenge\ holds the triage for the Investigation Challenge in Task 6. All forensic tools are pre-installed and live in the DFIR Tools folder under C:\Users\DFIRUser\.

Answer the questions below

I have successfully started my analyst workstation instance.

Remote Desktop Protocol () is a built-in Windows feature that gives a connecting user a full graphical session on a remote host across the network. When an attacker has acquired valid credentials, this technique allows them to log on interactively to any reachable Windows machine without uploading a binary or running a specialized tool.

When a user double-clicks mstsc.exe and types a hostname into the Computer field, as shown in the screenshot, the client resolves the hostname and opens a connection directly to TCP 3389 (or UDP 3389) on the destination's Remote Desktop Services (TermService).

mstsc.exe Remote Desktop Connection dialog with a destination hostname typed into the Computer field

The flow that happens is:

  1. The client opens 3389 to the destination
  2. NLA (Network Level Authentication) pre-authenticates the connection using CredSSP before any session resources are allocated
  3. The destination validates the credentials (local SAM, or AD via Kerberos/NTLM)
  4. The destination creates the session and starts the Windows shell (explorer.exe) under the user's context
  5. Supporting processes start in the session: rdpclip.exe (clipboard sharing) and tstheme.exe (theme rendering)
  6. The server streams bitmap data to the client and receives keyboard and mouse input back

RDP connection flow: mstsc.exe opens TCP 3389 to the destination, NLA pre-authenticates the connection via CredSSP, the destination validates credentials against local SAM or AD via Kerberos/NTLM, the destination creates the session and starts explorer.exe under the user context, supporting processes rdpclip.exe (clipboard) and tstheme.exe (theme) start in the session, and the server streams bitmap data back to the client

Key Components

There's an important thing that we need to understand about RDP, which is that the connection runs a small set of processes and services, and knowing which runs where is one of the clearest ways to tell whether RDP was attempted. We'll cover this in more detail in the artifacts section, but here, generally what we need to understand is:

  • The source host runs the client, mstsc.exe.
  • After successful connection, the destination host runs Remote Desktop Services (TermService, hosted inside svchost.exe) and the session-support processes that start whenever a session is created, which are: rdpclip.exe (clipboard sharing) and tstheme.exe (theme rendering).
Answer the questions below

What is the default TCP port used by RDP?

Which authentication mechanism pre-authenticates RDP users before a session is created?

We can't recognize a malicious session without first knowing what a normal one looks like. We'll start with what legitimate RDP looks like in a typical enterprise, then walk through why attackers reach for this technique and the real-world cases where they've used it.

Legitimate RDP Usage

A modern Windows enterprise has hundreds of legitimate RDP sessions per day, and most of them follow predictable patterns. Knowing the baseline is most of the work.

Source What It Looks Like
IT administrator daily work RDP from a dedicated admin workstation or jump host to servers, during business hours, with privileged accounts
Helpdesk remote support RDP from helpdesk subnets to user workstations, typically initiated after a ticket is opened
Scheduled maintenance Predictable timing windows, named admin accounts, documented change request
Vendor remote access RDP via Remote Desktop Gateway with , scoped to specific systems

A legitimate RDP session looks the same every time the same person does it, with the same source workstation, the same destination, the same account, and the same time-of-day window. Every malicious session we'll investigate is going to deviate from this baseline in one or more specific ways.

Real-World Threat Actor Patterns

Below are real-world cases showing how threat actors abuse RDP in their operations.

RansomHub Password Spray and RDP Chaining (2025)

The Report's June 2025 RansomHub analysis (opens in new tab) documented operators password-spraying an internet-facing RDP server, then using RDP to chain through domain controllers, backup servers, and file servers before deploying ransomware roughly five days (about 118 hours) later.

DFIR Report June 2025 RansomHub analysis showing operators password-spraying an internet-facing RDP server, then chaining RDP through domain controllers, backup servers, and file servers before deploying ransomware roughly 118 hours later

The chaining pattern, where the same operator uses RDP to hop from each compromised host to the next, is a common pattern to see in modern ransomware operations. The operators never deploy a tool or use another known technique; they use built-in functionality to blend in with normal traffic, without revealing themselves, staying under the radar.

Volt Typhoon and BianLian

CISA AA24-038A on Volt Typhoon (opens in new tab) and CISA AA23-136A on BianLian (opens in new tab) both name RDP as a primary lateral movement method in their profiles.

BianLian operators are also known to enable RDP on hosts where it was previously disabled (modifying RDP-related registry settings and adding rules to allow inbound RDP) before pivoting.

CISA advisory excerpts (AA24-038A Volt Typhoon and AA23-136A BianLian) naming RDP as a primary lateral movement method in their TTP profiles

Answer the questions below

According to MITRE ATT&CK, what is the sub-technique ID for Remote Desktop Protocol under Remote Services?

We've covered why is so useful for attackers and what makes a session suspicious in the first place. Now we need to understand the event-log artifacts this technique leaves behind, because that's where most of the investigation happens.

RDP is a built-in admin tool, so the presence of an RDP connection is never the finding by itself. What makes a session suspicious are the answers to the following questions:

  • Whose account it was
  • Which workstation it came from
  • Whether the connection was expected
  • What happened during the session

For this walkthrough we'll focus on a single source-to-destination RDP connection, so the artifact split between the two sides is easy to see. In the real world, you might find multi-hop RDP lateral movement, as you will in Task 6.

Now let's see what artifacts RDP leaves on the source and the destination hosts.

Make sure that you follow along with the open, so you can apply what you learn directly. You'll find the artifacts in D:\Walkthrough\, one folder per host (THM-MKT-WS, THM-SHR-SRV). There's also a Walkthrough shortcut on the Desktop that opens the same folder.

Source Host Artifacts

We'll start at the source side, the workstation where the operator initiated RDP from.

Sysmon Event ID 1 (mstsc.exe Process Creation)

When mstsc.exe runs on the source, Event 1 captures the process creation with the full command line. This answers whose account it was (the User field on Sysmon Event 1) and confirms the RDP client launched on this workstation.

Sysmon Event 1 process creation event on the source host showing mstsc.exe with the User field populated with the account that launched the RDP client

Sysmon Event ID 3 (Outbound TCP 3389)

Sysmon Event 3 records every outbound network connection. When mstsc.exe reaches out to the RDP server, the corresponding Event 3 shows mstsc.exe as the image, DestinationIp set to the RDP server, and DestinationPort=3389. The fact that this fires on the source is the source-side answer to which workstation it came from, and the DestinationIp tells us where the attempt landed.

Sysmon Event 3 network connection event on the source host showing mstsc.exe with DestinationIp set to the RDP server and DestinationPort 3389

This event fires on both the source and destination, showing both IPs and the port. The image is mstsc.exe, so we get the process that made the connection, not its parent.

TerminalServices-RDPClient Event IDs 1024/1025 (RDP Client Connection)

The TerminalServices-RDPClient Operational channel logs the client's view of each RDP connection:

  • Event 1024 fires on attempt: "RDP ClientActiveX is trying to connect to the server (<server name>)"
  • Event 1025 fires on success: "RDP ClientActiveX has connected to the server"

The <server name> field directly records the destination hostname mstsc.exe tried to reach, corroborating the source's view of where the operator was headed.

TerminalServices-RDPClient Operational events on the source host: Event 1024 (RDP ClientActiveX attempting to connect) and Event 1025 (RDP ClientActiveX connected) with the destination server name recorded

These come in handy when attackers attempt to clear logs as an anti-forensic technique and we want to trace RDP connections. Most of the time they would clear the main log sources such as Sysmon and Security logs, but not the TerminalServices-RDPClient channel.

Another benefit of this channel is that it's enabled by default, so these logs will exist without any extra configuration.

Destination Host Artifacts

Now let's move to the destination side, the host that accepted the RDP connection. Most of the evidence for RDP lateral movement exists on the destination.

Security Event ID 4624 (Type 10)

Event 4624 with LogonType 10 (RemoteInteractive) is a successful interactive RDP logon. The TargetUserName field answers whose account it was, IpAddress answers which workstation it came from, and comparing these against your normal baseline would be one way to determine whether the connection was expected.

It's important to mention that this isn't the only way to determine whether this session is malicious, but we can combine this with understanding further context about what happened during the session, which would give us a complete picture of this activity.

Security Event 4624 with LogonType 10 on the destination host showing a successful interactive RDP logon, with TargetUserName and source IpAddress fields populated

TS-RemoteConnectionManager Event ID 1149

TS-RemoteConnectionManager Event 1149 fires when the handshake succeeds, recording the user and source network address. It confirms the network leg but not that a session was created, so it always pairs with the 4624 Type 10.

The fields to look at are the user and the source IP. The user corroborates whose account it was and the source IP corroborates which workstation it came from, the same two questions the 4624 Type 10 answers, now confirmed from a second channel.

TS-RemoteConnectionManager Operational Event 1149 on the destination host showing the NLA handshake succeeded with the user and source network address fields populated

TS-LocalSessionManager Event 21, 22, 23, 24, 25

The TS-LocalSessionManager Operational channel records the session lifecycle on the destination:

  • Event 21 is session logon succeeded
  • Event 22 is shell start (the operator received an interactive desktop)
  • Event 23 is logoff, session destroyed
  • Event 24 is disconnect, session preserved on the server
  • Event 25 is reconnect

These don't directly answer one of the four questions, but they confirm the session actually happened end-to-end (the operator got a shell, not just a network handshake) and bracket when the activity occurred.

TS-LocalSessionManager Operational events on the destination host showing the RDP session lifecycle: Event 21 (session logon), Event 22 (shell start), Event 24 (disconnect with session preserved), Event 23 (logoff with session destroyed)

Below is a diagram of events 21, 22, 23, and 24 from Event Viewer, showing the RDP lifecycle.

Diagram of the RDP session lifecycle on the destination host: TS-LocalSessionManager Event 21 (session logon succeeded), Event 22 (shell start), Event 24 (disconnect with session preserved), and Event 23 (logoff with session destroyed)

Event ID Reference

Below is a summary of source and destination artifacts in event logs that we've discussed in this task:

RDP event log artifacts split by host: the source host writes Sysmon EID 1 (mstsc.exe process create), Sysmon EID 3 (outbound TCP 3389), and TerminalServices-RDPClient EIDs 1024 and 1025 (connection attempt and success); the destination host writes Security 4624 Type 10 (interactive RDP logon with source IP and account), TS-RemoteConnectionManager EID 1149 (NLA handshake), and TS-LocalSessionManager EIDs 21 (session logon), 22 (shell start), and 23/24/25 (logoff, disconnect, reconnect lifecycle)

Use the events above to answer the following.

Answer the questions below

On the source workstation, which user account launched the RDP client (mstsc.exe)?

What is the IP address of the destination the client connected to on TCP 3389?

What destination hostname did the RDP client attempt to connect to?

Which account successfully authenticated at the destination over RDP?

Same as the last task, let's follow along on the analyst . The triage is in D:\Walkthrough\, and the required tools are in the DFIR Tools folder under C:\Users\DFIRUser\.

Source Artifacts

Let's take a look at the source-side artifacts.

Registry MRU

Under Software\Microsoft\Terminal Server Client\Default in the user's NTUSER.DAT, MRU0 through MRU9 hold the recently RDP'd-to hosts (the "Recent" list inside mstsc.exe), MRU0 being the most recent. This is the source-side answer to which workstation the user RDP'd to, preserved on disk even after event logs are cleared.

Registry Explorer view of NTUSER.DAT showing the Software\\Microsoft\\Terminal Server Client\\Default key with MRU0 through MRU9 values listing recently RDP'd-to destinations, MRU0 being the most recent

UsernameHint

Each host the user connected to gets a Software\Microsoft\Terminal Server Client\Servers\<host>\ key, and its UsernameHint value is the username mstsc.exe saved for that host. This is the source-side answer to whose account was used against which target, a per-host record. If the saved username doesn't match the workstation's logged-in user, that's a stolen-credential tell, which also feeds into whether the connection was expected.

Registry Explorer view of NTUSER.DAT showing the Software\\Microsoft\\Terminal Server Client\\Servers\\<host> subkey with the UsernameHint value recording the username mstsc.exe saved for that destination

Bitmap Cache

The bitmap cache is a unique RDP artifact. It shows what the operator saw on the remote desktop during their session, the source-side answer to what happened during the session. To save bandwidth, the RDP client caches small tiles (typically 64x64 pixels) of the remote screen on the local machine, and those tiles stay on disk on the source host.

The cache exists at C:\Users\<user>\AppData\Local\Microsoft\Terminal Server Client\Cache\ (modern Windows uses Cache0000.bin, Cache0001.bin, etc.). Browsing the recovered tiles can reveal literal commands, file browsers, or open documents the operator had on screen during the session.

We can extract the tiles with bmc-tools (opens in new tab) (you'll find it in the DFIR Tools folder) using a command like the following one (make sure that the output directory, where the BMP tiles will be dropped, exists):

Extracting the RDP Bitmap Cache
C:\Users\DFIRUser> mkdir "C:\Users\DFIRUser\Desktop\bmc-output"
C:\Users\DFIRUser> python "C:\Users\DFIRUser\DFIR Tools\bmc-tools\bmc-tools.py" -s "D:\Walkthrough\THM-MKT-WS\uploads\auto\C%3A\Users\<username>\AppData\Local\Microsoft\Terminal Server Client\Cache" -d "C:\Users\DFIRUser\Desktop\bmc-output"
[+++] Processing a directory...
[!!!] File '...\Terminal Server Client\Cache\bcache24.bmc' is zero bytes, skipping file.
[+++] Processing a file: '...\Terminal Server Client\Cache\Cache0000.bin'.
[===] <REDACTED> tiles successfully extracted in the end.
[===] Successfully exported <REDACTED> files.

This command writes one BMP per tile, often hundreds of them.

As seen in the output folder, the thumbnails have fragments that, if combined, can give us important context about the session and what happened in it.

Output folder of extracted bitmap cache tiles displayed as thumbnails, showing fragments of the operator's remote desktop that can be combined to reveal commands, file browsers, and open application windows from the RDP session

For deeper analysis, we can use RdpCacheStitcher (opens in new tab), which stitches tiles into coherent screen reconstructions. All you need to do is select the output folder where the extracted BMP tiles are, and it'll give you the output that's shown in the screenshot below.

This can help us actually view what happened during the session in one image.

RdpCacheStitcher GUI showing the BMP tiles stitched together into a coherent screen reconstruction of what the operator saw during the RDP session

Prefetch

On the source, MSTSC.EXE-<hash>.pf in C:\Windows\Prefetch confirms the RDP client launched and gives a run count and the last few launch times. This is the source-side execution proof that ties back to which workstation it came from. We can parse using a tool like Eric Zimmerman's PECmd using the following command:

Parsing MSTSC Prefetch with PECmd
C:\Users\DFIRUser\DFIR Tools\EZ Tools> .\PECmd.exe -d "D:\Walkthrough\THM-MKT-WS\uploads\auto\C%3A\Windows\Prefetch" --csv "C:\Users\DFIRUser\Desktop" --csvf THM-MKT-WS-prefetch.csv

PECmd CSV output for MSTSC.EXE prefetch from C:\\Windows\\Prefetch on the source workstation showing the run count and last launch timestamps confirming mstsc.exe was executed

As Prefetch is not enabled by default on Windows servers, we might need to rely on other evidence like Sysmon Event 1 for that execution evidence instead.

Generic Execution Artifacts (Corroborating Evidence)

Other artifacts can be valuable too: AmCache, ShimCache/AppCompatCache, UserAssist (in NTUSER.DAT), and Jump Lists each corroborate that mstsc.exe was executed on the workstation. They aren't RDP-specific, but they can be useful when other artifacts don't exist.

Destination Artifacts

Now let's pivot to the destination host artifacts, of which there are fewer.

Execution Evidence: rdpclip.exe and tstheme.exe

If we're trying to prove whether RDP was used on a host, we need to check for the processes that only run when an RDP session is created (as we mentioned in earlier tasks), which are rdpclip.exe (clipboard sharing) and tstheme.exe (theme rendering).

Finding them in execution artifacts on a host that's not supposed to receive RDP is itself evidence that an RDP session was accepted there, the destination-side anchor that the connection actually landed on this host. The evidence exists in:

  • ShimCache/AppCompatCache entries found in the SYSTEM hive can show the presence of binaries such as rdpclip.exe and tstheme.exe, which may be useful as indicators of RDP activity. However, for those entries to appear correctly in the registry hive on disk, the system typically needs to go through a graceful shutdown or reboot, because ShimCache updates are generally committed from memory to the SYSTEM hive at shutdown time.
  • Prefetch (C:\Windows\Prefetch\RDPCLIP.EXE-*.pf, TSTHEME.EXE-*.pf): This shows the execution timestamps and run counts as we've seen on the source side. It might not be reliable on servers though, as their SKUs have Prefetch disabled by default.

Use the artifacts above to answer the following questions.

Answer the questions below

How many bitmap cache tiles did bmc-tools recover from the source host?

According to the MSTSC.EXE prefetch, what was the last execution time of the RDP client? (Answer Format: YYYY-MM-DD HH:MM:SS)

We've completed our review of how attackers execute lateral movement and how to detect it through event logs and forensic artifacts. Now we've prepared a hands-on practical exercise.

Scenario

You are an incident responder at a security services firm. TryHatMeStudios, a media production company, has reached out suspecting a breach. Their internal security team noticed unusual RDP activity originating from a developer workstation, reaching systems that it shouldn't be reaching.

Triage was collected from the four systems most likely involved, namely a developer workstation (-DEV-WS), a file server (THM-SHR-SRV), a server (THM-SQL-SRV), and the domain controller (THM-). Your task is to reconstruct and uncover the attack end to end.

The challenge triage collection is in the D:\Challenge\ folder on the analyst . All tools needed are in the Tools folder under C:\Users\DFIRUser\.
Answer the questions below

An unusual RDP session landed on a file server from a non-standard subnet. What is the source workstation IP?

What account was used to authenticate that session?

Continuing the trail, what is the second host the operator landed on after the file server?

On the final destination, the operator executed a binary from C:\Windows\Temp\. What is the filename?

What scheduled task did the operator create to persist the binary?

Now that we've reconstructed an intrusion in the walkthrough and another in the challenge, we'll turn to the prevention layer that makes the next intrusion harder. Prevention for lateral movement is hard because blanket blocking would break IT administration workflows nobody wants to give up, but there's a real list of things we can do, and the ordering matters.

Audit Policy Configuration

The highest-impact change is enabling the audit policies that produce the events we need. By default, several of them are off.

Audit Policy Subcategory Name What It Enables Default State
Audit Logon Logon/Logoff 4624/4625 including Type 10 Server: Success on by default. Win10 1809+: Success+Failure. Verify on the host since hardening profiles can override.
Audit Process Creation with Command Line Process Creation + the CommandLine flag 4688 with the full CommandLine field for mstsc.exe Not configured

Configure these via GPO and not via auditpol at the host level, because Group Policy refresh will silently override any local auditpol /set changes. After any audit change, create a test RDP session and confirm the expected events actually fire before trusting the configuration.

The TerminalServices Operational Channel

The TS-LocalSessionManager and TS-RemoteConnectionManager Operational channels are on by default since Windows 7/Server 2008 R2. The TerminalServices-RDPClient Operational channel (the source-side workstation log) is also on by default, but it's the one most often disabled in production hardening profiles.

A disabled RDPClient channel means losing the source-side trail entirely when a destination's logs are cleared. Verify with:

Checking the RDPClient Channel
C:\Users\DFIRUser> wevtutil gl Microsoft-Windows-TerminalServices-RDPClient/Operational

Then enable with:

Enabling the RDPClient Channel
C:\Users\DFIRUser> wevtutil sl Microsoft-Windows-TerminalServices-RDPClient/Operational /e:true

For persistence across feature updates, deploy the enablement via GPO or an endpoint management tool.

Log Forwarding and Retention

  • Forward all three TS Operational channels to the SIEM (LSM + RCM + RDPClient), not just the Security log. The TS channels are the first-stop evidence source for this technique, and most SIEM deployments miss them.
  • Forward source-side workstation logs, not just servers. Operators land on workstations first.
  • The TS Operational channels rotate quickly by default. Increase size or forward aggressively.

Network Controls That Can Actually Be Deployed

  • Deploy a Remote Desktop Gateway (RDG) as the only path for cross-subnet RDP, with MFA enforced at the gateway.
  • Use Just-in-Time admin access (Microsoft PAM, Azure PIM, third-party PAM solutions) so admin RDP rights are time-bounded, not standing.
  • Restrict TCP 3389 between user workstation VLANs and server VLANs at the network layer. A compromised endpoint on the user network shouldn't be able to RDP directly to a server.
  • Block RDP from the internet entirely; never expose 3389 directly.
  • Enforce NLA on every Windows host (Require user authentication for remote connections by using Network Level Authentication GPO setting) to disable non- RDP and reduce brute-force exposure.

Privileged Account Hygiene

The two patterns that make RDP lateral movement harder are tiered administration and per-host random local admin passwords:

  • Tiered Administration: Tier-0 (DC admins) cannot interactively log on to user workstations or servers; Tier-1 (server admins) cannot log on to workstations; Tier-2 (workstation admins) cannot log on to servers. This stops cross-tier credential reuse via RDP.
  • LAPS (Local Administrator Password Solution): Randomized per-host local admin passwords mean a compromise on one workstation doesn't unlock every workstation.
  • Restrict Remote Desktop Users group membership: Remove Domain Users from the default Remote Desktop Users group on every server.
  • Session timeout policies: Auto-logoff disconnected sessions after a short window (e.g., 30 minutes). Disconnected sessions hold cached privileged credentials in memory on the server, which makes them a long-lived foothold for any operator with later access to the box.
  • Remote Credential Guard: Prevents RDP from transmitting credentials to the remote host. Instead, it redirects Kerberos authentication requests back to the client. Even if the destination is compromised, the operator can't harvest RDP session credentials from LSASS. Configure on the remote host via GPO Computer Configuration > Administrative Templates > System > Credentials Delegation > Remote host allows delegation of nonexportable credentials, and on the client side via Restrict delegation of credentials to remote servers set to "Require Remote Credential Guard." Requires , so it works only for domain-joined machines that can reach a .

Detection Rules Worth Deploying

Detection Pattern Confidence Why
Security 4624 Type 10 from a non-management subnet to a Tier-0 host High Should never happen; if it does, hunt aggressively
Same source IP producing 4624 Type 10 across three or more destination hosts within 10 minutes High RDP chaining signature; the challenge in this room is one example. Tune the threshold to your environment.
Same account producing 4624 Type 10 from two different source workstations within a short window Medium "Right account, wrong source" is the baseline-deviation pattern from the walkthrough. Tune to your IT-admin baseline.
mstsc.exe execution on a non-IT user's workstation Medium Most non-IT users never run mstsc; baseline first
RDP session outside business hours from a workstation Low Many legitimate reasons; rank low but include

Mitigation Mapping

For analysts mapping these controls into a defensive architecture, the table below ties each mitigation to its MITRE ATT&CK Mitigation ID and the specific RDP attack vector it neutralizes.

Mitigation What It Prevents MITRE Mitigation Implementation
NLA enforcement Unauthenticated session access, brute force at the login screen M1028 GPO: Require NLA
Network /RDG Unrestricted lateral RDP between subnets M1030 rules on 3389 + RDG with
Just-in-Time admin access Standing admin RDP rights M1026 PAM/ solution
Session timeout policies Long-lived cached credentials in disconnected sessions M1028 GPO: Session Time Limits
Remote Desktop Users group restriction Broad credential-based RDP access M1018 Restrict membership; remove Domain Users default
Tiered administration Cross-tier credential reuse M1018 + M1026 logon-rights GPOs per tier
LAPS Local admin credential reuse across workstations M1027 Microsoft LAPS deployment
Remote Credential Guard Credential theft on remote host M1043 GPO + registry on both ends
Answer the questions below

Which Group Policy setting enforces Network Level Authentication for incoming RDP connections?

That's it for the lateral movement technique, from explaining the protocol itself through the source-side and destination-side event-log artifacts, the on-disk forensic artifacts, and the multi-hop RDP chaining pattern that attackers use in real-world attacks.

Takeaways

  • RDP is a built-in administration tool, so the presence of a session is never the finding by itself. What makes one suspicious is the context around it: whose account it used, which workstation it came from, whether it was expected, and what happened during the session.
  • A legitimate RDP session looks the same every time the same person makes it, so malicious sessions stand out by deviating from that baseline. The same account showing up from a workstation it never normally uses is the most common deviation and the starting point for most RDP hunts.
  • No single event confirms a malicious RDP session on its own. Correlating the connection and logon events on the destination with the session-lifecycle events is what gives us context and proves an operator reached an interactive desktop, not just a network handshake.
  • When the destination logs are cleared, the source side is what saves the investigation, which is why an RDP investigation should never stop at the destination. Source-side event logs, the Terminal Server Client registry keys, and the survive clearing and can still show where the user connected, as whom, and what they had on screen.
  • No single control stops RDP abuse without breaking the IT workflows that rely on it, but enabling the right auditing and layering controls like tiered administration, LAPS, and Just-in-Time admin access together make RDP lateral movement significantly harder to pull off and easier to spot.
Answer the questions below

Good work! You have successfully finished the RDP Lateral Movement Analysis room.