Detection rules › Kusto

blacklens Insights

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.

Status
available
Severity
high
Group by
id
Source
github.com/Azure/Azure-Sentinel

'Creates incidents from blacklens.io Attack Surface Management alerts ingested into the blacklens_CL table. Alert severity is mapped dynamically from the source data.'

MITRE ATT&CK coverage

Rule body kusto

id: e261b70a-3005-4a1b-a7a2-2c8147fafed7
name: blacklens Insights
description: |
  'Creates incidents from blacklens.io Attack Surface Management alerts ingested into the blacklens_CL table. Alert severity is mapped dynamically from the source data.'
severity: High
status: Available
tactics:
  - Reconnaissance
  - ResourceDevelopment
  - InitialAccess
  - CredentialAccess
  - Collection
  - Exfiltration
  - DefenseEvasion
  - CommandAndControl
relevantTechniques:
  - T1595
  - T1583
  - T1190
  - T1110
  - T1005
  - T1041
  - T1562
  - T1071
requiredDataConnectors:
  - connectorId: blacklens_io
    dataTypes:
      - blacklens_CL
kind: NRT
query: |
  blacklens_CL
  | summarize arg_max(TimeGenerated, *) by id
  | extend AlertSeverity = case(
      tolower(severity) == "critical", "High",
      tolower(severity) == "high", "High",
      tolower(severity) == "medium", "Medium",
      tolower(severity) == "low", "Low",
      "Informational"
  )
suppressionDuration: PT1H
suppressionEnabled: false
incidentConfiguration:
  createIncident: true
  groupingConfiguration:
    enabled: false
    reopenClosedIncident: false
    lookbackDuration: PT5H
    matchingMethod: AllEntities
eventGroupingSettings:
  aggregationKind: AlertPerResult
alertDetailsOverride:
  alertDisplayNameFormat: "{{alert_title}}"
  alertDescriptionFormat: "{{message}}"
  alertSeverityColumnName: AlertSeverity
entityMappings:
  - entityType: URL
    fieldMappings:
      - identifier: Url
        columnName: link
version: 1.0.0

Stages and Predicates

Stage 1: source

blacklens_CL

Stage 2: summarize

| summarize arg_max(TimeGenerated, *) by id

Stage 3: extend

| extend AlertSeverity = case(
    tolower(severity) == "critical", "High",
    tolower(severity) == "high", "High",
    tolower(severity) == "medium", "Medium",
    tolower(severity) == "low", "Low",
    "Informational"
)
AlertSeverity =
ifseverity == "critical""High"
elifseverity == "high""High"
elifseverity == "medium""Medium"
elifseverity == "low""Low"
else"Informational"

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
idsummarize
AlertSeverityextend