Detection rules › Splunk

Windows AD Rogue Domain Controller Network Activity

Status
experimental
Severity
medium
Author
Dean Luxton
Source
github.com/splunk/security_content

The following analytic identifies unauthorized replication RPC calls from non-domain controller devices. It leverages Zeek wire data to detect specific RPC operations like DrsReplicaAdd and DRSGetNCChanges, filtering out legitimate domain controllers. This activity is significant as it may indicate an attempt to introduce a rogue domain controller, which can compromise the integrity of the Active Directory environment. If confirmed malicious, this could allow attackers to manipulate directory data, escalate privileges, and persist within the network, posing a severe security risk.

MITRE ATT&CK coverage

TacticTechniques
Defense ImpairmentT1207 Rogue Domain Controller

Rule body splunk

name: Windows AD Rogue Domain Controller Network Activity
id: c4aeeeef-da7f-4338-b3ba-553cbcbe2138
version: 9
creation_date: '2023-04-11'
modification_date: '2026-05-13'
author: Dean Luxton
status: experimental
type: TTP
description: The following analytic identifies unauthorized replication RPC calls from non-domain controller devices. It leverages Zeek wire data to detect specific RPC operations like DrsReplicaAdd and DRSGetNCChanges, filtering out legitimate domain controllers. This activity is significant as it may indicate an attempt to introduce a rogue domain controller, which can compromise the integrity of the Active Directory environment. If confirmed malicious, this could allow attackers to manipulate directory data, escalate privileges, and persist within the network, posing a severe security risk.
data_source: []
search: |-
    `zeek_rpc` DrsReplicaAdd OR DRSGetNCChanges
      | where NOT (dest_category="Domain Controller") OR NOT (src_category="Domain Controller")
      | fillnull value="Unknown" src_category, dest_category
      | table _time endpoint operation src src_category dest dest_category
      | `windows_ad_rogue_domain_controller_network_activity_filter`
how_to_implement: Run zeek on domain controllers to capture the DCE RPC calls, ensure the domain controller categories are defined in Assets and Identities.
known_false_positives: No false positives have been identified at this time.
references:
    - https://adsecurity.org/?p=1729
finding:
    title: Rogue DC Activity Detected from $src_category$ device $src$ to $dest$ ($dest_category$)
    entity:
        field: dest
        type: system
        score: 50
threat_objects:
    - field: src
      type: ip_address
analytic_story:
    - Sneaky Active Directory Persistence Tricks
asset_type: Endpoint
mitre_attack_id:
    - T1207
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: network
security_domain: network

Stages and Predicates

Stage 1: search

`zeek_rpc` DrsReplicaAdd OR DRSGetNCChanges

Stage 2: where

| where NOT (dest_category="Domain Controller") OR NOT (src_category="Domain Controller")

Stage 3: fillnull

| fillnull value="Unknown" src_category, dest_category

Stage 4: table

| table _time endpoint operation src src_category dest dest_category

Stage 5: search

| `windows_ad_rogue_domain_controller_network_activity_filter`

Indicators

Each row is a field, operator, and value that the rule matches. The corpus column counts how many other rules in the catalog look for the same combination: high numbers point to widely-used, community-vetted indicators. Blank or 1 shows that the indicator is specific to this rule.

FieldKindValues
sourcetypeeq
  • zeek:rpc:json

Search terms

Bare-string tokens in the SPL search body. Splunk matches each token against _raw (the untyped raw event text) anywhere it appears, not against a specific field. These don't surface in the Indicators table because they aren't predicates on a known field.

StageTerm
1DrsReplicaAdd
1DRSGetNCChanges