Skip to content

Commit c97a719

Browse files
authored
Merge pull request #14429 from MartinPankraz/feature/sapetd-data-freshness-alert
SAP ETD Cloud 3.0.5: telemetry-tampering analytic rules
2 parents b1deb2b + ae620ce commit c97a719

7 files changed

Lines changed: 529 additions & 90 deletions

File tree

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
id: a9206c5a-3e72-4c10-807f-313a56075b20
2+
kind: Scheduled
3+
name: SAP ETD - No new data received
4+
description: |
5+
Identifies a complete gap in the SAP Enterprise Threat Detection (ETD) feed when no records have been ingested into the SAPETDAlerts_CL table within the configured time window (default 1 hour). A full-feed blackout may indicate that an adversary is tampering with the security telemetry pipeline (for example by stopping the SAP ETD collector, disabling the data connector, or blocking network egress to Microsoft Sentinel) to hide follow-on activity in the SAP landscape. Benign causes such as a service outage, connector failure, or maintenance window are also possible and should be ruled out during triage. This rule is complementary to the per-SAP-system rule "SAP ETD - SAP system stopped reporting data", which can help distinguish a targeted silencing of a single system from a full-feed blackout. To change the freshness threshold, update the `LookbackPeriod` variable in the query and align `queryFrequency` / `queryPeriod` accordingly.
6+
severity: High
7+
status: Available
8+
requiredDataConnectors:
9+
- connectorId: SAPETDAlerts
10+
dataTypes:
11+
- SAPETDAlerts_CL
12+
queryFrequency: 1h
13+
queryPeriod: 1h
14+
triggerOperator: gt
15+
triggerThreshold: 0
16+
tactics:
17+
- DefenseEvasion
18+
relevantTechniques:
19+
- T1562
20+
- T1562.006
21+
query: |
22+
// Configurable freshness threshold for the entire SAP ETD data feed.
23+
// When changing this value also update queryFrequency and queryPeriod accordingly.
24+
let LookbackPeriod = 1h;
25+
SAPETDAlerts_CL
26+
| summarize
27+
LastIngestionTime = max(TimeGenerated),
28+
RecordsInWindow = countif(TimeGenerated > ago(LookbackPeriod))
29+
| where RecordsInWindow == 0 or isnull(LastIngestionTime)
30+
| extend
31+
LookbackPeriod = LookbackPeriod,
32+
TimeSinceLastIngestion = now() - coalesce(LastIngestionTime, datetime(null)),
33+
FeedName = "SAPETD",
34+
Reason = iff(isnull(LastIngestionTime),
35+
"No SAPETDAlerts_CL records have ever been ingested.",
36+
strcat("No SAPETDAlerts_CL records ingested in the last ", tostring(LookbackPeriod), " (last ingestion: ", tostring(LastIngestionTime), ")."))
37+
eventGroupingSettings:
38+
aggregationKind: SingleAlert
39+
entityMappings:
40+
- entityType: CloudApplication
41+
fieldMappings:
42+
- identifier: Name
43+
columnName: FeedName
44+
alertDetailsOverride:
45+
alertDisplayNameFormat: 'SAP ETD - No new data received in the last {{LookbackPeriod}}'
46+
alertDescriptionFormat: |
47+
{{Reason}}
48+
49+
A complete gap in the SAP ETD feed may indicate that an adversary is tampering with the security telemetry pipeline (for example by stopping the SAP ETD collector, disabling the data connector, or blocking network egress to Microsoft Sentinel) in order to hide malicious activity in the SAP landscape. Treat the silence as suspicious until proven otherwise: validate the integrity and runtime state of the SAP ETD data connector, the SAP ETD service, and the network path between them, and review recent change / admin activity on those components before concluding the cause is a benign outage.
50+
customDetails:
51+
LookbackPeriod: LookbackPeriod
52+
LastIngestion: LastIngestionTime
53+
LastIngestionGap: TimeSinceLastIngestion
54+
version: 1.0.0
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
id: b1413b43-9410-46f4-94d9-da507105d834
2+
kind: Scheduled
3+
name: SAP ETD - SAP system stopped reporting data
4+
description: |
5+
Identifies a per-system silence when an individual SAP system (identified by its SID) that has recently been reporting to SAP Enterprise Threat Detection (ETD) stops producing new records in the SAPETDAlerts_CL table within the configured per-system grace period (default 2 hours). A targeted silence of a single SID may indicate that an adversary with access to the SAP system, the SAP ETD collector for that SID, or the data connector is selectively blocking security telemetry to hide follow-on activity while leaving the rest of the SAP ETD feed intact; benign causes such as connectivity issues, collector misconfiguration, or planned maintenance for that SID are also possible and should be ruled out during triage. The set of "expected" SIDs is derived from any system that has reported within the `BaselineLookback` period (default 7 days); systems silent for longer are considered decommissioned and are not alerted on. Tunable parameters at the top of the query: `LookbackPeriod` (silence threshold per SID; align with `queryFrequency`) and `BaselineLookback` (how far back to look to discover known SIDs; align with `queryPeriod`). This rule is complementary to the overall-feed rule "SAP ETD - No new data received".
6+
severity: High
7+
status: Available
8+
requiredDataConnectors:
9+
- connectorId: SAPETDAlerts
10+
dataTypes:
11+
- SAPETDAlerts_CL
12+
queryFrequency: 1h
13+
queryPeriod: 7d
14+
triggerOperator: gt
15+
triggerThreshold: 0
16+
tactics:
17+
- DefenseEvasion
18+
relevantTechniques:
19+
- T1562
20+
- T1562.006
21+
query: |
22+
// ---- Configurable thresholds ----
23+
let LookbackPeriod = 2h;
24+
let BaselineLookback = 7d;
25+
// ---------------------------------
26+
let regex_sid = @"^([A-Z0-9]{3})/";
27+
let regex_client = @'\/(.{3})$';
28+
SAPETDAlerts_CL
29+
| where TimeGenerated > ago(BaselineLookback)
30+
| mv-expand NormalizedTriggeringEvents
31+
| extend
32+
SystemId = extract(regex_sid, 1, tostring(NormalizedTriggeringEvents.SystemIdActor)),
33+
ClientId = extract(regex_client, 1, tostring(NormalizedTriggeringEvents.SystemIdActor)),
34+
Host = tostring(NormalizedTriggeringEvents.NetworkHostnameInitiator),
35+
Instance = tostring(NormalizedTriggeringEvents.NetworkHostnameActor)
36+
| where isnotempty(SystemId)
37+
| summarize
38+
LastIngestionTime = max(TimeGenerated),
39+
Host = take_any(Host),
40+
Instance = take_any(Instance),
41+
ClientId = take_any(ClientId)
42+
by SystemId
43+
| extend TimeSinceLastIngestion = now() - LastIngestionTime
44+
| where TimeSinceLastIngestion > LookbackPeriod
45+
| extend
46+
LookbackPeriod = LookbackPeriod,
47+
Reason = strcat("SAP system ", SystemId, " has not reported any data to SAP ETD in the last ", tostring(LookbackPeriod), " (last seen: ", tostring(LastIngestionTime), ").")
48+
eventGroupingSettings:
49+
aggregationKind: AlertPerResult
50+
entityMappings:
51+
- entityType: CloudApplication
52+
fieldMappings:
53+
- identifier: Name
54+
columnName: SystemId
55+
- identifier: AppId
56+
columnName: ClientId
57+
- identifier: InstanceName
58+
columnName: Instance
59+
- entityType: Host
60+
fieldMappings:
61+
- identifier: FullName
62+
columnName: Host
63+
alertDetailsOverride:
64+
alertDisplayNameFormat: 'SAP ETD - SAP system {{SystemId}} stopped reporting data'
65+
alertDescriptionFormat: |
66+
{{Reason}}
67+
68+
A selective silence of a single SAP SID may indicate that an adversary is tampering with the security telemetry pipeline for this specific system (for example by stopping the SAP ETD collector for that SID, disabling the relevant data connector path, or blocking network egress from that host) in order to hide malicious activity while leaving the rest of the SAP ETD feed intact. Treat the silence as suspicious until proven otherwise: validate the integrity and runtime state of the SAP system, the SAP ETD collector configuration for this SID, and the data connector between SAP ETD and Microsoft Sentinel, and review recent change / admin activity on those components before concluding the cause is a benign outage.
69+
customDetails:
70+
SAP_SID: SystemId
71+
SAP_Client: ClientId
72+
LookbackPeriod: LookbackPeriod
73+
LastIngestion: LastIngestionTime
74+
LastIngestionGap: TimeSinceLastIngestion
75+
version: 1.0.0

