Query Details
# Microsoft Defender XDR - Critical Assets


## Query Information
### Description
The below queries retrieve Defender XDR Critical Asset Information.
#### References
- [Overview of critical asset management](https://learn.microsoft.com/en-us/security-exposure-management/critical-asset-management)
- [Critical assets protection in Microsoft Defender for Cloud](https://learn.microsoft.com/en-us/azure/defender-for-cloud/critical-assets-protection)
### Author
- **Alex Verboon**
### Credits
- **Nicola Suter**
## Defender XDR
Retrieve Defender XDR - Identities with Criticality Information
```kql
IdentityInfo
| summarize arg_max(TimeGenerated, *) by AccountObjectId
| extend CriticalityLabel = case(
CriticalityLevel == 0, "Very High",
CriticalityLevel == 1, "High",
CriticalityLevel == 2, "Medium",
CriticalityLevel == 3, "Low",
CriticalityLevel == 4, "Not defined",
"Unknown"
)
| project AccountName,AccountUpn, AccountDisplayName, CriticalityLabel, Type
| sort by Type
```
All Assets
```kql
ExposureGraphNodes
| where isnotempty(NodeProperties.rawData.criticalityLevel.criticalityLevel)
| mv-expand RuleName = NodeProperties.rawData.criticalityLevel.ruleNames
| extend RuleBasedCriticalityLevel = NodeProperties.rawData.criticalityLevel.ruleBasedCriticalityLevel
| extend CriticalityLevel = NodeProperties.rawData.criticalityLevel.criticalityLevel
| extend isSensitive = NodeProperties.rawData.tags has "Sensitive"
| extend CriticalityLabel = case(
CriticalityLevel == 0, "Very High",
CriticalityLevel == 1, "High",
CriticalityLevel == 2, "Medium",
CriticalityLevel == 3, "Low",
"Not Defined"
)
| extend RuleBasedCriticalityLabel = case(
RuleBasedCriticalityLevel == 0, "Very High",
RuleBasedCriticalityLevel == 1, "High",
RuleBasedCriticalityLevel == 2, "Medium",
RuleBasedCriticalityLevel == 3, "Low",
"Not Defined"
)
| project NodeName, NodeLabel, RuleName, RuleBasedCriticalityLevel, RuleBasedCriticalityLabel, CriticalityLevel, CriticalityLabel, isSensitive
| sort by NodeLabel
```
Assets where the Criticality Level is assigned manually
```kql
ExposureGraphNodes
| where isnotempty(NodeProperties.rawData.criticalityLevel.criticalityLevel)
| mv-expand RuleName = NodeProperties.rawData.criticalityLevel.ruleNames
| extend RuleBasedCriticalityLevel = NodeProperties.rawData.criticalityLevel.ruleBasedCriticalityLevel
| extend CriticalityLevel = NodeProperties.rawData.criticalityLevel.criticalityLevel
| extend isSensitive = NodeProperties.rawData.tags has "Sensitive"
| extend CriticalityLabel = case(
CriticalityLevel == 0, "Very High",
CriticalityLevel == 1, "High",
CriticalityLevel == 2, "Medium",
CriticalityLevel == 3, "Low",
"Not Defined"
)
| extend RuleBasedCriticalityLabel = case(
RuleBasedCriticalityLevel == 0, "Very High",
RuleBasedCriticalityLevel == 1, "High",
RuleBasedCriticalityLevel == 2, "Medium",
RuleBasedCriticalityLevel == 3, "Low",
"Not Defined"
)
| project NodeName, NodeLabel, RuleName, RuleBasedCriticalityLevel, RuleBasedCriticalityLabel, CriticalityLevel, CriticalityLabel, isSensitive
| sort by NodeLabel
| where RuleName == "Manually Assigned"
```
This document provides a summary of KQL (Kusto Query Language) queries used to retrieve critical asset information from Microsoft Defender XDR. The queries are designed to identify and categorize assets based on their criticality levels.
Identities with Criticality Information:
IdentityInfo table.arg_max.All Assets:
ExposureGraphNodes table.Assets with Manually Assigned Criticality:
ExposureGraphNodes.These queries help in managing and protecting critical assets by providing insights into their criticality and sensitivity, allowing for better security management and prioritization.

Alex Verboon
Released: April 16, 2026
Tables
Keywords
Operators