Detection rules › Kusto

Palo Alto Prisma Cloud - High severity alert opened for several days

Status
available
Severity
medium
Time window
14d
Source
github.com/Azure/Azure-Sentinel

'Detects high severity alert which is opened for several days.'

MITRE ATT&CK coverage

TacticTechniques
Initial Access

Rule body

id: c5bf680f-fa37-47c3-9f38-e839a9b99c05
name: Palo Alto Prisma Cloud - High severity alert opened for several days
description: |
  'Detects high severity alert which is opened for several days.'
severity: Medium
status: Available
requiredDataConnectors:
  - connectorId: PaloAltoPrismaCloud
    dataTypes:
      - PaloAltoPrismaCloud
queryFrequency: 1d
queryPeriod: 14d
triggerOperator: gt
triggerThreshold: 0
tactics:
  - InitialAccess
relevantTechniques:
  - T1133
query: |
  let ResolvedAlerts = PaloAltoPrismaCloud
  | summarize result = make_set(Status) by AlertId
  | where result has 'resolved'
  | project AlertId;
  PaloAltoPrismaCloud
  | where Reason =~ 'NEW_ALERT'
  | where AlertSeverity =~ 'high' 
  | where Status =~ 'open'
  | where AlertId !in (ResolvedAlerts)
  | extend alert_time = now() - TimeGenerated
  | where alert_time > 1d
  | extend ['Opened Days'] = strcat('Alert opened for ', strcat(toint(alert_time / 1d), ' days'))
  | distinct AlertId, AlertMessage, AlertSeverity, ['Opened Days'], ResourceId, UserName
  | extend AccountCustomEntity = UserName
entityMappings:
  - entityType: Account
    fieldMappings:
      - identifier: Name
        columnName: AccountCustomEntity
version: 1.0.2
kind: Scheduled

Stages and Predicates

Let binding: ResolvedAlerts used in Stage 5

let ResolvedAlerts = PaloAltoPrismaCloud
| summarize result = make_set(Status) by AlertId
| where result has 'resolved'
| project AlertId;

Stage 1: source

PaloAltoPrismaCloud

Stage 2: where

| where Reason =~ 'NEW_ALERT'

Stage 3: where

| where AlertSeverity =~ 'high'

Stage 4: where

| where Status =~ 'open'

Stage 5: where

| where AlertId !in (ResolvedAlerts)

Stage 6: extend

| extend alert_time = now() - TimeGenerated

Stage 7: where

| where alert_time > 1d

Stage 8: extend

| extend ['Opened Days'] = strcat('Alert opened for ', strcat(toint(alert_time / 1d), ' days'))

Stage 9: distinct

| distinct AlertId, AlertMessage, AlertSeverity, ['Opened Days'], ResourceId, UserName

Stage 10: extend

| extend AccountCustomEntity = UserName

Exclusions

The rule actively suppresses these predicates.

FieldKindExcluded valuesSearch
AlertIdeqResolvedAlertsexcludes:AlertId field:"AlertId" value:"ResolvedAlerts"

Indicators

These rows show field, operator, and value matches.

Output fields

These fields are emitted when the rule matches.

FieldSource
alert_timeextend
Opened Daysextend
AccountCustomEntityextend