Detection rules › Kusto

Votiro - File Blocked from Connector

Severity
low
Time window
10m
Group by
FileWithConnectorDetails, LogSeverity, SrcFileSHA256, fileName, policyName, sanitizationResult
Source
github.com/Azure/Azure-Sentinel

'The analytic rule is intended to detect when a file is blocked by Votiro Sanitization Engine due to a specific policy, and notify the appropriate parties so that they can take appropriate action. The alert message will state that a file with a specific name and hash value was blocked by Votiro Sanatization Engine due to a specific policy name, and that more details can be found at a specific incident URL.'

MITRE ATT&CK coverage

Rule body kusto

id: 17bf3780-ae0d-4cd9-a884-5df8b687f3f5
name: Votiro - File Blocked from Connector
description: |
 'The analytic rule is intended to detect when a file is blocked by Votiro Sanitization Engine due to a specific policy, and notify the appropriate parties so that they can take appropriate action. The alert message will state that a file with a specific name and hash value was blocked by Votiro Sanatization Engine due to a specific policy name, and that more details can be found at a specific incident URL.'
severity: Low
requiredDataConnectors:
  - connectorId: Votiro
    dataTypes:
      - CommonSecurityLog 
  - connectorId: CefAma
    dataTypes:
      - CommonSecurityLog
queryFrequency: 10m
queryPeriod: 10m
triggerOperator: gt
triggerThreshold: 0
tactics:
  - DefenseEvasion
  - Discovery
  - Impact
relevantTechniques:
  - T1036
  - T1083
  - T1057
  - T1082
  - T1565
  - T1498
  - T0837
query: let Votiro_view  = view () {
  VotiroEvents
  | where sanitizationResult has "Blocked" and passwordProtected == "false" and from =~ "null"
  | extend FileWithConnectorDetails = strcat_delim(' ', fileName, 'with the hash', SrcFileSHA256, 'that was sent from connector', connectorName)
  | summarize count() by fileName, SrcFileSHA256, FileWithConnectorDetails, policyName, tostring(incidentURL), sanitizationResult, LogSeverity
  | extend FileHashAlgo = "SHA256", FileHashValue = SrcFileSHA256};Votiro_view
entityMappings:
- entityType: FileHash
  fieldMappings:
    - identifier: Algorithm
      columnName: FileHashAlgo
    - identifier: Value
      columnName: FileHashValue
incidentConfiguration:
  createIncident: true
eventGroupingSettings:
  aggregationKind: AlertPerResult
alertDetailsOverride: 
   alertDisplayNameFormat: File with hash {{SrcFileSHA256}} was blocked
   alertDescriptionFormat: The {{FileWithConnectorDetails}} was blocked by Votiro due to Policy rules, see more detail in the following link {{incidentURL}}
   alertTacticsColumnName: sanitizationResult
   alertSeverityColumnName: LogSeverity
version: 1.0.1
kind: Scheduled

Stages and Predicates

Let binding: Votiro_view

let Votiro_view = view () { VotiroEvents | where sanitizationResult has "Blocked" and passwordProtected == "false" and from =~ "null" | extend FileWithConnectorDetails = strcat_delim(' ', fileName, 'with the hash', SrcFileSHA256, 'that was sent from connector', connectorName) | summarize count() by fileName, SrcFileSHA256, FileWithConnectorDetails, policyName, tostring(incidentURL), sanitizationResult, LogSeverity | extend FileHashAlgo = "SHA256", FileHashValue = SrcFileSHA256};

Stage 1: source

VotiroEvents

Stage 2: where

where from =~ "null" and passwordProtected =~ false and sanitizationResult contains "Blocked"

Stage 3: extend

extend FileWithConnectorDetails

Stage 4: summarize

summarize by fileName, SrcFileSHA256, FileWithConnectorDetails, policyName, sanitizationResult, LogSeverity

Stage 5: extend

extend FileHashAlgo, FileHashValue

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
fromeq
  • null
passwordProtectedeq
  • false transforms: cased
sanitizationResultmatch
  • Blocked transforms: term

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
FileWithConnectorDetailssummarize
LogSeveritysummarize
SrcFileSHA256summarize
fileNamesummarize
policyNamesummarize
sanitizationResultsummarize
FileHashAlgoextend
FileHashValueextend