Detection rules › Kusto
SonicWall - Capture ATP Malicious File Detection
'This rule identifies malicious file verdicts from the SonicWall Capture ATP service. This analytic rule leverages the SonicWall Firewall ASIM Network Session parser (ASimNetworkSessionSonicWallFirewall). Ref: https://www.sonicwall.com/products/capture-advanced-threat-protection/ Ref: https://www.sonicwall.com/support/knowledge-base/how-to-view-threat-reports-capture-atp/170505384715913/'
MITRE ATT&CK coverage
| Tactic | Techniques |
|---|---|
| Execution | T1204 User Execution |
Rule body kusto
id: 3db9f99e-a459-41e0-8e02-8b332f5fcb2c
name: SonicWall - Capture ATP Malicious File Detection
description: |
'This rule identifies malicious file verdicts from the SonicWall Capture ATP service. This analytic rule leverages the SonicWall Firewall ASIM Network Session parser (ASimNetworkSessionSonicWallFirewall).
Ref: https://www.sonicwall.com/products/capture-advanced-threat-protection/
Ref: https://www.sonicwall.com/support/knowledge-base/how-to-view-threat-reports-capture-atp/170505384715913/'
severity: Medium
status: Experimental
requiredDataConnectors:
- connectorId: CefAma
dataTypes:
- CommonSecurityLog
queryFrequency: 5m
queryPeriod: 5m
triggerOperator: gt
triggerThreshold: 0
tactics:
- Execution
relevantTechniques:
- T1204
query: |
CommonSecurityLog
| where DeviceEventClassID == 1631
| extend CaptureATPVerdict = extract(@'Gateway Anti-Virus Status: (.*)\. ', 1, Message)
| where CaptureATPVerdict == "BAD"
| parse-kv AdditionalExtensions as (['susr']:string, ['fileid']:string) with (pair_delimiter=";", kv_delimiter="=")
| extend
NetworkProtocol = toupper(iff(Protocol contains "-" and Protocol !contains "/", toupper(trim_start(@".*-", Protocol)), toupper(trim_end(@"/.*", Protocol)))),
NetworkApplicationProtocol = tostring(toupper(trim_start(@".*/", Protocol)))
| project
TimeGenerated,
DeviceModel = DeviceProduct,
SerialNumber = Computer,
SrcIpAddr = SourceIP,
SrcUsername = coalesce(susr, SourceUserName),
NetworkProtocol,
NetworkApplicationProtocol,
RequestURL,
File = url_decode(tostring(split(RequestURL, '/')[-1])),
Hash = fileid,
Verdict = CaptureATPVerdict
entityMappings:
- entityType: File
fieldMappings:
- identifier: Name
columnName: File
- entityType: Url
fieldMappings:
- identifier: Url
columnName: RequestURL
- entityType: Account
fieldMappings:
- identifier: FullName
columnName: SrcUsername
- entityType: IP
fieldMappings:
- identifier: Address
columnName: SrcIpAddr
version: 1.0.2
kind: Scheduled
Stages and Predicates
Stage 1: source
CommonSecurityLog
Stage 2: where
| where DeviceEventClassID == 1631
Stage 3: extend
| extend CaptureATPVerdict = extract(@'Gateway Anti-Virus Status: (.*)\. ', 1, Message)
Stage 4: where
| where CaptureATPVerdict == "BAD"
Stage 5: parse
| parse-kv AdditionalExtensions as (['susr']:string, ['fileid']:string) with (pair_delimiter=";", kv_delimiter="=")
Stage 6: extend
| extend
NetworkProtocol = toupper(iff(Protocol contains "-" and Protocol !contains "/", toupper(trim_start(@".*-", Protocol)), toupper(trim_end(@"/.*", Protocol)))),
NetworkApplicationProtocol = tostring(toupper(trim_start(@".*/", Protocol)))
Stage 7: project
| project
TimeGenerated,
DeviceModel = DeviceProduct,
SerialNumber = Computer,
SrcIpAddr = SourceIP,
SrcUsername = coalesce(susr, SourceUserName),
NetworkProtocol,
NetworkApplicationProtocol,
RequestURL,
File = url_decode(tostring(split(RequestURL, '/')[-1])),
Hash = fileid,
Verdict = CaptureATPVerdict
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.
| Field | Kind | Values |
|---|---|---|
CaptureATPVerdict | eq |
|
DeviceEventClassID | eq |
|
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.
| Field | Source |
|---|---|
DeviceModel | project |
File | project |
Hash | project |
NetworkApplicationProtocol | project |
NetworkProtocol | project |
RequestURL | project |
SerialNumber | project |
SrcIpAddr | project |
SrcUsername | project |
TimeGenerated | project |
Verdict | project |