Detection rules › Kusto

PROD (TM016.1) - GROUP - Added to Well-Known or Tier Model Group

Status
available
Severity
high
Time window
5m
Source
github.com/Azure/Azure-Sentinel

Well-Known Groups are classified as Tier 0, and Tier Model groups that provide permission over Tier Model objects.

MITRE ATT&CK coverage

TacticTechniques
Privilege Escalation

Telemetry coverage

Rule body

id: 763fc00b-4971-43c2-9cd1-f12b58a542bd
name: 'PROD (TM016.1) - GROUP - Added to Well-Known or Tier Model Group'
description: |
  Well-Known Groups are classified as Tier 0, and Tier Model groups that provide permission over Tier Model objects.
severity: High
requiredDataConnectors:
  - connectorId: SecurityEvents
    dataTypes:
      - SecurityEvent
  - connectorId: WindowsSecurityEvents
    dataTypes:
      - SecurityEvent
queryFrequency: 5m
queryPeriod: 5m
triggerOperator: gt
triggerThreshold: 0
status: Available
tactics:
  - PrivilegeEscalation
relevantTechniques:
  - T1078.002
query: |
  let adminGroups = dynamic([
      "CN=Domain Admins,CN=Users",
      "CN=Enterprise Admins,CN=Users",
      "CN=Administrators,CN=Builtin",
      "CN=Cert Publishers,CN=Users",
      "CN=Cloneable Domain Controllers,CN=Users",
      "CN=Denied RODC Password Replication Group,CN=Users",
      "CN=DnsAdmins,CN=Users",
      "CN=DnsUpdateProxy,CN=Users",
      "CN=Domain Controllers,CN=Users",
      "CN=Domain Guests,CN=Users",
      "CN=Enterprise Key Admins,CN=Users",
      "CN=Enterprise Read-only Domain Controllers,CN=Users",
      "CN=External Trust Accounts,CN=Users",
      "CN=Forest Trust Accounts,CN=Users",
      "CN=Group Policy Creator Owners,CN=Users",
      "CN=Key Admins,CN=Users",
      "CN=RAS and IAS Servers,CN=Users",
      "CN=Read-only Domain Controllers,CN=Users",
      "CN=Schema Admins,CN=Users",
      "CN=Access Control Assistance Operators,CN=Builtin",
      "CN=Account Operators,CN=Builtin",
      "CN=Backup Operators,CN=Builtin",
      "CN=Certificate Service DCOM Access,CN=Builtin",
      "CN=Cryptographic Operators,CN=Builtin",
      "CN=Distributed COM Users,CN=Builtin",
      "CN=Event Log Readers,CN=Builtin",
      "CN=Guests,CN=Builtin",
      "CN=Hyper-V Administrators,CN=Builtin",
      "CN=IIS_IUSRS,CN=Builtin",
      "CN=Incoming Forest Trust Builders,CN=Builtin",
      "CN=Network Configuration Operators,CN=Builtin",
      "CN=OpenSSH Users,CN=Builtin",
      "CN=Performance Log Users,CN=Builtin",
      "CN=Performance Monitor Users,CN=Builtin",
      "CN=Pre-Windows 2000 Compatible Access,CN=Builtin",
      "CN=Print Operators,CN=Builtin",
      "CN=RDS Endpoint Servers,CN=Builtin",
      "CN=RDS Management Servers,CN=Builtin",
      "CN=RDS Remote Access Servers,CN=Builtin",
      "CN=Remote Desktop Users,CN=Builtin",
      "CN=Remote Management Users,CN=Builtin",
      "CN=Replicator,CN=Builtin",
      "CN=Server Operators,CN=Builtin",
      "CN=Storage Replica Administrators,CN=Builtin",
      "CN=Terminal Server License Servers,CN=Builtin",
      "CN=Users,CN=Builtin",
      "CN=Windows Authorization Access Group,CN=Builtin",
      "CN=Tier 0 Admins,OU=Tier 0 Groups,OU=Tier 0,OU=Tier Model Administration",
      "CN=Tier 0 Server Operators,OU=Tier 0 Groups,OU=Tier 0,OU=Tier Model Administration",
      "CN=Tier 1 Admins,OU=Tier 1 Groups,OU=Tier 1,OU=Tier Model Administration",
      "CN=Tier 1 Server Operators,OU=Tier 1 Groups,OU=Tier 1,OU=Tier Model Administration",
      "CN=Tier 2 Admins,OU=Tier 2 Groups,OU=Tier 2,OU=Tier Model Administration"
  ]);
  SecurityEvent
  | where EventID == 5136
  | extend EventData = tostring(EventData)
  | where EventData has_any(adminGroups)
      and EventData has '"AttributeLDAPDisplayName">member'
      and EventData has 'OperationType">%%14674'
  | extend GroupName_e = extract("<Data Name=\"ObjectDN\">([^<]+)</Data>", 1, EventData)
  | extend GroupName = extract("(?i)CN=([^,]+)", 1, GroupName_e)
  | extend GroupTier = case(
      GroupName has "Tier 0", "Tier 0",
      GroupName has "Tier 1", "Tier 1",
      GroupName has "Tier 2", "Tier 2",
      "Tier 0")
  | extend ObjectName_e = extract("<Data Name=\"AttributeValue\">([^<]+)</Data>", 1, EventData)
  | extend ObjectName = extract("(?i)CN=([^,]+)", 1, ObjectName_e)
  | extend ObjectTier = case(
      ObjectName_e has "Tier 0", "Tier 0",
      ObjectName_e has "Tier 1", "Tier 1",
      ObjectName_e has "Tier 2", "Tier 2",
      "Outside Tier Model")
  | extend Domain = extract("([^.]+\\.[^.]+)$", 1, Computer)
  | extend ActivityType = extract("([a-zA-Z]+)\\.$", 1, Activity)
  | extend SubjectUserName = extract("<Data Name=\"SubjectUserName\">([^<]+)</Data>", 1, EventData)
  | extend SubjectDomainName = extract("<Data Name=\"SubjectDomainName\">([^<]+)</Data>", 1, EventData)
  | extend Account = strcat(SubjectDomainName, "\\", SubjectUserName)
  | extend OperationType = iff(EventData has 'OperationType">%%14674', "Added", tostring(OperationType))
  | project TimeGenerated 
          , ObjectName
          , ObjectTier
          , ObjectType = AccountType
          , GroupName
          , GroupTier
          , ActivityType
          , OperationType
          , Account
          , Domain
          , Computer
          , Channel
          , EventID
          , EventData
