Detection rules › Kusto

Darktrace Model Breach

This is a third-party alert feed, not a detection over modeled telemetry. The vendor product raised the finding; this rule forwards it into the SIEM. It is searchable for reference but is excluded from the detection-rule browse and the ATT&CK coverage matrix.

Severity
medium
Time window
5m
Source
github.com/Azure/Azure-Sentinel

'This rule creates Microsoft Sentinel Alerts based on Darktrace Model Breaches, fetched every 5 minutes.'

Rule body kusto

id: a3c7b8ed-56a9-47b7-98e5-2555c16e17c9
name: Darktrace Model Breach
description: |
  'This rule creates Microsoft Sentinel Alerts based on Darktrace Model Breaches, fetched every 5 minutes.'
severity: Medium
requiredDataConnectors:
  - connectorId: DarktraceRESTConnector
    dataTypes:
      - darktrace_model_alerts_CL
queryFrequency: 5m
queryPeriod: 5m 
triggerOperator: gt
triggerThreshold: 0
tactics: # tactics pulled dynamically
relevantTechniques:
query: |
  darktrace_model_alerts_CL 
  | where dtProduct_s =="Policy Breach"
  | project-rename EventSeverity=score_d, EventStartTime=breachTime_s, NetworkRuleName=modelName_s, NetworkRuleNumber=pid_d, ThreatId=threatID_d, ThreatCategory=dtProduct_s, SrcIpAddr=SourceIP, SrcHostname=hostname_s, SrcMacAddr=sourceMac_s, SrcPortNumber=sourcePort_s, DstIpAddr=destIP_s, DstPortNumber=destPort_s, DstHostname=destHost_s, DstMacAddr=destMac_s, DtCompliance=compliance_b, DtClientSensor=cSensor_b, DtDescription=description_s, DtAntigena=antigena_b, DtDeviceID=deviceId_d, DtSubnetID=sid_d, DtTags=tags_s, DtMitreTechniques=mitreTechniques_s, DtMessage=Message, DtUUID=uuid_g, DtBreachURL=breachUrl_s, DtSrcTypeLabel=typeLabel_s, DtTriggeredComponents=triggeredComponents_s, DtDetails=details_s, DtLongitude=longitude_d, DtLatitude=latitude_d, DtCategory=Category
  | extend EventCount=1, EventType="NetworkSession", EventSchema="NetworkSession", EventSchemaVersion="0.2.2", EventResult="Success", DvcAction = "Allow", EventVendor = "Darktrace", EventProduct = "Darktrace DETECT", EventEndTime=EventStartTime, ThreatName=NetworkRuleName, ThreatRiskLevel=EventSeverity
  | extend DtSentinelCategory = case(DtCategory == "Suspicious", "Medium", 
                                    DtCategory == "Critical", "High",
                                    "Informational") 
eventGroupingSettings:
  aggregationKind: AlertPerResult
entityMappings:
  - entityType: Host
    fieldMappings:
      - identifier: HostName
        columnName: SrcHostname
  - entityType: Host
    fieldMappings:
      - identifier: HostName
        columnName: DstHostname
  - entityType: IP
    fieldMappings:
      - identifier: Address
        columnName: SrcIpAddr
  - entityType: IP
    fieldMappings:
      - identifier: Address
        columnName: DstIpAddr
customDetails:
  SrcMacAddr: SrcMacAddr
  EventSeverity: EventSeverity
  EventStartTime: EventStartTime
  NetworkRuleName: NetworkRuleName
  NetworkRuleNumber: NetworkRuleNumber
  ThreatId: ThreatId
  DtSentinelCategory: DtSentinelCategory
  SrcPortNumber: SrcPortNumber
  DstPortNumber: DstPortNumber
  DstMacAddr: DstMacAddr
  DtCompliance: DtCompliance
  DtDescription: DtDescription
  DtCategory: DtCategory
  DtDeviceID: DtDeviceID
