← Back to SOC feed Coverage →

System Guard Security Level Baseline

kql MEDIUM Azure-Sentinel
DeviceEvents
huntingmicrosoftofficial
This rule was pulled from an open-source repository and enriched with AI. Validate in a test environment before deploying to production.
View original rule at Azure-Sentinel →
Retrieved: 2026-05-22T23:00:00Z · Confidence: medium

Hunt Hypothesis

Devices with a System Guard Security Level below the established baseline may indicate compromised hardware integrity or misconfigured security settings, as adversaries could exploit vulnerabilities in systems with weakened hardware-based security controls. SOC teams should proactively hunt for this behavior in Azure Sentinel to identify potential hardware tampering or advanced persistent threats that evade traditional software-based detection mechanisms.

KQL Query

let TargetSecurityLevel = 700;
DeviceEvents
| where Timestamp >= ago(7d)
| where ActionType == "DeviceBootAttestationInfo"
| extend AdditionalFieldData = parse_json(AdditionalFields)
| project DeviceName, ReportTime = todatetime(AdditionalFieldData.ReportValidityStartTime), CurrentSecurityLevel = toint(AdditionalFieldData.SystemGuardSecurityLevel), AdditionalFieldData.ReportValidityStartTime
| where CurrentSecurityLevel < TargetSecurityLevel
| summarize arg_max(ReportTime, CurrentSecurityLevel) by DeviceName

Analytic Rule Definition

id: 9365b174-d46f-41e9-998a-73e2fe5ae2d9
name: System Guard Security Level Baseline
description: |
  Establishes a baseline SystemGuardSecurityLevel and show the devices that are below that baseline.
  See https://techcommunity.microsoft.com/t5/Microsoft-Defender-ATP/How-insights-from-system-attestation-and-advanced-hunting-can/ba-p/969252 for full details on this query.
  And Device Boot Attestation Info and feel free to ping @DepletionMode or @flyingbluemonki on twitter.
requiredDataConnectors:
- connectorId: MicrosoftThreatProtection
  dataTypes:
  - DeviceEvents
query: |
  let TargetSecurityLevel = 700;
  DeviceEvents
  | where Timestamp >= ago(7d)
  | where ActionType == "DeviceBootAttestationInfo"
  | extend AdditionalFieldData = parse_json(AdditionalFields)
  | project DeviceName, ReportTime = todatetime(AdditionalFieldData.ReportValidityStartTime), CurrentSecurityLevel = toint(AdditionalFieldData.SystemGuardSecurityLevel), AdditionalFieldData.ReportValidityStartTime
  | where CurrentSecurityLevel < TargetSecurityLevel
  | summarize arg_max(ReportTime, CurrentSecurityLevel) by DeviceName

Required Data Sources

Sentinel TableNotes
DeviceEventsEnsure this data connector is enabled

References

False Positive Guidance

Original source: https://github.com/Azure/Azure-Sentinel/blob/main/Hunting Queries/Microsoft 365 Defender/General queries/System Guard Security Level Baseline.yaml