entityMappings:
  - entityType: Account
    fieldMappings:
      - identifier: FullName
        columnName: ObjectName
  - entityType: Host
    fieldMappings:
      - identifier: HostName
        columnName: Computer
  - entityType: Account
    fieldMappings:
      - identifier: FullName
        columnName: Account
customDetails:
  ObjectName: ObjectName
  ObjectTier: ObjectTier
  ObjectType: ObjectType
  GroupName: GroupName
  GroupTier: GroupTier
  ActivityType: ActivityType
  OperationType: OperationType
  Account: Account
  Domain: Domain
  Computer: Computer
  Channel: Channel
  EventID: EventID
  EventData: EventData
eventGroupingSettings:
  aggregationKind: AlertPerResult
incidentConfiguration:
  createIncident: true
  groupingConfiguration:
    enabled: false
    reopenClosedIncident: false
    lookbackDuration: PT5H
    matchingMethod: AllEntities
alertDetailsOverride:
  alertDisplayNameFormat: '(TM016.1) A member was added to {{GroupName}} which is a Well-Known or Tier Model Group'
  alertDescriptionFormat: 'The following object {{ObjectName}} was added to a {{ObjectTier}}  Well-Known or Tier Model high privilege group.'
version: 1.0.0
kind: Scheduled

Stages and Predicates

Let binding: adminGroups used in Stage 4

