ghostspy
All articles

Detecting Lateral Movement Without Drowning in Noise

Practical detection engineering for east-west movement — the signals that matter, the ones that don't, and how to tune for a signal-to-noise ratio you can actually live with.

Ghost Spy

Lateral movement is where an intrusion stops being a single compromised host and starts becoming an incident. It’s also one of the noisiest things to detect, because the techniques attackers use — remote services, admin shares, scheduled tasks — are the same ones administrators use every day.

Start from the technique, not the tool

Tool-specific detections age badly. Anchor detections to the underlying technique and they survive the attacker swapping tooling.

  • Remote service creation — a service installed over the network
  • Remote scheduled tasks — task registration from a non-local session
  • Admin share accessC$ / ADMIN$ writes followed by execution

Build a baseline first

The single biggest lever on false positives is knowing what “normal” east-west traffic looks like in your environment. Before writing a rule, ask: which service accounts legitimately move between hosts, and on what schedule?

A worked example

Here’s the shape of a detection for remote service creation, expressed as pseudo-KQL:

SecurityEvent
| where EventID == 7045              // service installed
| where ServiceFileName has_any ("\\\\", "%COMSPEC%", "powershell")
| summarize count() by Computer, Account, ServiceName, bin(TimeGenerated, 1h)
| where count_ > 0

The has_any filter is doing the real work: legitimate services are rarely installed from a UNC path or launched through a shell interpreter.

Tuning the signal

Once the rule fires, the work isn’t done — it’s begun. Track precision over time and prune the accounts and hosts that generate benign hits. A detection you can’t tune is a detection you’ll eventually mute.

The goal isn’t zero alerts. It’s alerts a human can triage in the time they actually have.

Related articles