Detection rules › Kusto

SlackAudit - Multiple archived files uploaded in short period of time

Status
available
Severity
low
Time window
15m
Group by
SrcUserName, bucket
Source
github.com/Azure/Azure-Sentinel

'This query helps to detect when a user uploads multiple archived files in short period of time.'

MITRE ATT&CK coverage

TacticTechniques
ExfiltrationT1567 Exfiltration Over Web Service

Rule body kusto

id: 3db0cb83-5fa4-4310-a8a0-d8d66183f0bd
name: SlackAudit - Multiple archived files uploaded in short period of time
description: |
  'This query helps to detect when a user uploads multiple archived files in short period of time.'
severity: Low
status: Available
requiredDataConnectors:
  - connectorId: SlackAuditAPI
    dataTypes:
      - SlackAudit_CL
queryFrequency: 1d
queryPeriod: 1d
triggerOperator: gt
triggerThreshold: 0
tactics: 
  - Exfiltration
relevantTechniques:
  - T1567
query: |
  let threshold = 10;
  SlackAudit
  | where DvcAction =~ 'file_uploaded'
  | extend FE = tolower(tostring(split(EntityFileName, '.')[-1]))
  | where FE in~ ('tar', 'bz2', 'gz', 'tgz', 'z', 'tbz2', 'zst', 'zip', 'zipx', '7z', 'rar', 'sfx')
  | summarize UploadCount = count(), StartTime = min(TimeGenerated), EndTime = max(TimeGenerated) by SrcUserName, bucket = bin(TimeGenerated, 15m)
  | where UploadCount > threshold
  | extend AccountCustomEntity = SrcUserName
entityMappings:
  - entityType: Account
    fieldMappings:
      - identifier: FullName
        columnName: AccountCustomEntity
version: 1.0.1
kind: Scheduled

Stages and Predicates

Parameters

let threshold = 10;

Stage 1: source

SlackAudit

Stage 2: where

| where DvcAction =~ 'file_uploaded'

Stage 3: extend

| extend FE = tolower(tostring(split(EntityFileName, '.')[-1]))

Stage 4: where

| where FE in~ ('tar', 'bz2', 'gz', 'tgz', 'z', 'tbz2', 'zst', 'zip', 'zipx', '7z', 'rar', 'sfx')

Stage 5: summarize

| summarize UploadCount = count(), StartTime = min(TimeGenerated), EndTime = max(TimeGenerated) by SrcUserName, bucket = bin(TimeGenerated, 15m)
Threshold
gt 10

Stage 6: where

| where UploadCount > threshold

Stage 7: extend

| extend AccountCustomEntity = SrcUserName

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
DvcActioneq
  • file_uploaded
FEin
  • 7z
  • bz2
  • gz
  • rar
  • sfx
  • tar
  • tbz2
  • tgz
  • z
  • zip
  • zipx
  • zst
UploadCountgt
  • 10 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
EndTimesummarize
SrcUserNamesummarize
StartTimesummarize
UploadCountsummarize
bucketsummarize
AccountCustomEntityextend