Solutions/SAP ETD Cloud/Data/Solution_SAPETD.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,9 @@
99
"Analytic Rules/SAPETD-SynchAlerts.yaml",
1010
"Analytic Rules/SAPETD-SynchInvestigations.yaml",
1111
"Analytic Rules/SAPETD-LoginFromUnexpectedNetwork.yaml",
12-
"Analytic Rules/SAPETD-ExecutionofSensitiveFunctionModule.yaml"
12+
"Analytic Rules/SAPETD-ExecutionofSensitiveFunctionModule.yaml",
13+
"Analytic Rules/SAPETD-NoNewDataReceived.yaml",
14+
"Analytic Rules/SAPETD-SystemStoppedReporting.yaml"
1315
],
1416
"Playbooks": [],
1517
"PlaybookDescription": [],
@@ -22,7 +24,7 @@
2224
"Watchlists": [],
2325
"WatchlistDescription": [],
2426
"BasePath": "C:\\GitHub\\Azure-Sentinel\\Solutions\\SAP ETD Cloud",
25-
"Version": "3.0.4",
27+
"Version": "3.0.5",
2628
"Metadata": "SolutionMetadata.json",
2729
"TemplateSpec": true,
2830
"Is1PConnector": false
14.3 KB
Binary file not shown.

Solutions/SAP ETD Cloud/Package/createUiDefinition.json

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"config": {
77
"isWizard": false,
88
"basics": {
9-
"description": "<img src=\"https://raw.githubusercontent.com/Azure/Azure-Sentinel/master/Logos/SAPBTP.svg\" width=\"75px\" height=\"75px\">\n\n**Note:** Please refer to the following before installing the solution: \n\n• Review the solution [Release Notes](https://github.com/Azure/Azure-Sentinel/tree/master/Solutions/SAP%20ETD%20Cloud/ReleaseNotes.md)\n\n • There may be [known issues](https://aka.ms/sentinelsolutionsknownissues) pertaining to this Solution, please refer to them before installing.\n\nThe Microsoft Sentinel Solution for SAP ETD integrates SAP Enterprise Threat Detection entities into Microsoft Sentinel, allowing SOC teams to ingest, monitor, and hunt across SAP data. This integration enhances security by enabling faster detection, investigation, and mitigation of risks within SAP environments.\n\n**Data Connectors:** 1, **Analytic Rules:** 4\n\n[Learn more about Microsoft Sentinel](https://aka.ms/azuresentinel) | [Learn more about Solutions](https://aka.ms/azuresentinelsolutionsdoc)",
9+
"description": "<img src=\"https://raw.githubusercontent.com/Azure/Azure-Sentinel/master/Logos/SAPBTP.svg\" width=\"75px\" height=\"75px\">\n\n**Note:** Please refer to the following before installing the solution: \n\n• Review the solution [Release Notes](https://github.com/Azure/Azure-Sentinel/tree/master/Solutions/SAP%20ETD%20Cloud/ReleaseNotes.md)\n\n • There may be [known issues](https://aka.ms/sentinelsolutionsknownissues) pertaining to this Solution, please refer to them before installing.\n\nThe Microsoft Sentinel Solution for SAP ETD integrates SAP Enterprise Threat Detection entities into Microsoft Sentinel, allowing SOC teams to ingest, monitor, and hunt across SAP data. This integration enhances security by enabling faster detection, investigation, and mitigation of risks within SAP environments.\n\n**Data Connectors:** 1, **Analytic Rules:** 6\n\n[Learn more about Microsoft Sentinel](https://aka.ms/azuresentinel) | [Learn more about Solutions](https://aka.ms/azuresentinelsolutionsdoc)",
1010
"subscription": {
1111
"resourceProviders": [
1212
"Microsoft.OperationsManagement/solutions",
@@ -156,6 +156,34 @@
156156
}
157157
}
158158
]
159+
},
160+
{
161+
"name": "analytic5",
162+
"type": "Microsoft.Common.Section",
163+
"label": "SAP ETD - No new data received",
164+
"elements": [
165+
{
166+
"name": "analytic5-text",
167+
"type": "Microsoft.Common.TextBlock",
168+
"options": {
169+
"text": "Identifies a complete gap in the SAP Enterprise Threat Detection (ETD) feed when no records have been ingested into the SAPETDAlerts_CL table within the configured time window (default 1 hour). A full-feed blackout may indicate that an adversary is tampering with the security telemetry pipeline (for example by stopping the SAP ETD collector, disabling the data connector, or blocking network egress to Microsoft Sentinel) to hide follow-on activity in the SAP landscape. Benign causes such as a service outage, connector failure, or maintenance window are also possible and should be ruled out during triage. This rule is complementary to the per-SAP-system rule \"SAP ETD - SAP system stopped reporting data\", which can help distinguish a targeted silencing of a single system from a full-feed blackout. To change the freshness threshold, update the `LookbackPeriod` variable in the query and align `queryFrequency` / `queryPeriod` accordingly."
170+
}
171+
}
172+
]
173+
},
174+
{
175+
"name": "analytic6",
176+
"type": "Microsoft.Common.Section",
177+
"label": "SAP ETD - SAP system stopped reporting data",
178+
"elements": [
179+
{
180+
"name": "analytic6-text",
181+
"type": "Microsoft.Common.TextBlock",
182+
"options": {
183+
"text": "Identifies a per-system silence when an individual SAP system (identified by its SID) that has recently been reporting to SAP Enterprise Threat Detection (ETD) stops producing new records in the SAPETDAlerts_CL table within the configured per-system grace period (default 2 hours). A targeted silence of a single SID may indicate that an adversary with access to the SAP system, the SAP ETD collector for that SID, or the data connector is selectively blocking security telemetry to hide follow-on activity while leaving the rest of the SAP ETD feed intact; benign causes such as connectivity issues, collector misconfiguration, or planned maintenance for that SID are also possible and should be ruled out during triage. The set of \"expected\" SIDs is derived from any system that has reported within the `BaselineLookback` period (default 7 days); systems silent for longer are considered decommissioned and are not alerted on. Tunable parameters at the top of the query: `LookbackPeriod` (silence threshold per SID; align with `queryFrequency`) and `BaselineLookback` (how far back to look to discover known SIDs; align with `queryPeriod`). This rule is complementary to the overall-feed rule \"SAP ETD - No new data received\"."
184+
}
185+
}
186+
]
159187
}
160188
]
161189
}

0 commit comments

Comments
 (0)