Detection rules › Kusto

Common Event Format (CEF) via AMA - Critical or High Severity Detections by User

Status
available
Severity
high
Time window
1h
Group by
DstHostName, DstUserName, FileHash, FileName, Message, SrcIpAddr
Source
github.com/Azure/Azure-Sentinel

'Creates an incident when a large number of Critical or High severity CrowdStrike Falcon sensor detections is triggered by a single user within 1 hour. The rule uses the CrowdStrikeFalconEventStream table, filters for DetectionSummaryEvent records with Severity set to Critical or High, and alerts when detections for a single DstUserName exceed the configured threshold of 15. Review DstHostName, SrcIpAddr, FileName, FileHash, and Message for investigation context.'

MITRE ATT&CK coverage

TacticTechniques
Defense Impairment
Impact

Rule body

id: 4465ebde-b381-45f7-ad08-7d818070a11c
name: Common Event Format (CEF) via AMA - Critical or High Severity Detections by User
description: |
  'Creates an incident when a large number of Critical or High severity CrowdStrike Falcon sensor detections is triggered by a single user within 1 hour. The rule uses the CrowdStrikeFalconEventStream table, filters for DetectionSummaryEvent records with Severity set to Critical or High, and alerts when detections for a single DstUserName exceed the configured threshold of 15. Review DstHostName, SrcIpAddr, FileName, FileHash, and Message for investigation context.'
severity: High
status: Available
requiredDataConnectors:
  - connectorId: CefAma
    dataTypes:
      - CommonSecurityLog
queryFrequency: 1h
queryPeriod: 1h
triggerOperator: gt
triggerThreshold: 0
tactics: 
- Impact
- DefenseEvasion
relevantTechniques:
- T1489
- T1562
query: |
  let timeframe = 1h;
  let threshold = 15; // update threshold value based on organization's preference
  let NotableEvents = CrowdStrikeFalconEventStream
  | where TimeGenerated > ago(timeframe)
  | where EventType == "DetectionSummaryEvent"
  | where Severity in ("Critical", "High")
  | summarize StartTimeUtc = min(TimeGenerated), EndTimeUtc = max(TimeGenerated), Total = count() by DstUserName, DstHostName, SrcIpAddr, FileName, FileHash, Message
  | where Total > threshold;
  NotableEvents
  | extend timestamp = StartTimeUtc, AccountCustomEntity = DstUserName, HostCustomEntity = DstHostName, IPCustomEntity = SrcIpAddr, FileHashCustomEntity = FileHash, FileHashAlgo = "MD5"
  | project timestamp, StartTimeUtc, EndTimeUtc, DstUserName, DstHostName, SrcIpAddr, FileName, FileHash, FileHashAlgo, Message, Total, AccountCustomEntity, HostCustomEntity, IPCustomEntity, FileHashCustomEntity
entityMappings:
- entityType: Account
  fieldMappings:
  - identifier: FullName
    columnName: AccountCustomEntity
- entityType: Host
  fieldMappings:
  - identifier: FullName
    columnName: HostCustomEntity
- entityType: IP
  fieldMappings:
  - identifier: Address
    columnName: IPCustomEntity
- entityType: FileHash
  fieldMappings:
  - identifier: Algorithm
    columnName: FileHashAlgo
  - identifier: Value
    columnName: FileHashCustomEntity
alertDetailsOverride:
  alertDisplayNameFormat: 'CrowdStrike critical/high detections by user: {{DstUserName}}'
  alertDescriptionFormat: User {{DstUserName}} generated {{Total}} critical/high detections from host {{DstHostName}}.
customDetails:
  DstUserName: DstUserName
  DstHostName: DstHostName
  SrcIpAddr: SrcIpAddr
  FileName: FileName
  FileHash: FileHash
  Total: Total
version: 1.0.6
kind: Scheduled

Stages and Predicates

Parameters

let timeframe = 1h;
let threshold = 15;

let NotableEvents is inlined into the numbered stages below.

Stages 1 to 6 define let NotableEvents (the rule's main pipeline source); stages 7 to 8 run on it.

Stage 1: source

CrowdStrikeFalconEventStream

Stage 2: where

| where TimeGenerated > ago(timeframe)

Stage 3: where

| where EventType == "DetectionSummaryEvent"

Stage 4: where

| where Severity in ("Critical", "High")

Stage 5: summarize

| summarize StartTimeUtc = min(TimeGenerated), EndTimeUtc = max(TimeGenerated), Total = count() by DstUserName, DstHostName, SrcIpAddr, FileName, FileHash, Message

Stage 6: where

| where Total > threshold

Stage 7: extend

NotableEvents
| extend timestamp = StartTimeUtc, AccountCustomEntity = DstUserName, HostCustomEntity = DstHostName, IPCustomEntity = SrcIpAddr, FileHashCustomEntity = FileHash, FileHashAlgo = "MD5"

Stage 8: project

| project timestamp, StartTimeUtc, EndTimeUtc, DstUserName, DstHostName, SrcIpAddr, FileName, FileHash, FileHashAlgo, Message, Total, AccountCustomEntity, HostCustomEntity, IPCustomEntity, FileHashCustomEntity

Indicators

These rows show field, operator, and value matches.

Output fields

These fields are emitted when the rule matches.

FieldSource
AccountCustomEntityproject
DstHostNameproject
DstUserNameproject
EndTimeUtcproject
FileHashproject
FileHashAlgoproject
FileHashCustomEntityproject
FileNameproject
HostCustomEntityproject
IPCustomEntityproject
Messageproject
SrcIpAddrproject
StartTimeUtcproject
Totalproject
timestampproject