Detection rules › Kusto

Vaikora - Anomaly detection

This is a third-party alert feed, not a detection over modeled telemetry. The vendor product raised the finding; this rule forwards it into the SIEM. It is searchable for reference but is excluded from the detection-rule browse and the ATT&CK coverage matrix.

Status
available
Severity
medium
Time window
6h
Source
github.com/Azure/Azure-Sentinel

Identifies actions flagged as anomalies or confirmed threats by Vaikora. Catches behavioral anomalies that fall below high/critical severity but still represent statistically unusual activity worth investigating.

MITRE ATT&CK coverage

TacticTechniques
DiscoveryNo specific technique
Lateral MovementNo specific technique
CollectionNo specific technique
ExfiltrationNo specific technique

Rule body kusto

id: c0984707-0855-430e-9c36-5e2d0d0ce56f
name: Vaikora - Anomaly detection
description: |
  Identifies actions flagged as anomalies or confirmed threats by Vaikora. Catches behavioral anomalies that fall below high/critical severity but still represent statistically unusual activity worth investigating.
severity: Medium
requiredDataConnectors:
  - connectorId: VaikoraSecurityCenter
    dataTypes:
      - Vaikora_SecurityAlerts_CL
queryFrequency: 6h
queryPeriod: 6h
triggerOperator: gt
triggerThreshold: 0
status: Available
tactics:
  - Discovery
  - LateralMovement
  - Collection
  - Exfiltration
relevantTechniques: []
query: |
  Vaikora_SecurityAlerts_CL
  | where TimeGenerated >= ago(6h)
  | where IsAnomaly_b == true or ThreatDetected_b == true
  | where Severity_s !in ("high", "critical")
  | extend
      AlertId       = AlertId_s,
      AgentId       = AgentId_s,
      ActionType    = ActionType_s,
      Severity      = Severity_s,
      Title         = Title_s,
      Description   = Description_s,
      SourceIP      = SourceIP,
      DestinationIP = DestinationIP_s,
      SourceHost    = SourceHost_s,
      DestHost      = DestinationHost_s,
      ProcessName   = ProcessName_s,
      UserName      = UserName_s,
      FilePath      = FilePath_s,
      Confidence    = ConfidenceScore_d,
      ThreatFlag    = ThreatDetected_b,
      AnomalyFlag   = IsAnomaly_b
  | project
      TimeGenerated, AlertId, AgentId, ActionType, Severity, Title, Description,
      SourceIP, DestinationIP, SourceHost, DestHost, ProcessName, UserName, FilePath,
      Confidence, ThreatFlag, AnomalyFlag
  | order by Confidence desc, TimeGenerated desc
entityMappings:
  - entityType: IP
    fieldMappings:
      - identifier: Address
        columnName: SourceIP
  - entityType: Host
    fieldMappings:
      - identifier: HostName
        columnName: SourceHost
  - entityType: Account
    fieldMappings:
      - identifier: Name
        columnName: UserName
alertDetailsOverride:
  alertDisplayNameFormat: "Vaikora Anomaly: {{Title_s}} (confidence: {{ConfidenceScore_d}})"
  alertDescriptionFormat: "Vaikora AI detected a threat on agent {{AgentId_s}} (ThreatDetected={{ThreatDetected_b}}). {{Description_s}}"
version: 1.0.0
kind: Scheduled

Stages and Predicates

Stage 1: source

Vaikora_SecurityAlerts_CL

Stage 2: where

| where TimeGenerated >= ago(6h)

Stage 3: where

| where IsAnomaly_b == true or ThreatDetected_b == true

Stage 4: where

| where Severity_s !in ("high", "critical")

Stage 5: extend

| extend
    AlertId       = AlertId_s,
    AgentId       = AgentId_s,
    ActionType    = ActionType_s,
    Severity      = Severity_s,
    Title         = Title_s,
    Description   = Description_s,
    SourceIP      = SourceIP,
    DestinationIP = DestinationIP_s,
    SourceHost    = SourceHost_s,
    DestHost      = DestinationHost_s,
    ProcessName   = ProcessName_s,
    UserName      = UserName_s,
    FilePath      = FilePath_s,
    Confidence    = ConfidenceScore_d,
    ThreatFlag    = ThreatDetected_b,
    AnomalyFlag   = IsAnomaly_b

Stage 6: project

| project
    TimeGenerated, AlertId, AgentId, ActionType, Severity, Title, Description,
    SourceIP, DestinationIP, SourceHost, DestHost, ProcessName, UserName, FilePath,
    Confidence, ThreatFlag, AnomalyFlag

Stage 7: sort

| order by Confidence desc, TimeGenerated desc

Exclusions

Top-level NOT(...) conjuncts: predicates this rule actively suppresses.

FieldKindExcluded values
Severity_sincritical, high

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
IsAnomaly_beq
  • true transforms: cased
ThreatDetected_beq
  • true 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
ActionTypeproject
AgentIdproject
AlertIdproject
AnomalyFlagproject
Confidenceproject
Descriptionproject
DestHostproject
DestinationIPproject
FilePathproject
ProcessNameproject
Severityproject
SourceHostproject
SourceIPproject
ThreatFlagproject
TimeGeneratedproject
Titleproject
UserNameproject