Analytic rule catalog
Whisper Security - C2 Communication Detection
Back
| Id | 00682c4c-b8b5-5ef7-af33-50891b271b7b |
| Rulename | Whisper Security - C2 Communication Detection |
| Description | Detects command-and-control communication by joining CommonSecurityLog with Whisper threat intelligence data. Fires when network traffic matches a known C2 indicator with a threat score above 60. |
| Severity | High |
| Tactics | CommandAndControl |
| Techniques | T1071 |
| Required data connectors | WhisperSecurityConnector |
| Kind | Scheduled |
| Query frequency | 5m |
| Query period | 1h |
| Trigger threshold | 0 |
| Trigger operator | gt |
| Source Uri | https://github.com/Azure/Azure-Sentinel/blob/master/Solutions/Whisper/Analytic%20Rules/C2CommunicationDetection.yaml |
| Version | 1.0.0 |
| Arm template | 00682c4c-b8b5-5ef7-af33-50891b271b7b.json |
// MITRE ATT&CK: T1071 - Application Layer Protocol
// Tactic: Command and Control
// Detects C2 communication by correlating network logs with Whisper threat intel
let timeRange = 1h;
let threatThreshold = 60;
let c2Indicators = WhisperThreatIntel_CL
| where TimeGenerated > ago(timeRange)
| where isC2 == true
| where threatScore > threatThreshold
| project indicator, threatScore, threatLevel, feedNames, explanation, lastSeen;
let CommonSecurityLogSafe = union isfuzzy=true CommonSecurityLog, (datatable(TimeGenerated:datetime, DestinationIP:string, DestinationHostName:string, SourceIP:string, DeviceProduct:string, DeviceAction:string)[]);
CommonSecurityLogSafe
| where TimeGenerated > ago(timeRange)
| where isnotempty(DestinationIP) or isnotempty(DestinationHostName)
| extend matchIndicator = coalesce(DestinationHostName, DestinationIP)
| join kind=inner (c2Indicators) on $left.matchIndicator == $right.indicator
| extend SourceIP = SourceIP, DestinationIP = DestinationIP, DnsDomain = DestinationHostName
| project TimeGenerated, SourceIP, DestinationIP, DnsDomain, DeviceProduct, DeviceAction, threatScore, threatLevel, feedNames, explanation
incidentConfiguration:
groupingConfiguration:
lookbackDuration: PT5H
reopenClosedIncident: false
matchingMethod: AllEntities
enabled: true
createIncident: true
name: Whisper Security - C2 Communication Detection
triggerOperator: gt
query: |
// MITRE ATT&CK: T1071 - Application Layer Protocol
// Tactic: Command and Control
// Detects C2 communication by correlating network logs with Whisper threat intel
let timeRange = 1h;
let threatThreshold = 60;
let c2Indicators = WhisperThreatIntel_CL
| where TimeGenerated > ago(timeRange)
| where isC2 == true
| where threatScore > threatThreshold
| project indicator, threatScore, threatLevel, feedNames, explanation, lastSeen;
let CommonSecurityLogSafe = union isfuzzy=true CommonSecurityLog, (datatable(TimeGenerated:datetime, DestinationIP:string, DestinationHostName:string, SourceIP:string, DeviceProduct:string, DeviceAction:string)[]);
CommonSecurityLogSafe
| where TimeGenerated > ago(timeRange)
| where isnotempty(DestinationIP) or isnotempty(DestinationHostName)
| extend matchIndicator = coalesce(DestinationHostName, DestinationIP)
| join kind=inner (c2Indicators) on $left.matchIndicator == $right.indicator
| extend SourceIP = SourceIP, DestinationIP = DestinationIP, DnsDomain = DestinationHostName
| project TimeGenerated, SourceIP, DestinationIP, DnsDomain, DeviceProduct, DeviceAction, threatScore, threatLevel, feedNames, explanation
queryFrequency: 5m
description: |
Detects command-and-control communication by joining CommonSecurityLog with Whisper threat intelligence data. Fires when network traffic matches a known C2 indicator with a threat score above 60.
id: 00682c4c-b8b5-5ef7-af33-50891b271b7b
triggerThreshold: 0
queryPeriod: 1h
version: 1.0.0
kind: Scheduled
customDetails:
ThreatLevel: threatLevel
ThreatScore: threatScore
FeedNames: feedNames
status: Available
severity: High
requiredDataConnectors:
- connectorId: WhisperSecurityConnector
dataTypes:
- WhisperThreatIntel_CL
OriginalUri: https://github.com/Azure/Azure-Sentinel/blob/master/Solutions/Whisper/Analytic%20Rules/C2CommunicationDetection.yaml
relevantTechniques:
- T1071
tactics:
- CommandAndControl
entityMappings:
- fieldMappings:
- identifier: Address
columnName: SourceIP
entityType: IP
- fieldMappings:
- identifier: Address
columnName: DestinationIP
entityType: IP
- fieldMappings:
- identifier: DomainName
columnName: DnsDomain
entityType: DNS
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"workspace": {
"type": "String"
}
},
"resources": [
{
"apiVersion": "2024-01-01-preview",
"id": "[concat(resourceId('Microsoft.OperationalInsights/workspaces/providers', parameters('workspace'), 'Microsoft.SecurityInsights'),'/alertRules/00682c4c-b8b5-5ef7-af33-50891b271b7b')]",
"kind": "Scheduled",
"name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/00682c4c-b8b5-5ef7-af33-50891b271b7b')]",
"properties": {
"alertRuleTemplateName": "00682c4c-b8b5-5ef7-af33-50891b271b7b",
"customDetails": {
"FeedNames": "feedNames",
"ThreatLevel": "threatLevel",
"ThreatScore": "threatScore"
},
"description": "Detects command-and-control communication by joining CommonSecurityLog with Whisper threat intelligence data. Fires when network traffic matches a known C2 indicator with a threat score above 60.\n",
"displayName": "Whisper Security - C2 Communication Detection",
"enabled": true,
"entityMappings": [
{
"entityType": "IP",
"fieldMappings": [
{
"columnName": "SourceIP",
"identifier": "Address"
}
]
},
{
"entityType": "IP",
"fieldMappings": [
{
"columnName": "DestinationIP",
"identifier": "Address"
}
]
},
{
"entityType": "DNS",
"fieldMappings": [
{
"columnName": "DnsDomain",
"identifier": "DomainName"
}
]
}
],
"incidentConfiguration": {
"createIncident": true,
"groupingConfiguration": {
"enabled": true,
"lookbackDuration": "PT5H",
"matchingMethod": "AllEntities",
"reopenClosedIncident": false
}
},
"OriginalUri": "https://github.com/Azure/Azure-Sentinel/blob/master/Solutions/Whisper/Analytic%20Rules/C2CommunicationDetection.yaml",
"query": "// MITRE ATT&CK: T1071 - Application Layer Protocol\n// Tactic: Command and Control\n// Detects C2 communication by correlating network logs with Whisper threat intel\nlet timeRange = 1h;\nlet threatThreshold = 60;\nlet c2Indicators = WhisperThreatIntel_CL\n | where TimeGenerated > ago(timeRange)\n | where isC2 == true\n | where threatScore > threatThreshold\n | project indicator, threatScore, threatLevel, feedNames, explanation, lastSeen;\nlet CommonSecurityLogSafe = union isfuzzy=true CommonSecurityLog, (datatable(TimeGenerated:datetime, DestinationIP:string, DestinationHostName:string, SourceIP:string, DeviceProduct:string, DeviceAction:string)[]);\nCommonSecurityLogSafe\n | where TimeGenerated > ago(timeRange)\n | where isnotempty(DestinationIP) or isnotempty(DestinationHostName)\n | extend matchIndicator = coalesce(DestinationHostName, DestinationIP)\n | join kind=inner (c2Indicators) on $left.matchIndicator == $right.indicator\n | extend SourceIP = SourceIP, DestinationIP = DestinationIP, DnsDomain = DestinationHostName\n | project TimeGenerated, SourceIP, DestinationIP, DnsDomain, DeviceProduct, DeviceAction, threatScore, threatLevel, feedNames, explanation\n",
"queryFrequency": "PT5M",
"queryPeriod": "PT1H",
"severity": "High",
"status": "Available",
"subTechniques": [],
"suppressionDuration": "PT1H",
"suppressionEnabled": false,
"tactics": [
"CommandAndControl"
],
"techniques": [
"T1071"
],
"templateVersion": "1.0.0",
"triggerOperator": "GreaterThan",
"triggerThreshold": 0
},
"type": "Microsoft.OperationalInsights/workspaces/providers/alertRules"
}
]
}