Detection rules › Kusto

Malware Detection Session Finished

Status
available
Severity
informational
Time window
3h
Group by
JobResult, Result
Source
github.com/Azure/Azure-Sentinel

Detects when malware detection session finishes.

Rule body kusto

id: 88b9223c-29ff-48a9-a745-c553aa0dbae2
name: Malware Detection Session Finished
description: Detects when malware detection session finishes.
severity: Informational
status: Available
requiredDataConnectors:
- connectorId: Syslog
  dataTypes:
  - Syslog
- connectorId: SyslogAma
  dataTypes:
  - Syslog
queryFrequency: 3h
queryPeriod: 3h
triggerOperator: gt
triggerThreshold: 0
eventGroupingSettings:
  aggregationKind: AlertPerResult
tactics: []
relevantTechniques: []
query: "let action_results_lookup = union isfuzzy=true (datatable(JobResult:string,\
  \ JobResultMessage:string)[]), (_GetWatchlist(\"action_results_lookup\")); \nVeeam_GetSecurityEvents\n\
  | where instanceId == 42210\n| extend Result = extract(\"Result=\\\"([^\\\"]*)\\\
  \"\", 1, SyslogMessage)\n| extend SessionID = extract(\"SessionID=\\\"([^\\\"]*)\\\
  \"\", 1, SyslogMessage)\n| lookup kind=leftouter (action_results_lookup)\n    on\
  \ $left.Result == $right.JobResult\n| project\n    Date = format_datetime(TimeGenerated,\
  \ 'dd.MM.yyyy HH:mm'),\n    DataSource = original_host,\n    EventId = instanceId,\n\
  \    [\"Session ID\"] = SessionID,\n    [\"StateMessage\"] = JobResultMessage,\n\
  \    MessageDetails = Description,\n    Severity = SeverityDescription\n"
version: 1.0.1
kind: Scheduled
customDetails:
  Date: Date
  VbrHostName: DataSource
  EventId: EventId
  MessageDetails: MessageDetails
  Severity: Severity

Stages and Predicates

Parameters

let action_results_lookup = union isfuzzy=true (datatable(JobResult:string, JobResultMessage:string)[]), (_GetWatchlist("action_results_lookup"));

Stage 1: source

Veeam_GetSecurityEvents

Stage 2: where

| where instanceId == 42210

Stage 3: extend

| extend Result = extract("Result=\"([^\"]*)\"", 1, SyslogMessage)

Stage 4: extend

| extend SessionID = extract("SessionID=\"([^\"]*)\"", 1, SyslogMessage)

Stage 5: kusto:lookup

| lookup kind=leftouter (action_results_lookup)
    on $left.Result == $right.JobResult

Stage 6: project

| project
    Date = format_datetime(TimeGenerated, 'dd.MM.yyyy HH:mm'),
    DataSource = original_host,
    EventId = instanceId,
    ["Session ID"] = SessionID,
    ["StateMessage"] = JobResultMessage,
    MessageDetails = Description,
    Severity = SeverityDescription

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
  • 42210 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
MessageDetailsproject
Session IDproject
Severityproject
StateMessageproject