Detection rules › Splunk

Windows Privileged Group Modification

Status
production
Severity
medium
Group by
change_type, dest, group.name, object_category, object_path, signature_id, status, user
Author
Brandon Sternfield, Optiv + ClearShark
Source
github.com/splunk/security_content

This analytic detects modifications to privileged groups in Active Directory, including addition, creation, deletion, and changes to various types of groups such as local, global, universal, and LDAP query groups. It specifically monitors for changes to high-privilege groups like "Administrators", "Domain Admins", "Enterprise Admins", and "ESX Admins", among others. This detection is particularly relevant in the context of potential exploitation of vulnerabilities like the VMware ESXi Active Directory Integration Authentication Bypass (CVE-2024-37085), where attackers may attempt to manipulate privileged groups to gain unauthorized access to systems.

Known false positives

  • Legitimate administrators might create, delete, or modify an a privileged group for valid reasons. Verify that the group changes are authorized and part of normal administrative tasks. Consider the context of the action, such as the user performing it and any related activities.

MITRE ATT&CK coverage

Telemetry coverage

Rule body

name: Windows Privileged Group Modification
id: b8cbef2c-2cc3-4550-b0fc-9715b7852df9
version: 12
creation_date: '2024-07-30'
modification_date: '2026-05-13'
author: Brandon Sternfield, Optiv + ClearShark
status: production
type: TTP
description: |
    This analytic detects modifications to privileged groups in Active Directory, including addition, creation, deletion, and changes to various types of groups such as local, global, universal, and LDAP query groups.
    It specifically monitors for changes to high-privilege groups like "Administrators", "Domain Admins", "Enterprise Admins", and "ESX Admins", among others.
    This detection is particularly relevant in the context of potential exploitation of vulnerabilities like the VMware ESXi Active Directory Integration Authentication Bypass (CVE-2024-37085), where attackers may attempt to manipulate privileged groups to gain unauthorized access to systems.
data_source:
    - Windows Event Log Security 4727
    - Windows Event Log Security 4731
    - Windows Event Log Security 4744
    - Windows Event Log Security 4749
    - Windows Event Log Security 4754
    - Windows Event Log Security 4756
    - Windows Event Log Security 4759
    - Windows Event Log Security 4783
    - Windows Event Log Security 4790
search: |-
    `wineventlog_security`
    EventCode IN (
            4727,
            4731,
            4744,
            4749,
            4754,
            4756,
            4759,
            4783,
            4790
        )
    TargetUserName IN (
            "Account Operators",
            "Administrators",
            "Admins DNS",
            "Backup Operators",
            "DnsAdmins",
            "Domain Admins",
            "Enterprise Admins",
            "Enterprise Key Admins",
            "ESX Admins",
            "ESXi Admins",
            "Group Policy Creator Owners",
            "Hyper-V Administrators",
            "Key Admins",
            "Print Operators",
            "Remote Desktop Users",
            "Remote Management Users",
            "Replicators",
            "Schema Admins",
            "Server Operators"
        )
    | eval object_category=case(
            EventCode="4727", "Global Group (Security)",
            EventCode="4731", "Local Group (Security)",
            EventCode="4744", "Local Group (Distribution)",
            EventCode="4749", "Global Group (Distribution)",
            EventCode="4754", "Universal Group (Security)",
            EventCode="4756", "Universal Group (Security)",
            EventCode="4759", "Universal Group (Distribution)",
            EventCode="4783", "Basic Application Group",
            EventCode="4790", "LDAP Query Group"
        )
    
    | rename Computer as dest
             result as change_type
             TargetUserName as object
             TargetSid as object_path
    
    | stats count min(_time) as firstTime
                  max(_time) as lastTime
        BY EventCode src_user object_category
           object object_path dest
           change_type status
    | `windows_privileged_group_modification_filter`
how_to_implement: |
    To successfully implement this search, ensure that Windows Security Event logging is enabled and being ingested into Splunk, particularly for event codes 4727, 4730, and 4737. Configure Group Policy settings to audit these specific events.
known_false_positives: |
    Legitimate administrators might create, delete, or modify an a privileged group for valid reasons. Verify that the group changes are authorized and part of normal administrative tasks. Consider the context of the action, such as the user performing it and any related activities.
