Detection rules › Kusto

Malware Activity Detected

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

Detects when restore points marked as suspicious. This might indicate potential compromise of backup data.

Rule body kusto

id: 9a7c80ef-8dc2-4b07-834d-b9ca18d603f7
name: Malware Activity Detected
description: Detects when restore points marked as suspicious. This might indicate
  potential compromise of backup data.
severity: High
status: Available
requiredDataConnectors:
- connectorId: Syslog
  dataTypes:
  - Syslog
- connectorId: SyslogAma
  dataTypes:
  - Syslog
queryFrequency: 5m
queryPeriod: 5m
triggerOperator: gt
triggerThreshold: 0
eventGroupingSettings:
  aggregationKind: AlertPerResult
tactics: []
relevantTechniques: []
query: |
  Veeam_GetSecurityEvents
  | where instanceId == 41600
  | extend ActivityType = extract("ActivityType=\"([^\"]*)\"", 1, SyslogMessage)
  | extend MachineDisplayName = extract("[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}\\s*\\(([^)]+)\\)", 1, Description)
  | extend MachineUuid = extract("([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})", 1, Description)
  | project
      Date = format_datetime(TimeGenerated, 'dd.MM.yyyy HH:mm'),
      DataSource = original_host,
      EventId = instanceId,
      UserName = user,
      ["Malware Detection Method"] = ActivityType,
      MessageDetails = Description,
      Severity = SeverityDescription,
      MachineDisplayName,
      MachineUuid
version: 1.0.2
kind: Scheduled
customDetails:
  Date: Date
  VbrHostName: DataSource
  EventId: EventId
  MessageDetails: MessageDetails
  Severity: Severity
  MachineDisplayName: MachineDisplayName
  MachineUuid: MachineUuid

Stages and Predicates

Stage 1: source

Veeam_GetSecurityEvents

Stage 2: where

| where instanceId == 41600

Stage 3: extend (3 consecutive steps)

| extend ActivityType = extract("ActivityType=\"([^\"]*)\"", 1, SyslogMessage)
| extend MachineDisplayName = extract("[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}\\s*\\(([^)]+)\\)", 1, Description)
| extend MachineUuid = extract("([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})", 1, Description)

Stage 4: project

| project
    Date = format_datetime(TimeGenerated, 'dd.MM.yyyy HH:mm'),
    DataSource = original_host,
    EventId = instanceId,
    UserName = user,
    ["Malware Detection Method"] = ActivityType,
    MessageDetails = Description,
    Severity = SeverityDescription,
    MachineDisplayName,
    MachineUuid

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
instanceIdeq
  • 41600 transforms: cased

Output fields

Fields the rule emits when it matches. Chronicle authors list these in the outcome block; they appear on the detection and $risk_score drives alerting. Sentinel / Defender XDR rules build them up through project / summarize / extend stages. Sentinel maps these into alert fields via entityMappings and customDetails; Defender XDR custom detections surface them as alert fields directly.

FieldSource
DataSourceproject
Dateproject
EventIdproject
MachineDisplayNameproject
MachineUuidproject
Malware Detection Methodproject
MessageDetailsproject
Severityproject
UserNameproject