let adminGroups = dynamic([
    "CN=Domain Admins,CN=Users",
    "CN=Enterprise Admins,CN=Users",
    "CN=Administrators,CN=Builtin",
    "CN=Cert Publishers,CN=Users",
    "CN=Cloneable Domain Controllers,CN=Users",
    "CN=Denied RODC Password Replication Group,CN=Users",
    "CN=DnsAdmins,CN=Users",
    "CN=DnsUpdateProxy,CN=Users",
    "CN=Domain Controllers,CN=Users",
    "CN=Domain Guests,CN=Users",
    "CN=Enterprise Key Admins,CN=Users",
    "CN=Enterprise Read-only Domain Controllers,CN=Users",
    "CN=External Trust Accounts,CN=Users",
    "CN=Forest Trust Accounts,CN=Users",
    "CN=Group Policy Creator Owners,CN=Users",
    "CN=Key Admins,CN=Users",
    "CN=RAS and IAS Servers,CN=Users",
    "CN=Read-only Domain Controllers,CN=Users",
    "CN=Schema Admins,CN=Users",
    "CN=Access Control Assistance Operators,CN=Builtin",
    "CN=Account Operators,CN=Builtin",
    "CN=Backup Operators,CN=Builtin",
    "CN=Certificate Service DCOM Access,CN=Builtin",
    "CN=Cryptographic Operators,CN=Builtin",
    "CN=Distributed COM Users,CN=Builtin",
    "CN=Event Log Readers,CN=Builtin",
    "CN=Guests,CN=Builtin",
    "CN=Hyper-V Administrators,CN=Builtin",
    "CN=IIS_IUSRS,CN=Builtin",
    "CN=Incoming Forest Trust Builders,CN=Builtin",
    "CN=Network Configuration Operators,CN=Builtin",
    "CN=OpenSSH Users,CN=Builtin",
    "CN=Performance Log Users,CN=Builtin",
    "CN=Performance Monitor Users,CN=Builtin",
    "CN=Pre-Windows 2000 Compatible Access,CN=Builtin",
    "CN=Print Operators,CN=Builtin",
    "CN=RDS Endpoint Servers,CN=Builtin",
    "CN=RDS Management Servers,CN=Builtin",
    "CN=RDS Remote Access Servers,CN=Builtin",
    "CN=Remote Desktop Users,CN=Builtin",
    "CN=Remote Management Users,CN=Builtin",
    "CN=Replicator,CN=Builtin",
    "CN=Server Operators,CN=Builtin",
    "CN=Storage Replica Administrators,CN=Builtin",
    "CN=Terminal Server License Servers,CN=Builtin",
    "CN=Users,CN=Builtin",
    "CN=Windows Authorization Access Group,CN=Builtin",
    "CN=Tier 0 Admins,OU=Tier 0 Groups,OU=Tier 0,OU=Tier Model Administration",
    "CN=Tier 0 Server Operators,OU=Tier 0 Groups,OU=Tier 0,OU=Tier Model Administration",
    "CN=Tier 1 Admins,OU=Tier 1 Groups,OU=Tier 1,OU=Tier Model Administration",
    "CN=Tier 1 Server Operators,OU=Tier 1 Groups,OU=Tier 1,OU=Tier Model Administration",
    "CN=Tier 2 Admins,OU=Tier 2 Groups,OU=Tier 2,OU=Tier Model Administration"
]);

Stage 1: source

SecurityEvent

Stage 2: where

| where EventID == 5136

Stage 3: extend

| extend EventData = tostring(EventData)

Stage 4: where

| where EventData has_any(adminGroups)
    and EventData has '"AttributeLDAPDisplayName">member'
    and EventData has 'OperationType">%%14674'

Stage 5: extend (12 consecutive steps)

| extend GroupName_e = extract("<Data Name=\"ObjectDN\">([^<]+)</Data>", 1, EventData)
| extend GroupName = extract("(?i)CN=([^,]+)", 1, GroupName_e)
| extend GroupTier = case(
    GroupName has "Tier 0", "Tier 0",
    GroupName has "Tier 1", "Tier 1",
    GroupName has "Tier 2", "Tier 2",
    "Tier 0")
| extend ObjectName_e = extract("<Data Name=\"AttributeValue\">([^<]+)</Data>", 1, EventData)
| extend ObjectName = extract("(?i)CN=([^,]+)", 1, ObjectName_e)
| extend ObjectTier = case(
    ObjectName_e has "Tier 0", "Tier 0",
    ObjectName_e has "Tier 1", "Tier 1",
    ObjectName_e has "Tier 2", "Tier 2",
    "Outside Tier Model")
| extend Domain = extract("([^.]+\\.[^.]+)$", 1, Computer)
| extend ActivityType = extract("([a-zA-Z]+)\\.$", 1, Activity)
| extend SubjectUserName = extract("<Data Name=\"SubjectUserName\">([^<]+)</Data>", 1, EventData)
| extend SubjectDomainName = extract("<Data Name=\"SubjectDomainName\">([^<]+)</Data>", 1, EventData)
| extend Account = strcat(SubjectDomainName, "\\", SubjectUserName)
| extend OperationType = iff(EventData has 'OperationType">%%14674', "Added", tostring(OperationType))

Stage 6: project

