Back
Id0457b577-3864-42c9-9779-1c9441d86429
RulenamePCI App with Open Findings Before Audit Window
DescriptionDetects PCI-scoped applications with open Critical/High findings when an

upcoming PCI-DSS audit is within 30 days. Correlates PCIApplications and

AuditCalendar watchlists to surface compliance risk before audit deadlines.
SeverityHigh
TacticsImpact
TechniquesT1485
Required data connectorsStratoSecurePush
KindScheduled
Query frequency1d
Query period1455m
Trigger threshold0
Trigger operatorgt
Source Urihttps://github.com/Azure/Azure-Sentinel/blob/master/Solutions/StratoSecure/Analytic%20Rules/S11_PCI_AuditWindow.yaml
Version1.0.0
Arm template0457b577-3864-42c9-9779-1c9441d86429.json
Deploy To Azure
let auditWindowDays = 30;
let PCIApps = _GetWatchlist("PCIApplications")
    | project WL_ApplicationId = column_ifexists("ApplicationId", ""),
        WL_AppName = column_ifexists("AppName", ""),
        WL_AuditDate = column_ifexists("AuditDate", ""),
        WL_Owner = column_ifexists("Owner", "");
let AuditCalendar = _GetWatchlist("AuditCalendar")
    | where column_ifexists("Framework", "") =~ "PCI-DSS"
    | extend UpcomingAudit = todatetime(column_ifexists("AuditDate", ""))
    | where UpcomingAudit between (now() .. now() + auditWindowDays * 1d)
    | project WL_Cal_ApplicationId = column_ifexists("ApplicationId", ""),
        Framework = column_ifexists("Framework", ""), UpcomingAudit;
StratoSecure_Findings_CL
    | where FixStatus =~ "open"
    | where Severity in ("Critical", "High")
    | join kind=inner PCIApps on $left.ApplicationId == $right.WL_ApplicationId
    | join kind=inner AuditCalendar on $left.ApplicationId == $right.WL_Cal_ApplicationId
    | summarize TotalOpenFindings = count(), MaxSeverityInt = max(SeverityInt),
        RuleIds = make_set(RuleId, 20), EndTime = max(TimeGenerated)
        by ApplicationId, WL_AppName, WL_Owner, Framework, UpcomingAudit, StraTenantId
    | extend MaxSeverity = case(
        MaxSeverityInt >= 9, "Critical",
        MaxSeverityInt >= 7, "High",
        MaxSeverityInt >= 4, "Medium",
        "Low")
    | project TimeGenerated = EndTime, ApplicationId, AppName = WL_AppName, Owner = WL_Owner,
        StraTenantId, Framework, UpcomingAudit, TotalOpenFindings, MaxSeverity, RuleIds
entityMappings:
- fieldMappings:
  - identifier: AppId
    columnName: ApplicationId
  entityType: CloudApplication
id: 0457b577-3864-42c9-9779-1c9441d86429
OriginalUri: https://github.com/Azure/Azure-Sentinel/blob/master/Solutions/StratoSecure/Analytic%20Rules/S11_PCI_AuditWindow.yaml
triggerOperator: gt
tactics:
- Impact
kind: Scheduled
requiredDataConnectors:
- dataTypes:
  - StratoSecure_Findings_CL
  connectorId: StratoSecurePush
queryPeriod: 1455m
severity: High
relevantTechniques:
- T1485
triggerThreshold: 0
version: 1.0.0
name: PCI App with Open Findings Before Audit Window
status: Available
query: |
  let auditWindowDays = 30;
  let PCIApps = _GetWatchlist("PCIApplications")
      | project WL_ApplicationId = column_ifexists("ApplicationId", ""),
          WL_AppName = column_ifexists("AppName", ""),
          WL_AuditDate = column_ifexists("AuditDate", ""),
          WL_Owner = column_ifexists("Owner", "");
  let AuditCalendar = _GetWatchlist("AuditCalendar")
      | where column_ifexists("Framework", "") =~ "PCI-DSS"
      | extend UpcomingAudit = todatetime(column_ifexists("AuditDate", ""))
      | where UpcomingAudit between (now() .. now() + auditWindowDays * 1d)
      | project WL_Cal_ApplicationId = column_ifexists("ApplicationId", ""),
          Framework = column_ifexists("Framework", ""), UpcomingAudit;
  StratoSecure_Findings_CL
      | where FixStatus =~ "open"
      | where Severity in ("Critical", "High")
      | join kind=inner PCIApps on $left.ApplicationId == $right.WL_ApplicationId
      | join kind=inner AuditCalendar on $left.ApplicationId == $right.WL_Cal_ApplicationId
      | summarize TotalOpenFindings = count(), MaxSeverityInt = max(SeverityInt),
          RuleIds = make_set(RuleId, 20), EndTime = max(TimeGenerated)
          by ApplicationId, WL_AppName, WL_Owner, Framework, UpcomingAudit, StraTenantId
      | extend MaxSeverity = case(
          MaxSeverityInt >= 9, "Critical",
          MaxSeverityInt >= 7, "High",
          MaxSeverityInt >= 4, "Medium",
          "Low")
      | project TimeGenerated = EndTime, ApplicationId, AppName = WL_AppName, Owner = WL_Owner,
          StraTenantId, Framework, UpcomingAudit, TotalOpenFindings, MaxSeverity, RuleIds
