Condividi tramite


Eseguire query sul grafico dell'esposizione aziendale

Usare il grafico dell'esposizione aziendale in Gestione dell'esposizione in Microsoft Security per cercare in modo proattivo le minacce all'esposizione aziendale nella ricerca avanzata nel portale di Microsoft Defender.

Questo articolo fornisce alcuni esempi, suggerimenti e suggerimenti per la costruzione di query nel grafico dell'esposizione aziendale.

Prerequisiti

Compilare query di ricerca avanzate

Usare l'operatore make-graph

L'operatore kusto make-graph carica i nodi e i bordi dei dati in memoria.

  • Poiché Kusto carica solo le colonne in uso, non è necessario selezionare in modo esplicito le colonne.
  • Tuttavia, la NodeProperties colonna 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, isemptyisnotnull , non usare l'indice quando vengono applicati a una colonna dinamica e isnotnull(Properties["containsSensitiveData"] non usano 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')

Altre informazioni sui termini stringa.

Query di esposizione di esempio

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 e usa l'operatore ExposureGraphNodes di summarize Kusto per elencarli in base NodeLabela .

ExposureGraphNodes
| summarize by NodeLabel

Elencare tutte le etichette perimetrali 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 ExposureGraphEdges tabella e, dove l'etichetta del nodo di origine è microsoft.compute/virtualmachines, riepiloga la macchina virtuale in base EdgeLabela . Riepiloga i bordi che connettono gli asset alle macchine virtuali nel grafico dell'esposizione alla sicurezza.

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 ExposureGraphEdges tabella e, dove l'etichetta del nodo di destinazione è microsoft.compute/virtualmachines, usa l'operatore di Kusto per elencare l'etichetta del summarize nodo di destinazione in base EdgeLabela .

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.

ExposureGraphNodes
| where NodeLabel == "microsoft.compute/virtualmachines"
| project-keep NodeProperties
| take 1

Eseguire query sul grafico di esposizione

Per eseguire query sul grafico di esposizione:

  1. Nel portale di Microsoft Defender selezionare Ricerca -> Ricerca avanzata.

  2. Nell'area Query digitare la query. Usare lo schema del grafico, le funzioni e le tabelle degli operatori oppure gli esempi seguenti per compilare la query.

  3. Selezionare Esegui query.

Esempi di query orientate al grafico

Usare questi esempi di query orientate al grafico per scrivere query di esposizione alla sicurezza migliori. 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 con un bordo in 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. Compila una struttura a grafo eseguendo il mapping dei SourceNodeId dati della colonna nella ExposureGraphEdges tabella alla TargetNodeId colonna della ExposureGraphNodes tabella con l'operatore make-graph per compilare una struttura a grafo.

Usa quindi l'operatore graph-match per creare un modello di grafico in cui il nodo TargetNode di destinazione e NodeLabel corrisponde microsoft.compute/virtualmachinesa . 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 che esegono un'etichetta di nodo specifica

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 a grafo eseguendo il mapping della SourceNodeId colonna che usa i dati della ExposureGraphEdges tabella alla TargetNodeId colonna della ExposureGraphNodes tabella usando l'operatore make-graph per compilare una struttura a grafo.
  • Usa quindi l'operatore graph-match per trovare la corrispondenza con il modello grafico in cui SourceNode e NodeLabel corrispondono microsoft.compute/virtualmachines.
  • L'operatore project viene utilizzato per mantenere solo l'oggetto OutgoingNodeLabels. Elenca i risultati in base a OutgoingNodeLabels.
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).

  • Usa la tabella dello ExposureGraphNodes schema.
  • Quando entrambi NodePropertiesexposedToInternet e vulnerableToRCE sono true, verifica che la categoria (Categories) sia macchine virtuali (virtual_machine).
ExposureGraphNodes
| where isnotnull(NodeProperties.rawData.exposedToInternet)
| where isnotnull(NodeProperties.rawData.vulnerableToRCE)
| where Categories has "virtual_machine" and set_has_element(Categories, "virtual_machine")

Individuare i dispositivi con connessione Internet con una vulnerabilità di escalation 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 dello ExposureGraphNodes schema.
  • Quando NodeProperties è con connessione a Internet (IsInternetFacing) e VulnerableToPrivilegeEscalation, la query verifica che gli elementi in Categories siano 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 IdentitiesAndCriticalDevices tabella usando ExposureGraphNodes dati filtrati in base ai dispositivi con un livello di criticità superiore a 4 o per identity.
  • Crea quindi una struttura a grafo con l'operatore make-graph , dove EdgeLabel è Can Authenticate As.
  • Usa l'operatore per trovare la graph-match corrispondenza con le istanze in cui un oggetto device corrisponde a un identityoggetto .
  • Usa quindi l'operatore project per mantenere gli ID identità e gli ID dispositivo.
  • L'operatore mv-apply filtra gli ID dispositivo e gli ID identità in base al tipo. Vengono riepilogati e visualizzati i risultati in una tabella con le intestazioni , Number Of devices user is logged-in toe User 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 IdentitiesAndCriticalDevices tabella 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 As e CanRemoteInteractiveLogonTo.
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 un nodo IP specifico, passando fino a tre asset che comportano una connessione all'etichetta del nodo della macchina virtuale.

  • Usa le ExposureGraphNodes tabelle dello schema e ExposureGraphEdges e gli make-graph operatori e graph-match per creare una struttura a grafo.
  • Con l'operatore project visualizza 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

Passaggi successivi

Esplora con la mappa della superficie di attacco.