Analytic rule catalog
Critical Finding Overdue on Internet-Facing App
Back
| Id | 88c4b680-db1c-46b9-8ca4-4165c3abf63f |
| Rulename | Critical Finding Overdue on Internet-Facing App |
| Description | Detects Critical and High severity findings older than 7 days that remain open on internet-facing applications. Uses the InternetFacingApps watchlist to scope results to externally exposed assets requiring urgent remediation. |
| Severity | High |
| Tactics | Impact |
| Techniques | T1499 |
| Required data connectors | StratoSecurePush |
| Kind | Scheduled |
| Query frequency | 1d |
| Query period | 1455m |
| Trigger threshold | 0 |
| Trigger operator | gt |
| Source Uri | https://github.com/Azure/Azure-Sentinel/blob/master/Solutions/StratoSecure/Analytic%20Rules/S6_CriticalFinding_Overdue.yaml |
| Version | 1.0.0 |
| Arm template | 88c4b680-db1c-46b9-8ca4-4165c3abf63f.json |
let maxAgeDays = 7;
let InternetFacingList = _GetWatchlist("InternetFacingApps")
| project WL_ApplicationId = column_ifexists("ApplicationId", ""),
WL_AppName = column_ifexists("AppName", ""),
WL_Owner = column_ifexists("Owner", "");
StratoSecure_Findings_CL
| where FixStatus =~ "open"
| where Severity in ("Critical", "High")
| extend AgeInDays = datetime_diff("day", now(), TimeGenerated)
| where AgeInDays > maxAgeDays
| join kind=inner InternetFacingList on $left.ApplicationId == $right.WL_ApplicationId
| summarize TotalOverdueFindings = count(), OldestAge = max(AgeInDays),
RuleIds = make_set(RuleId, 20), EndTime = max(TimeGenerated)
by ApplicationId, WL_AppName, WL_Owner, StraTenantId
| project TimeGenerated = EndTime, ApplicationId, AppName = WL_AppName, Owner = WL_Owner,
StraTenantId, TotalOverdueFindings, OldestAge, RuleIds
name: Critical Finding Overdue on Internet-Facing App
triggerOperator: gt
query: |
let maxAgeDays = 7;
let InternetFacingList = _GetWatchlist("InternetFacingApps")
| project WL_ApplicationId = column_ifexists("ApplicationId", ""),
WL_AppName = column_ifexists("AppName", ""),
WL_Owner = column_ifexists("Owner", "");
StratoSecure_Findings_CL
| where FixStatus =~ "open"
| where Severity in ("Critical", "High")
| extend AgeInDays = datetime_diff("day", now(), TimeGenerated)
| where AgeInDays > maxAgeDays
| join kind=inner InternetFacingList on $left.ApplicationId == $right.WL_ApplicationId
| summarize TotalOverdueFindings = count(), OldestAge = max(AgeInDays),
RuleIds = make_set(RuleId, 20), EndTime = max(TimeGenerated)
by ApplicationId, WL_AppName, WL_Owner, StraTenantId
| project TimeGenerated = EndTime, ApplicationId, AppName = WL_AppName, Owner = WL_Owner,
StraTenantId, TotalOverdueFindings, OldestAge, RuleIds
queryFrequency: 1d
description: |
Detects Critical and High severity findings older than 7 days that remain
open on internet-facing applications. Uses the InternetFacingApps watchlist
to scope results to externally exposed assets requiring urgent remediation.
id: 88c4b680-db1c-46b9-8ca4-4165c3abf63f
triggerThreshold: 0
queryPeriod: 1455m
version: 1.0.0
kind: Scheduled
status: Available
severity: High
requiredDataConnectors:
- connectorId: StratoSecurePush
dataTypes:
- StratoSecure_Findings_CL
OriginalUri: https://github.com/Azure/Azure-Sentinel/blob/master/Solutions/StratoSecure/Analytic%20Rules/S6_CriticalFinding_Overdue.yaml
relevantTechniques:
- T1499
tactics:
- Impact
entityMappings:
- fieldMappings:
- identifier: AppId
columnName: ApplicationId
entityType: CloudApplication
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"workspace": {
"type": "String"
}
},
"resources": [
{
"apiVersion": "2024-01-01-preview",
"id": "[concat(resourceId('Microsoft.OperationalInsights/workspaces/providers', parameters('workspace'), 'Microsoft.SecurityInsights'),'/alertRules/88c4b680-db1c-46b9-8ca4-4165c3abf63f')]",
"kind": "Scheduled",
"name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/88c4b680-db1c-46b9-8ca4-4165c3abf63f')]",
"properties": {
"alertRuleTemplateName": "88c4b680-db1c-46b9-8ca4-4165c3abf63f",
"customDetails": null,
"description": "Detects Critical and High severity findings older than 7 days that remain\nopen on internet-facing applications. Uses the InternetFacingApps watchlist\nto scope results to externally exposed assets requiring urgent remediation.\n",
"displayName": "Critical Finding Overdue on Internet-Facing App",
"enabled": true,
"entityMappings": [
{
"entityType": "CloudApplication",
"fieldMappings": [
{
"columnName": "ApplicationId",
"identifier": "AppId"
}
]
}
],
"OriginalUri": "https://github.com/Azure/Azure-Sentinel/blob/master/Solutions/StratoSecure/Analytic%20Rules/S6_CriticalFinding_Overdue.yaml",
"query": "let maxAgeDays = 7;\nlet InternetFacingList = _GetWatchlist(\"InternetFacingApps\")\n | project WL_ApplicationId = column_ifexists(\"ApplicationId\", \"\"),\n WL_AppName = column_ifexists(\"AppName\", \"\"),\n WL_Owner = column_ifexists(\"Owner\", \"\");\nStratoSecure_Findings_CL\n | where FixStatus =~ \"open\"\n | where Severity in (\"Critical\", \"High\")\n | extend AgeInDays = datetime_diff(\"day\", now(), TimeGenerated)\n | where AgeInDays > maxAgeDays\n | join kind=inner InternetFacingList on $left.ApplicationId == $right.WL_ApplicationId\n | summarize TotalOverdueFindings = count(), OldestAge = max(AgeInDays),\n RuleIds = make_set(RuleId, 20), EndTime = max(TimeGenerated)\n by ApplicationId, WL_AppName, WL_Owner, StraTenantId\n | project TimeGenerated = EndTime, ApplicationId, AppName = WL_AppName, Owner = WL_Owner,\n StraTenantId, TotalOverdueFindings, OldestAge, RuleIds\n",
"queryFrequency": "P1D",
"queryPeriod": "PT1455M",
"severity": "High",
"status": "Available",
"subTechniques": [],
"suppressionDuration": "PT1H",
"suppressionEnabled": false,
"tactics": [
"Impact"
],
"techniques": [
"T1499"
],
"templateVersion": "1.0.0",
"triggerOperator": "GreaterThan",
"triggerThreshold": 0
},
"type": "Microsoft.OperationalInsights/workspaces/providers/alertRules"
}
]
}