DCSHADOW
ROGUE DC
NTDSDSA
REPLICATION SPN
DetectionBlue TeamSOCOctober 12, 2026•9 min read

Detecting DCShadow: Rogue Domain Controller Registration

DCShadow registers a workstation as a Domain Controller for a few seconds, pushes attacker-chosen changes through replication, then removes itself. The window is short; the registration artifacts are not.

Scroll

DCShadow lets an attacker with Domain Admin or equivalent rights inject changes into AD, such as SIDHistory or ACL edits, through replication so that normal change auditing on the DC is bypassed. To do it, the host must briefly look like a DC. That registration, and the RPC traffic around it, is where the detection lives.

Signals at a Glance

SignalWhereATT&CK
New nTDSDSA object under CN=Servers in the Configuration partitionDC Security 5137, 5141T1207
GC/ and replication-GUID SPNs added to a non-DC computerDC Security 4742, 5136T1207
DsBind / DsAddEntry / DsReplicaAdd RPC from a non-DCZeek dce_rpc, networkT1207
Computer object briefly appearing as a server in a siteLDAP inventory diffT1207
SIDHistory or privileged-group change with no matching admin actionDC Security 4765, 4738T1134.005

The Registration Footprint

A DC is a computer object with a matching nTDSDSA child beneath CN=Sites,CN=Configuration, plus replication SPNs. DCShadow creates those pieces on demand. Directory-service change auditing records the object creation and deletion, and an SPN query on a workstation account is a strong secondary signal. Coverage differs between environments, so test it with a lab run before you rely on it:

index=wineventlog sourcetype="WinEventLog:Security"
    ((EventCode=5137 Object_Class=nTDSDSA)
     OR (EventCode=5141 Object_Class=nTDSDSA)
     OR (EventCode=4742 Service_Principal_Names="*GC/*")
     OR (EventCode=5136 LDAP_Display_Name=servicePrincipalName
         Attribute_Value="GC/*"))
| eval who=coalesce(Subject_Account_Name, SubjectUserName)
| stats earliest(_time) AS first latest(_time) AS last values(EventCode) AS codes
        values(Object_DN) AS objects by who, host
| where mvcount(codes) >= 1
# tune/validate: expect a create-then-delete pair seconds apart.
# Exclude real DC promotion and demotion windows from your change calendar.

A scheduled inventory is the cheapest independent check. Compare the list of nTDSDSA objects against your known Domain Controllers and alert on any difference:

# tune/validate: run from a management host on a schedule; allowlist is yours
$known = Get-Content .\dc-allowlist.txt
$cfg = (Get-ADRootDSE).configurationNamingContext
Get-ADObject -SearchBase "CN=Sites,$cfg" -LDAPFilter "(objectClass=nTDSDSA)" |
  ForEach-Object { ($_.DistinguishedName -split ',')[1] -replace 'CN=','' } |
  Where-Object { $_ -notin $known }

Replication RPC from the Wrong Host

The rogue host must speak the replication RPC interface to a real DC. Domain Controllers have a stable, small set of peers, so a new source IP is easy to spot:

Vetted sources

Use SigmaHQ and Elastic coverage for DCShadow, the Splunk ESCU rogue-DC analytics, Microsoft guidance on AD replication auditing and the original research from the Mimikatz authors for the artifact list. Baseline your own environment, and validate with a lab DCShadow run — change-auditing coverage for replicated writes is incomplete by design.

Build Detections That Fire

Mjolnir Security helps blue teams turn threat intelligence into high-fidelity detections across endpoint, network, identity and cloud telemetry.

Detection EngineeringManaged Detection & ResponseThreat HuntingIncident ResponsePurple Teaming
  • Detection Engineering We build and tune detections mapped to ATT&CK from your own telemetry.
  • Threat Hunting as a Service Hypothesis-driven hunts for the behaviours on this page.
  • 24/7 Incident Response Containment when a detection fires. Call +1 833 403 5875.
Written by: Mjolnir Threat Research (MTAC)  |  Published: October 12, 2026  |  Last reviewed: October 12, 2026