description: |
  Detects PCI-scoped applications with open Critical/High findings when an
  upcoming PCI-DSS audit is within 30 days. Correlates PCIApplications and
  AuditCalendar watchlists to surface compliance risk before audit deadlines.
queryFrequency: 1d
{
  "$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/0457b577-3864-42c9-9779-1c9441d86429')]",
      "kind": "Scheduled",
      "name": "[concat(parameters('workspace'),'/Microsoft.SecurityInsights/0457b577-3864-42c9-9779-1c9441d86429')]",
      "properties": {
        "alertRuleTemplateName": "0457b577-3864-42c9-9779-1c9441d86429",
        "customDetails": null,
        "description": "Detects PCI-scoped applications with open Critical/High findings when an\nupcoming PCI-DSS audit is within 30 days. Correlates PCIApplications and\nAuditCalendar watchlists to surface compliance risk before audit deadlines.\n",
        "displayName": "PCI App with Open Findings Before Audit Window",
        "enabled": true,
        "entityMappings": [
          {
            "entityType": "CloudApplication",
            "fieldMappings": [
              {
                "columnName": "ApplicationId",
                "identifier": "AppId"
              }
            ]
          }
        ],
        "OriginalUri": "https://github.com/Azure/Azure-Sentinel/blob/master/Solutions/StratoSecure/Analytic%20Rules/S11_PCI_AuditWindow.yaml",
        "query": "let auditWindowDays = 30;\nlet PCIApps = _GetWatchlist(\"PCIApplications\")\n    | project WL_ApplicationId = column_ifexists(\"ApplicationId\", \"\"),\n        WL_AppName = column_ifexists(\"AppName\", \"\"),\n        WL_AuditDate = column_ifexists(\"AuditDate\", \"\"),\n        WL_Owner = column_ifexists(\"Owner\", \"\");\nlet AuditCalendar = _GetWatchlist(\"AuditCalendar\")\n    | where column_ifexists(\"Framework\", \"\") =~ \"PCI-DSS\"\n    | extend UpcomingAudit = todatetime(column_ifexists(\"AuditDate\", \"\"))\n    | where UpcomingAudit between (now() .. now() + auditWindowDays * 1d)\n    | project WL_Cal_ApplicationId = column_ifexists(\"ApplicationId\", \"\"),\n        Framework = column_ifexists(\"Framework\", \"\"), UpcomingAudit;\nStratoSecure_Findings_CL\n    | where FixStatus =~ \"open\"\n    | where Severity in (\"Critical\", \"High\")\n    | join kind=inner PCIApps on $left.ApplicationId == $right.WL_ApplicationId\n    | join kind=inner AuditCalendar on $left.ApplicationId == $right.WL_Cal_ApplicationId\n    | summarize TotalOpenFindings = count(), MaxSeverityInt = max(SeverityInt),\n        RuleIds = make_set(RuleId, 20), EndTime = max(TimeGenerated)\n        by ApplicationId, WL_AppName, WL_Owner, Framework, UpcomingAudit, StraTenantId\n    | extend MaxSeverity = case(\n        MaxSeverityInt >= 9, \"Critical\",\n        MaxSeverityInt >= 7, \"High\",\n        MaxSeverityInt >= 4, \"Medium\",\n        \"Low\")\n    | project TimeGenerated = EndTime, ApplicationId, AppName = WL_AppName, Owner = WL_Owner,\n        StraTenantId, Framework, UpcomingAudit, TotalOpenFindings, MaxSeverity, RuleIds\n",
        "queryFrequency": "P1D",
        "queryPeriod": "PT1455M",
        "severity": "High",
        "status": "Available",
        "subTechniques": [],
        "suppressionDuration": "PT1H",
        "suppressionEnabled": false,
        "tactics": [
          "Impact"
        ],
        "techniques": [
          "T1485"
        ],
        "templateVersion": "1.0.0",
        "triggerOperator": "GreaterThan",
        "triggerThreshold": 0
      },
      "type": "Microsoft.OperationalInsights/workspaces/providers/alertRules"
    }
  ]
}