Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Usare il grafico dell'esposizione aziendale in Gestione dell'esposizione in Microsoft Security per cercare in modo proattivo le minacce all'esposizione aziendale tra endpoint, ambienti cloud e infrastrutture ibride nella ricerca avanzata nel portale di Microsoft Defender. Con l'integrazione di Defender per il cloud nel portale di Defender, il grafico dell'esposizione include ora tipi di nodi cloud ed entità provenienti da ambienti Azure, AWS e GCP.
Le sezioni seguenti forniscono esempi, suggerimenti e suggerimenti per la creazione di query nel grafico dell'esposizione aziendale.
Prerequisiti
- Scopri di più sulla gestione della superficie di attacco.
- Esaminare le autorizzazioni necessarie per l'uso del grafico.
Creare query di ricerca avanzata
- Esaminare le procedure consigliate per la creazione di query di ricerca avanzate
- Inizia con Kusto Query Language (KQL)
Usa l'operatore make-graph
L'operatore make-graph di Kusto carica in memoria i dati relativi a nodi e archi.
- Poiché Kusto carica solo le colonne in uso, non è necessario selezionare in modo esplicito le colonne.
- Tuttavia, la
NodePropertiescolonna contiene tutte le informazioni sui nodi e quindi è di grandi dimensioni. - Nella maggior parte degli scenari è utile estrarre solo le informazioni necessarie prima di immetterle nell'operatore
make-graph.
Esempio
let FilteredNodes = ExposureGraphNodes
| extend ContainsSensetiveData = NodeProperties has "containsSensitiveData"
| project Id, ContainsSensetiveData, Label, EntityIds, Categories;
Edges
| make-graph SourceNodeId --> TargetNodeId with FilteredNodes on Id
..
Usare colonne dinamiche e indicizzazione intelligente
NodeProperties e Categories sono colonne dinamiche.
- Kusto sa che tali colonne contengono contenuto simile a json e applica l'indicizzazione intelligente.
- Tuttavia, non tutti gli operatori Kusto usano l'indice. Ad esempio,
set_has_element,isempty,isnotnullnon usano l'indice quando vengono applicati a una colonna dinamica eisnotnull(Properties["containsSensitiveData"]non usa l'indice. - Usare invece l'operatore
has(), che usa sempre l'indice.
Esempio
Nella query seguente l'operatore has controlla la data stringa e set_has_element verifica la presenza dell'elemento data .
L'uso di entrambi gli operatori è importante perché l'operatore has() restituisce true anche per una categoria prefix_data.
Categories has('data') and set_has_element(Categories, 'data')
Scopri di più su la comprensione dei termini relativi alle stringhe.
Esempi di query di esposizione
Gli esempi seguenti consentono di scrivere query per comprendere i dati sull'esposizione alla sicurezza nel tenant.
Elencare tutte le etichette dei nodi nel tenant
La query seguente raggruppa i dati nella tabella ExposureGraphNodes e usa l'operatore summarize di Kusto per elencarli in base a NodeLabel.
ExposureGraphNodes
| summarize by NodeLabel
Elencare tutte le etichette edge nel tenant
La query seguente raggruppa i dati nella tabella e usa l'operatore ExposureGraphEdges di summarize Kusto per elencarli in base alle etichette perimetrali (EdgeLabel).
ExposureGraphEdges
| summarize by EdgeLabel
Elencare tutte le connessioni da un'etichetta di nodo specificata
La query seguente raggruppa i dati nella tabella ExposureGraphEdges e, quando l'etichetta del nodo di origine è microsoft.compute/virtualmachines, riepiloga le macchine virtuali per EdgeLabel. Riepiloga i bordi che connettono gli asset alle macchine virtuali nel grafico dell'esposizione alla sicurezza. Con l'integrazione di Defender per cloud nel portale di Defender, ora sono incluse le risorse cloud di più ambienti.
ExposureGraphEdges
| where SourceNodeLabel == "microsoft.compute/virtualmachines"
| summarize by EdgeLabel
Elencare tutte le connessioni a un'etichetta di nodo specifica
La query seguente riepiloga i bordi che connettono le macchine virtuali ad altri asset del grafico di esposizione alla sicurezza. Raggruppa i dati nella tabella ExposureGraphEdges e, dove l'etichetta del nodo di destinazione è microsoft.compute/virtualmachines, usa l'operatore summarize di Kusto per visualizzare l'etichetta del nodo di destinazione in base a EdgeLabel.
ExposureGraphEdges
| where TargetNodeLabel == "microsoft.compute/virtualmachines"
| summarize by EdgeLabel
Elencare le proprietà di un'etichetta di nodo specifica
La query seguente elenca le proprietà dell'etichetta del nodo della macchina virtuale. Raggruppa i dati nella ExposureGraphNodes tabella, filtrati per visualizzare solo i risultati dell'etichetta del nodo "microsoft.compute/virtualmachines". Con l'operatore project-keep , la query mantiene la NodeProperties colonna . I dati restituiti sono limitati a una riga. Con l'integrazione di Defender per cloud nel portale di Defender, NodeProperties include ora altre relazioni e attributi specifici del cloud.
ExposureGraphNodes
| where NodeLabel == "microsoft.compute/virtualmachines"
| project-keep NodeProperties
| take 1
Esempio: Eseguire query sulle risorse cloud in più ambienti
La query seguente illustra come eseguire query sulle risorse cloud da ambienti diversi ora disponibili con l'integrazione di Defender per il cloud nel portale di Defender:
ExposureGraphNodes
| where NodeLabel contains "microsoft.compute" or NodeLabel contains "aws." or NodeLabel contains "gcp."
| summarize count() by NodeLabel
| order by count_ desc
Eseguire query nel grafico di esposizione
Per eseguire query sul grafico di esposizione:
Nel portale di Microsoft Defender selezionare Ricerca > avanzata.
Nell'area Query, digitare la query. Usare lo schema del grafico, le funzioni e le tabelle degli operatori oppure gli esempi seguenti per creare la query.
Selezionare Esegui query.
Esempi di query orientate al grafico
Usa questi esempi di query basate su grafi per scrivere query sull'esposizione alla sicurezza più efficaci. Gli esempi cercano modelli per esporre le relazioni tra entità che possono individuare rischi. Viene illustrato come correlare il contesto con i segnali di evento imprevisto/avviso.
Elencare tutte le etichette dei nodi collegate tramite un arco a un'etichetta di nodo specifica
La query seguente restituisce un elenco di tutte le etichette dei nodi in ingresso con un connettore all'etichetta del nodo della macchina virtuale. Crea una struttura a grafo mappando i dati della colonna SourceNodeId nella tabella ExposureGraphEdges alla colonna TargetNodeId nella tabella ExposureGraphNodes con l'operatore make-graph.
Usa quindi l'operatore graph-match per creare un modello del grafo in cui il nodo di destinazione TargetNode e NodeLabel corrispondono a microsoft.compute/virtualmachines. L'operatore project viene utilizzato per mantenere solo l'oggetto IncomingNodeLabels. Elenca i risultati in base a IncomingNodeLabels.
ExposureGraphEdges
| make-graph SourceNodeId --> TargetNodeId with ExposureGraphNodes
on NodeId
| graph-match (SourceNode)-[edges]->(TargetNode)
where TargetNode.NodeLabel == "microsoft.compute/virtualmachines"
project IncomingNodeLabels = SourceNode.NodeLabel
| summarize by IncomingNodeLabels
Elencare tutte le etichette dei nodi adiacenti a una specifica etichetta di nodo
La query seguente restituisce un elenco di tutte le etichette dei nodi in uscita con un connettore all'etichetta del nodo della macchina virtuale.
- Crea una struttura grafico eseguendo il mapping della colonna
SourceNodeIdche usa i dati della tabellaExposureGraphEdgesalla colonnaTargetNodeIddella tabellaExposureGraphNodesusando l'operatoremake-graphper creare una struttura grafico. - Usa quindi l'operatore
graph-matchper trovare la corrispondenza con il modello grafico in cuiSourceNodeeNodeLabelcorrispondonomicrosoft.compute/virtualmachines. - L'operatore
projectviene utilizzato per mantenere solo l'oggettoOutgoingNodeLabels. Elenca i risultati in base aOutgoingNodeLabels.
ExposureGraphEdges
| make-graph SourceNodeId --> TargetNodeId with ExposureGraphNodes
on NodeId
| graph-match (SourceNode)-[edges]->(TargetNode)
where SourceNode.NodeLabel == "microsoft.compute/virtualmachines"
project OutgoingNodeLabels = SourceNode.NodeLabel
| summarize by OutgoingNodeLabels
Individuare le macchine virtuali esposte a Internet con una vulnerabilità RCE
La query seguente consente di individuare le macchine virtuali esposte a Internet e a una vulnerabilità RCE (Remote Code Execution) negli ambienti cloud.
- Usa la tabella schema
ExposureGraphNodes. - Quando entrambi
NodePropertiesexposedToInternetevulnerableToRCEsono true, verifica che la categoria (Categories) sia macchine virtuali (virtual_machine). - Con l'integrazione di Defender per cloud nel portale di Defender, sono ora incluse macchine virtuali di ambienti Azure, AWS e GCP.
ExposureGraphNodes
| where isnotnull(NodeProperties.rawData.exposedToInternet)
| where isnotnull(NodeProperties.rawData.vulnerableToRCE)
| where Categories has "virtual_machine" and set_has_element(Categories, "virtual_machine")
Esempio: Trovare percorsi di attacco ibridi tra gli asset cloud e locali
La query seguente illustra come identificare potenziali percorsi di attacco ibridi con l'integrazione di Defender per il cloud nel portale di Defender:
let CloudAssets = ExposureGraphNodes
| where Categories has "virtual_machine" and (NodeLabel contains "microsoft.compute" or NodeLabel contains "aws." or NodeLabel contains "gcp.");
let OnPremAssets = ExposureGraphNodes
| where Categories has "device" and not(NodeLabel contains "microsoft.compute" or NodeLabel contains "aws." or NodeLabel contains "gcp.");
ExposureGraphEdges
| make-graph SourceNodeId --> TargetNodeId with ExposureGraphNodes on NodeId
| graph-match (CloudVM)-[edge1]->(Identity)-[edge2]->(OnPremDevice)
where set_has_element(CloudVM.Categories, "virtual_machine") and
(CloudVM.NodeLabel contains "microsoft.compute" or CloudVM.NodeLabel contains "aws." or CloudVM.NodeLabel contains "gcp.") and
set_has_element(Identity.Categories, "identity") and
set_has_element(OnPremDevice.Categories, "device") and
not(OnPremDevice.NodeLabel contains "microsoft.compute" or OnPremDevice.NodeLabel contains "aws." or OnPremDevice.NodeLabel contains "gcp.")
project CloudVMName=CloudVM.NodeName, IdentityName=Identity.NodeName, OnPremDeviceName=OnPremDevice.NodeName
Individua i dispositivi esposti su Internet con una vulnerabilità di elevazione dei privilegi
La query seguente cerca i dispositivi con connessione Internet esposti a una vulnerabilità di escalation dei privilegi, che potrebbe consentire l'accesso a privilegi di livello superiore all'interno del sistema.
- Usa la tabella schema
ExposureGraphNodes. - Quando
NodePropertiesè con connessione a Internet (IsInternetFacing) eVulnerableToPrivilegeEscalation, la query verifica che gli elementi inCategoriessiano effettivamente dispositivi (device).
ExposureGraphNodes
| where isnotnull(NodeProperties.rawData.IsInternetFacing)
| where isnotnull(NodeProperties.rawData.VulnerableToPrivilegeEscalation)
| where set_has_element(Categories, "device")
Visualizzare tutti gli utenti connessi a più di un dispositivo critico
Questa query restituisce un elenco di utenti connessi a più di un dispositivo critico, insieme al numero di dispositivi a cui sono connessi.
- Crea una tabella
IdentitiesAndCriticalDevicesutilizzando i datiExposureGraphNodesfiltrati in base ai dispositivi con un livello di criticità superiore a 4 oppure peridentity. - Crea quindi una struttura a grafo con l'operatore
make-graph, doveEdgeLabelèCan Authenticate As. - Usa l'operatore
graph-matchper trovare le istanze in cui undevicecorrisponde a unidentity. - Quindi usa l'operatore
projectper conservare gli ID di identità e gli ID di dispositivo. - L'operatore
mv-applyfiltra gli ID dei dispositivi e gli ID di identità in base al tipo. Vengono riepilogati e visualizzati i risultati in una tabella con le intestazioni ,Number Of devices user is logged-in toeUser Id.
let IdentitiesAndCriticalDevices = ExposureGraphNodes
| where
// Critical Device
(set_has_element(Categories, "device") and isnotnull(NodeProperties.rawData.criticalityLevel) and NodeProperties.rawData.criticalityLevel.criticalityLevel > 4)
// or identity
or set_has_element(Categories, "identity");
ExposureGraphEdges
| where EdgeLabel == "Can Authenticate As"
| make-graph SourceNodeId --> TargetNodeId with IdentitiesAndCriticalDevices on NodeId
| graph-match (Device)-[canConnectAs]->(Identity)
where set_has_element(Identity.Categories, "identity") and set_has_element(Device.Categories, "device")
project IdentityIds=Identity.EntityIds, DeviceIds=Device.EntityIds
| mv-apply DeviceIds on (
where DeviceIds.type == "DeviceInventoryId")
| mv-apply IdentityIds on (
where IdentityIds.type == "SecurityIdentifier")
| summarize NumberOfDevicesUserLoggedinTo=count() by tostring(IdentityIds.id)
| where NumberOfDevicesUserLoggedinTo > 1
| project ["Number Of devices user is logged-in to"]=NumberOfDevicesUserLoggedinTo, ["User Id"]=IdentityIds_id
Visualizzare i dispositivi client con una vulnerabilità critica/gli utenti che hanno accesso a server di valore elevato
La query seguente restituisce un elenco di dispositivi con vulnerabilità RCE e relativi ID dispositivo e dispositivi con vulnerabilità critiche elevate e i relativi ID dispositivo.
- Viene creata una
IdentitiesAndCriticalDevicestabella che include i dispositivi (device) con vulnerabilità RCE con criticità inferiore a quattro e le identità (identity) che, tramite il filtro e la corrispondenza dei criteri, mostrano i dispositivi con vulnerabilità critiche. - L'elenco viene filtrato in modo da visualizzare solo le connessioni con etichette perimetrali
Can Authenticate AseCanRemoteInteractiveLogonTo.
let IdentitiesAndCriticalDevices = ExposureGraphNodes // Reduce the number of nodes to match
| where
// Critical devices & devices with RCE vulnerabilities
(set_has_element(Categories, "device") and
(
// Critical devices
(isnotnull(NodeProperties.rawData.criticalityLevel) and NodeProperties.rawData.criticalityLevel.criticalityLevel < 4)
or
// Devices with RCE vulnerability
isnotnull(NodeProperties.rawData.vulnerableToRCE)
)
)
or
// identity
set_has_element(Categories, "identity");
ExposureGraphEdges
| where EdgeLabel in~ ("Can Authenticate As", "CanRemoteInteractiveLogonTo") // Reduce the number of edges to match
| make-graph SourceNodeId --> TargetNodeId with IdentitiesAndCriticalDevices on NodeId
| graph-match (DeviceWithRCE)-[CanConnectAs]->(Identity)-[CanRemoteLogin]->(CriticalDevice)
where
CanConnectAs.EdgeLabel =~ "Can Authenticate As" and
CanRemoteLogin.EdgeLabel =~ "CanRemoteInteractiveLogonTo" and
set_has_element(Identity.Categories, "identity") and
set_has_element(DeviceWithRCE.Categories, "device") and isnotnull(DeviceWithRCE.NodeProperties.rawData.vulnerableToRCE) and
set_has_element(CriticalDevice.Categories, "device") and isnotnull(CriticalDevice.NodeProperties.rawData.criticalityLevel)
project DeviceWithRCEIds=DeviceWithRCE.EntityIds, DeviceWithRCEName=DeviceWithRCE.NodeName, CriticalDeviceIds=CriticalDevice.EntityIds, CriticalDeviceName=CriticalDevice.NodeName
Specificare tutti i percorsi dall'ID nodo specifico a un nodo con un'etichetta specifica
Questa query visualizza il percorso da uno specifico nodo IP, passando attraverso un massimo di tre asset, che porta a una connessione con il nodo etichettato come macchina virtuale.
- Usa le tabelle dello schema
ExposureGraphNodeseExposureGraphEdgese gli operatorimake-graphegraph-matchper creare una struttura a grafo. - Con l'operatore
projectvisualizza un elenco di ID IP, proprietà IP, ID macchina virtuale e proprietà della macchina virtuale.
let IPsAndVMs = ExposureGraphNodes
| where (set_has_element(Categories, "ip_address") or set_has_element(Categories, "virtual_machine"));
ExposureGraphEdges
| make-graph SourceNodeId --> TargetNodeId with IPsAndVMs on NodeId
| graph-match (IP)-[anyEdge*1..3]->(VM)
where set_has_element(IP.Categories, "ip_address") and set_has_element(VM.Categories, "virtual_machine")
project IpIds=IP.EntityIds, IpProperties=IP.NodeProperties.rawData, VmIds=VM.EntityIds, VmProperties=VM.NodeProperties.rawData