| project TimeGenerated 
        , ObjectName
        , ObjectTier
        , ObjectType = AccountType
        , GroupName
        , GroupTier
        , ActivityType
        , OperationType
        , Account
        , Domain
        , Computer
        , Channel
        , EventID
        , EventData

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
EventDatamatch
  • "AttributeLDAPDisplayName">member transforms: term corpus 3 (kusto 3)
  • CN=Access Control Assistance Operators,CN=Builtin transforms: term
  • CN=Account Operators,CN=Builtin transforms: term
  • CN=Administrators,CN=Builtin transforms: term
  • CN=Backup Operators,CN=Builtin transforms: term
  • CN=Cert Publishers,CN=Users transforms: term
  • CN=Certificate Service DCOM Access,CN=Builtin transforms: term
  • CN=Cloneable Domain Controllers,CN=Users transforms: term
  • CN=Cryptographic Operators,CN=Builtin transforms: term
  • CN=Denied RODC Password Replication Group,CN=Users transforms: term
  • CN=Distributed COM Users,CN=Builtin transforms: term
  • CN=DnsAdmins,CN=Users transforms: term
  • CN=DnsUpdateProxy,CN=Users transforms: term
  • CN=Domain Admins,CN=Users transforms: term
  • CN=Domain Controllers,CN=Users transforms: term
  • CN=Domain Guests,CN=Users transforms: term
  • CN=Enterprise Admins,CN=Users transforms: term
  • CN=Enterprise Key Admins,CN=Users transforms: term
  • CN=Enterprise Read-only Domain Controllers,CN=Users transforms: term
  • CN=Event Log Readers,CN=Builtin transforms: term
  • CN=External Trust Accounts,CN=Users transforms: term
  • CN=Forest Trust Accounts,CN=Users transforms: term
  • CN=Group Policy Creator Owners,CN=Users transforms: term
  • CN=Guests,CN=Builtin transforms: term
  • CN=Hyper-V Administrators,CN=Builtin transforms: term
  • CN=IIS_IUSRS,CN=Builtin transforms: term
  • CN=Incoming Forest Trust Builders,CN=Builtin transforms: term
  • CN=Key Admins,CN=Users transforms: term
  • CN=Network Configuration Operators,CN=Builtin transforms: term
  • CN=OpenSSH Users,CN=Builtin transforms: term
  • CN=Performance Log Users,CN=Builtin transforms: term
  • CN=Performance Monitor Users,CN=Builtin transforms: term
  • CN=Pre-Windows 2000 Compatible Access,CN=Builtin transforms: term
  • CN=Print Operators,CN=Builtin transforms: term
  • CN=RAS and IAS Servers,CN=Users transforms: term
  • CN=RDS Endpoint Servers,CN=Builtin transforms: term
  • CN=RDS Management Servers,CN=Builtin transforms: term
  • CN=RDS Remote Access Servers,CN=Builtin transforms: term
  • CN=Read-only Domain Controllers,CN=Users transforms: term
  • CN=Remote Desktop Users,CN=Builtin transforms: term
  • CN=Remote Management Users,CN=Builtin transforms: term
  • CN=Replicator,CN=Builtin transforms: term
  • CN=Schema Admins,CN=Users transforms: term
  • CN=Server Operators,CN=Builtin transforms: term
  • CN=Storage Replica Administrators,CN=Builtin transforms: term
  • CN=Terminal Server License Servers,CN=Builtin transforms: term
  • CN=Tier 0 Admins,OU=Tier 0 Groups,OU=Tier 0,OU=Tier Model Administration transforms: term
  • CN=Tier 0 Server Operators,OU=Tier 0 Groups,OU=Tier 0,OU=Tier Model Administration transforms: term
  • CN=Tier 1 Admins,OU=Tier 1 Groups,OU=Tier 1,OU=Tier Model Administration transforms: term
  • CN=Tier 1 Server Operators,OU=Tier 1 Groups,OU=Tier 1,OU=Tier Model Administration transforms: term
  • CN=Tier 2 Admins,OU=Tier 2 Groups,OU=Tier 2,OU=Tier Model Administration transforms: term
  • CN=Users,CN=Builtin transforms: term
  • CN=Windows Authorization Access Group,CN=Builtin transforms: term
  • OperationType">%%14674 transforms: term corpus 4 (kusto 4)
field:"EventData" kind:match
EventIDeq
  • 5136 corpus 45 (splunk 24, kusto 18, elastic 3)
field:"EventID" kind:eq value:"5136"

Output fields

These fields are emitted when the rule matches.

FieldSource
Accountproject
ActivityTypeproject
Channelproject
Computerproject
Domainproject
EventDataproject
EventIDproject
GroupNameproject
GroupTierproject
ObjectNameproject
ObjectTierproject
ObjectTypeproject
OperationTypeproject
TimeGeneratedproject