Detection rules › Kusto
Cyren Feed Outage Detection
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.
'Detects when the Cyren threat intelligence feed has not ingested any data for 6 or more hours. This may indicate a connectivity issue with the data connector, API authentication problems, or upstream service disruption.'
MITRE ATT&CK coverage
| Tactic | Techniques |
|---|---|
| Stealth | T1562 Impair Defenses |
Rule body kusto
id: 7f9a0d5c-3b4c-6d7e-1f2a-e3f4a5b6c7d8
name: Cyren Feed Outage Detection
description: |
'Detects when the Cyren threat intelligence feed has not ingested any data for 6 or more hours.
This may indicate a connectivity issue with the data connector, API authentication problems, or upstream service disruption.'
severity: Medium
status: Available
requiredDataConnectors:
- connectorId: CyrenThreatIntel
dataTypes:
- Cyren_Indicators_CL
queryFrequency: 1h
queryPeriod: 1d
triggerOperator: gt
triggerThreshold: 0
tactics:
- DefenseEvasion
relevantTechniques:
- T1562
query: |
Cyren_Indicators_CL
| where TimeGenerated >= ago(24h)
| summarize
Total = count(),
Latest = max(TimeGenerated)
| extend HoursAgo = datetime_diff('hour', now(), Latest)
| where isnotempty(Latest) and HoursAgo >= 6
| project
LatestEventTime = Latest,
HoursSinceLastEvent = HoursAgo,
TotalEventsLast24h = Total,
AlertMessage = strcat("Cyren feed has not received data for ", HoursAgo, " hours")
suppressionDuration: 1h
suppressionEnabled: false
incidentConfiguration:
createIncident: true
groupingConfiguration:
enabled: false
reopenClosedIncident: false
lookbackDuration: 1d
matchingMethod: Selected
eventGroupingSettings:
aggregationKind: SingleAlert
customDetails:
LatestEventTime: LatestEventTime
HoursSinceLastEvent: HoursSinceLastEvent
TotalEventsLast24h: TotalEventsLast24h
version: 1.0.0
kind: Scheduled
Stages and Predicates
Stage 1: source
Cyren_Indicators_CL
Stage 2: where
| where TimeGenerated >= ago(24h)
Stage 3: summarize
| summarize
Total = count(),
Latest = max(TimeGenerated)
Stage 4: extend
| extend HoursAgo = datetime_diff('hour', now(), Latest)
Stage 5: where
| where isnotempty(Latest) and HoursAgo >= 6
Stage 6: project
| project
LatestEventTime = Latest,
HoursSinceLastEvent = HoursAgo,
TotalEventsLast24h = Total,
AlertMessage = strcat("Cyren feed has not received data for ", HoursAgo, " hours")
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.
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.
| Field | Source |
|---|---|
AlertMessage | project |
HoursSinceLastEvent | project |
LatestEventTime | project |
TotalEventsLast24h | project |