Detection rules › Kusto

Infoblox - TI - CommonSecurityLog Match Found - MalwareC2

Status
available
Severity
medium
Time window
14d
Group by
DestinationDnsDomain, DomainName, IndicatorId
Source
github.com/Azure/Azure-Sentinel

'CommonSecurityLog (CEF) MalwareC2/MalwareC2DGA match found in your Infoblox TIDE Threat Intelligence. Customize query count, scheduling, responses and more. Modify data sources, types and threat properties as desired.'

MITRE ATT&CK coverage

Rule body

id: 5b0864a9-4577-4087-b9fa-de3e14a8a999
name: Infoblox - TI - CommonSecurityLog Match Found - MalwareC2
description: |
  'CommonSecurityLog (CEF) MalwareC2/MalwareC2DGA match found in your Infoblox TIDE Threat Intelligence. Customize query count, scheduling, responses and more. Modify data sources, types and threat properties as desired.'
severity: Medium
status: Available
requiredDataConnectors:
  - connectorId: ThreatIntelligence
    dataTypes: 
      - ThreatIntelligenceIndicator
  - connectorId: CefAma
    dataTypes:
      - CommonSecurityLog
queryFrequency: 1h
queryPeriod: 14d
triggerOperator: gt
triggerThreshold: 0
tactics:
  - Impact
relevantTechniques:
  - T1498
  - T1565
query: |
  let dt_lookBack = 1h;
  let ioc_lookBack = 14d;
  let TI = ThreatIntelligenceIndicator
  | where TimeGenerated >= ago(ioc_lookBack)
  | summarize LatestIndicatorTime = arg_max(TimeGenerated, *) by IndicatorId
  | where Active == true and ExpirationDateTime > now()  
  | where Description has_cs "Infoblox"
  | where Description has_cs "MalwareC2"
  | where isnotempty(DomainName)
  ;
  let Data = CommonSecurityLog
  | extend HitTime = TimeGenerated
  | where TimeGenerated >= ago(dt_lookBack)
  | where isnotempty(DestinationDnsDomain)
  //Remove trailing period at end of domain
  | extend DestinationDnsDomain = trim_end(@"\.$", DestinationDnsDomain)
  ;
  TI | join kind=innerunique Data on $left.DomainName == $right.DestinationDnsDomain
  | where HitTime >= TimeGenerated and HitTime < ExpirationDateTime
  | project LatestIndicatorTime, HitTime, DeviceEventClassID, DestinationDnsDomain, DeviceAction, SourceIP, DeviceName, SourceMACAddress, SourceUserName, AdditionalExtensions, 
  AdditionalInformation, Description, ThreatType, TrafficLightProtocolLevel, Type, ConfidenceScore, ExpirationDateTime, SourceSystem, Action, IndicatorId, ExternalIndicatorId, Tags
entityMappings:
  - entityType: IP
    fieldMappings:
      - identifier: Address
        columnName: SourceIP
  - entityType: Host
    fieldMappings:
      - identifier: HostName
        columnName: DeviceName
      - identifier: FullName
        columnName: SourceUserName
  - entityType: DNS
    fieldMappings:
      - identifier: DomainName
        columnName: DestinationDnsDomain
customDetails:
  SourceMACAddress: SourceMACAddress
eventGroupingSettings:
  aggregationKind: SingleAlert
incidentConfiguration:
  createIncident: true
version: 1.0.3
kind: Scheduled

Stages and Predicates

Parameters

let dt_lookBack = 1h;
let ioc_lookBack = 14d;

let TI is inlined into the numbered stages below.

Let binding: Data used in Stage 8

let Data = CommonSecurityLog
| extend HitTime = TimeGenerated
| where TimeGenerated >= ago(dt_lookBack)
| where isnotempty(DestinationDnsDomain)
| extend DestinationDnsDomain = trim_end(@"\.$", DestinationDnsDomain);

Stages 1 to 7 define let TI (the rule's main pipeline source); stages 8 to 10 run on it.

Stage 1: source

ThreatIntelligenceIndicator

Stage 2: where

| where TimeGenerated >= ago(ioc_lookBack)

Stage 3: summarize

| summarize LatestIndicatorTime = arg_max(TimeGenerated, *) by IndicatorId

Stage 4: where

| where Active == true and ExpirationDateTime > now()

Stage 5: where

| where Description has_cs "Infoblox"

Stage 6: where

| where Description has_cs "MalwareC2"

Stage 7: where

| where isnotempty(DomainName)

Stage 8: join

TI
| join kind=innerunique Data on $left.DomainName == $right.DestinationDnsDomain

Stage 9: where

| where HitTime >= TimeGenerated and HitTime < ExpirationDateTime

Stage 10: project

| project LatestIndicatorTime, HitTime, DeviceEventClassID, DestinationDnsDomain, DeviceAction, SourceIP, DeviceName, SourceMACAddress, SourceUserName, AdditionalExtensions, 
AdditionalInformation, Description, ThreatType, TrafficLightProtocolLevel, Type, ConfidenceScore, ExpirationDateTime, SourceSystem, Action, IndicatorId, ExternalIndicatorId, Tags

Indicators

These rows show field, operator, and value matches.

FieldKindValuesSearch
Activeeq
  • true
field:"Active" kind:eq value:"true"
Descriptionmatch
  • Infoblox transforms: term
  • MalwareC2 transforms: term
field:"Description" kind:match
DestinationDnsDomainis_not_null
  • (no value, null check)
field:"DestinationDnsDomain" kind:is_not_null
DomainNameis_not_null
  • (no value, null check)
field:"DomainName" kind:is_not_null
HitTimecross_field_compare
  • ExpirationDateTime transforms: op:lt
  • TimeGenerated transforms: op:ge
field:"HitTime" kind:cross_field_compare

Output fields

These fields are emitted when the rule matches.

FieldSource
Actionproject
AdditionalExtensionsproject
AdditionalInformationproject
ConfidenceScoreproject
Descriptionproject
DestinationDnsDomainproject
DeviceActionproject
DeviceEventClassIDproject
DeviceNameproject
ExpirationDateTimeproject
ExternalIndicatorIdproject
HitTimeproject
IndicatorIdproject
LatestIndicatorTimeproject
SourceIPproject
SourceMACAddressproject
SourceSystemproject
SourceUserNameproject
Tagsproject
ThreatTypeproject
TrafficLightProtocolLevelproject
Typeproject