Detection rules › Kusto

HackerView - Any Issue Detected

Status
available
Severity
informational
Time window
5m
Source
github.com/Azure/Azure-Sentinel

Generic alert that triggers when ANY HackerView issue/incident is detected in the logs. Extracts nested metadata from RawPayload.

MITRE ATT&CK coverage

Rule body kusto

id: abe1a663-d00d-482e-aa68-9394622ae03e
name: HackerView - Any Issue Detected
description: Generic alert that triggers when ANY HackerView issue/incident is detected in the logs. Extracts nested metadata from RawPayload.
severity: Informational
status: Available
requiredDataConnectors:
  - connectorId: CTM360HackerViewConnectorDefinition
    dataTypes:
      - HackerViewLog_AzureV2_CL
tactics:
- Reconnaissance
- Discovery
relevantTechniques:
- T1592
- T1598
query: |
  HackerViewLog
  | extend RawPayloadDyn = todynamic(RawPayload)
  | extend 
    AssetName = coalesce(AssetName, tostring(RawPayloadDyn.meta.asset), tostring(RawPayloadDyn.meta.host)),
    AssetType = coalesce(AssetType, tostring(RawPayloadDyn.meta.asset_type)),
    IpAddress = coalesce(IpAddress, tostring(RawPayloadDyn.meta.resolved_ip)),
    ExternalLink = coalesce(ExternalLink, tostring(RawPayloadDyn.hackerview_link))
  | project TimeGenerated, Title, Severity, AssetName, AssetType, IpAddress, ExternalLink
eventGroupingSettings:
  aggregationKind: AlertPerResult
customDetails:
  AssetName: AssetName
  IpAddress: IpAddress
  Severity: Severity
alertDetailsOverride:
  alertDisplayNameFormat: HackerView Alert - {{Title}}
  alertDescriptionFormat: HackerView detected {{Severity}} issue {{Title}} on asset {{AssetName}}
entityMappings:
- entityType: Host
  fieldMappings:
  - identifier: HostName
    columnName: AssetName
- entityType: IP
  fieldMappings:
  - identifier: Address
    columnName: IpAddress
kind: Scheduled
queryFrequency: 5m
queryPeriod: 5m
triggerOperator: GreaterThan
triggerThreshold: 0
suppressionDuration: PT5H
suppressionEnabled: false
version: 1.0.0

Stages and Predicates

Stage 1: source

HackerViewLog

Stage 2: extend

| extend RawPayloadDyn = todynamic(RawPayload)

Stage 3: extend

| extend 
  AssetName = coalesce(AssetName, tostring(RawPayloadDyn.meta.asset), tostring(RawPayloadDyn.meta.host)),
  AssetType = coalesce(AssetType, tostring(RawPayloadDyn.meta.asset_type)),
  IpAddress = coalesce(IpAddress, tostring(RawPayloadDyn.meta.resolved_ip)),
  ExternalLink = coalesce(ExternalLink, tostring(RawPayloadDyn.hackerview_link))

Stage 4: project

| project TimeGenerated, Title, Severity, AssetName, AssetType, IpAddress, ExternalLink

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
AssetNameproject
AssetTypeproject
ExternalLinkproject
IpAddressproject
Severityproject
TimeGeneratedproject
Titleproject