references:
    - https://nvd.nist.gov/vuln/detail/CVE-2024-37085
    - https://www.rapid7.com/blog/post/2024/07/30/vmware-esxi-cve-2024-37085-targeted-in-ransomware-campaigns/%5C
    - https://x.com/mthcht/status/1818196168515461431?s=12&t=kwffmj0KM1sZtg3MrqC0QQ
finding:
    title: A privileged group modification was detected. Group "$object$" ($object_category$) was $change_type$ on $dest$ by user $src_user$.
    entity:
        field: src_user
        type: user
        score: 50
intermediate_findings:
    entities:
        - field: dest
          type: system
          score: 50
          message: A privileged group modification was detected. Group "$object$" ($object_category$) was $change_type$ on $dest$ by user $src_user$.
analytic_story:
    - VMware ESXi AD Integration Authentication Bypass CVE-2024-37085
    - Scattered Lapsus$ Hunters
asset_type: Endpoint
cve:
    - CVE-2024-37085
mitre_attack_id:
    - T1136.001
    - T1136.002
product:
    - Splunk Enterprise
    - Splunk Enterprise Security
    - Splunk Cloud
category: endpoint
security_domain: endpoint

Stages and Predicates

Stage 1: search

`wineventlog_security`
EventCode IN (
        4727,
        4731,
        4744,
        4749,
        4754,
        4756,
        4759,
        4783,
        4790
    )
TargetUserName IN (
        "Account Operators",
        "Administrators",
        "Admins DNS",
        "Backup Operators",
        "DnsAdmins",
        "Domain Admins",
        "Enterprise Admins",
        "Enterprise Key Admins",
        "ESX Admins",
        "ESXi Admins",
        "Group Policy Creator Owners",
        "Hyper-V Administrators",
        "Key Admins",
        "Print Operators",
        "Remote Desktop Users",
        "Remote Management Users",
        "Replicators",
        "Schema Admins",
        "Server Operators"
    )

Stage 2: eval

| eval object_category=case(
        EventCode="4727", "Global Group (Security)",
        EventCode="4731", "Local Group (Security)",
        EventCode="4744", "Local Group (Distribution)",
        EventCode="4749", "Global Group (Distribution)",
        EventCode="4754", "Universal Group (Security)",
        EventCode="4756", "Universal Group (Security)",
        EventCode="4759", "Universal Group (Distribution)",
        EventCode="4783", "Basic Application Group",
        EventCode="4790", "LDAP Query Group"
    )
object_category =
ifEventCode = "4727""Global Group (Security)"
elifEventCode = "4731""Local Group (Security)"
elifEventCode = "4744""Local Group (Distribution)"
elifEventCode = "4749""Global Group (Distribution)"
elifEventCode = "4754""Universal Group (Security)"
elifEventCode = "4756""Universal Group (Security)"
elifEventCode = "4759""Universal Group (Distribution)"
elifEventCode = "4783""Basic Application Group"
else"LDAP Query Group"

Stage 3: rename

| rename Computer as dest
         result as change_type
         TargetUserName as object
         TargetSid as object_path

Stage 4: stats

| stats count min(_time) as firstTime
              max(_time) as lastTime
    BY EventCode src_user object_category
       object object_path dest
       change_type status

Stage 5: search

| `windows_privileged_group_modification_filter`

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
EventCodein
  • 4727
  • 4731
  • 4744
  • 4749
  • 4754
  • 4756
  • 4759
  • 4783
  • 4790
field:"EventID" kind:in
TargetUserNamein
  • "Account Operators"
  • "Administrators"
  • "Admins DNS"
  • "Backup Operators"
  • "DnsAdmins" corpus 2 (sigma 1, splunk 1)
  • "Domain Admins"
  • "ESX Admins"
  • "ESXi Admins"
  • "Enterprise Admins"
  • "Enterprise Key Admins"
  • "Group Policy Creator Owners"
  • "Hyper-V Administrators"
  • "Key Admins"
  • "Print Operators"
  • "Remote Desktop Users"
  • "Remote Management Users"
  • "Replicators"
  • "Schema Admins"
  • "Server Operators"
field:"TargetUserName" kind:in