# These are described here - this is why we're leaving tactics and techniques above empty
alertDetailsOverride:
  # model breach name here
  alertDisplayNameFormat: 'Darktrace: {{ThreatRiskLevel}} - {{NetworkRuleName}}' # Up to 256 chars and 3 placeholders
  alertDescriptionFormat: '{{DtMessage}}' # Up to 5000 chars and 3 placeholders
  # MITRE tactic
  alertTacticsColumnName: # leave empty
  alertSeverityColumnName: # leave empty
  alertDynamicProperties:
    - alertProperty: AlertLink
      value: DtBreachURL
    - alertProperty: ProviderName
      value: EventVendor
    - alertProperty: ProductName
      value: EventProduct
    - alertProperty: ProductComponentName
      value: ThreatCategory
    - alertProperty: Severity
      value: DtSentinelCategory
version: 1.1.0
kind: NRT

Stages and Predicates

Stage 1: source

darktrace_model_alerts_CL

Stage 2: where

| where dtProduct_s =="Policy Breach"

Stage 3: project-rename

| project-rename EventSeverity=score_d, EventStartTime=breachTime_s, NetworkRuleName=modelName_s, NetworkRuleNumber=pid_d, ThreatId=threatID_d, ThreatCategory=dtProduct_s, SrcIpAddr=SourceIP, SrcHostname=hostname_s, SrcMacAddr=sourceMac_s, SrcPortNumber=sourcePort_s, DstIpAddr=destIP_s, DstPortNumber=destPort_s, DstHostname=destHost_s, DstMacAddr=destMac_s, DtCompliance=compliance_b, DtClientSensor=cSensor_b, DtDescription=description_s, DtAntigena=antigena_b, DtDeviceID=deviceId_d, DtSubnetID=sid_d, DtTags=tags_s, DtMitreTechniques=mitreTechniques_s, DtMessage=Message, DtUUID=uuid_g, DtBreachURL=breachUrl_s, DtSrcTypeLabel=typeLabel_s, DtTriggeredComponents=triggeredComponents_s, DtDetails=details_s, DtLongitude=longitude_d, DtLatitude=latitude_d, DtCategory=Category

Stage 4: extend

| extend EventCount=1, EventType="NetworkSession", EventSchema="NetworkSession", EventSchemaVersion="0.2.2", EventResult="Success", DvcAction = "Allow", EventVendor = "Darktrace", EventProduct = "Darktrace DETECT", EventEndTime=EventStartTime, ThreatName=NetworkRuleName, ThreatRiskLevel=EventSeverity

Stage 5: extend

| extend DtSentinelCategory = case(DtCategory == "Suspicious", "Medium", 
                                  DtCategory == "Critical", "High",
                                  "Informational")
DtSentinelCategory =
ifDtCategory == "Suspicious""Medium"
elifDtCategory == "Critical""High"
else"Informational"

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
dtProduct_seq
  • Policy Breach 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
DstHostnameproject-rename
DstIpAddrproject-rename
DstMacAddrproject-rename
DstPortNumberproject-rename
DtAntigenaproject-rename
DtBreachURLproject-rename
DtCategoryproject-rename
DtClientSensorproject-rename
DtComplianceproject-rename
DtDescriptionproject-rename
DtDetailsproject-rename
DtDeviceIDproject-rename
DtLatitudeproject-rename
DtLongitudeproject-rename
DtMessageproject-rename
DtMitreTechniquesproject-rename
DtSrcTypeLabelproject-rename
DtSubnetIDproject-rename
DtTagsproject-rename
DtTriggeredComponentsproject-rename
DtUUIDproject-rename
EventSeverityproject-rename
EventStartTimeproject-rename
NetworkRuleNameproject-rename
NetworkRuleNumberproject-rename
SrcHostnameproject-rename
SrcIpAddrproject-rename
SrcMacAddrproject-rename
SrcPortNumberproject-rename
ThreatCategoryproject-rename
ThreatIdproject-rename
DvcActionextend
EventCountextend
EventEndTimeextend
EventProductextend
EventResultextend
EventSchemaextend
EventSchemaVersionextend
EventTypeextend
EventVendorextend
ThreatNameextend
ThreatRiskLevelextend
DtSentinelCategoryextend