Sdílet prostřednictvím


Dotaz na graf podnikové expozice

Pomocí grafu podnikové expozice v Microsoft Security Exposure Management můžete na portálu Microsoft Defender proaktivně vyhledávat hrozby podnikové expozice v rozšířeném proaktivním vyhledávání.

Tento článek obsahuje několik příkladů, tipů a tipů pro vytváření dotazů v grafu podnikové expozice.

Správa ohrožení zabezpečení je v současné době ve verzi Public Preview.

Důležité

Některé informace v tomto článku se týkají předvydaného produktu, který může být před komerčním vydáním podstatně změněn. Společnost Microsoft neposkytuje na zde uvedené informace žádné záruky, vyjádřené ani předpokládané.

Požadavky

Vytváření pokročilých dotazů proaktivního vyhledávání

Použití operátoru make-graph

Operátor Kusto make-graph načte uzly a data hrany do paměti.

  • Vzhledem k tomu, že Kusto načítá jenom sloupce, které se používají, není potřeba sloupce explicitně vybírat.
  • Sloupec ale NodeProperties obsahuje všechny informace o uzlech, a proto je velký.
  • Ve většině scénářů je užitečné extrahovat pouze požadované informace před jejich odesláním do operátoru make-graph .

Příklad

let FilteredNodes = ExposureGraphNodes
| extend ContainsSensetiveData = NodeProperties has "containsSensitiveData"
| project Id, ContainsSensetiveData, Label, EntityIds, Categories;
Edges
| make-graph SourceNodeId --> TargetNodeId with FilteredNodes on Id
..

Použití dynamických sloupců a inteligentního indexování

NodeProperties a Categories jsou dynamické sloupce.

  • Kusto ví, že tyto sloupce obsahují obsah podobný json, a použije inteligentní indexování.
  • Index ale nepoužívají všechny operátory Kusto. Například set_has_element, isemptyisnotnull nepoužívejte index, když se použije na dynamický sloupec a isnotnull(Properties["containsSensitiveData"] nepoužívá index.
  • Místo toho použijte has() operátor, který vždy používá index.

Příklad

V následujícím dotazu has operátor zkontroluje data řetězec a set_has_element zkontroluje data element.

Použití obou operátorů je důležité, protože has() operátor vrací hodnotu true i pro kategorii prefix_data.

Categories has('data') and set_has_element(Categories, 'data')

Přečtěte si další informace o vysvětlení termínů řetězců.

Příklady dotazů na vystavení

Následující příklady vám můžou pomoct s psaním dotazů, které vám pomůžou porozumět datům ohrožení zabezpečení ve vašem tenantovi.

Výpis všech popisků uzlů ve vašem tenantovi

Následující dotaz seskupí data v ExposureGraphNodes tabulce a pomocí operátoru summarize Kusto je vypíše podle NodeLabel.

ExposureGraphNodes
| summarize by NodeLabel

Výpis všech popisků hraničních zařízení v tenantovi

Následující dotaz seskupí data v ExposureGraphEdges tabulce a pomocí operátoru summarize Kusto je vypíše podle popisků hran (EdgeLabel).

ExposureGraphEdges
| summarize by EdgeLabel

Výpis všech připojení ze zadaného popisku uzlu

Následující dotaz seskupí data v ExposureGraphEdges tabulce a pokud je microsoft.compute/virtualmachinespopisek zdrojového uzlu , shrne virtuální počítač podle EdgeLabel. Shrnuje hrany, které propojují prostředky s virtuálními počítači v grafu ohrožení zabezpečení.

ExposureGraphEdges
| where SourceNodeLabel == "microsoft.compute/virtualmachines"
| summarize by EdgeLabel

Výpis všech připojení ke konkrétnímu popisku uzlu

Následující dotaz shrnuje hrany, které propojují virtuální počítače s dalšími prostředky grafu ohrožení zabezpečení. Seskupí data v ExposureGraphEdges tabulce a pokud je microsoft.compute/virtualmachinespopisek cílového uzlu , použije operátor Kusto summarize k výpisu popisku cílového uzlu podle EdgeLabel.

ExposureGraphEdges
| where TargetNodeLabel == "microsoft.compute/virtualmachines"
| summarize by EdgeLabel

Vlastnosti seznamu konkrétního popisku uzlu

Následující dotaz obsahuje seznam vlastností popisku uzlu virtuálního počítače. Seskupuje data v ExposureGraphNodes tabulce, filtrovaná tak, aby zobrazovala pouze výsledky popisku uzlu microsoft.compute/virtualmachines. Pomocí operátoru project-keep dotaz zachová NodeProperties sloupec. Vrácená data jsou omezena na jeden řádek.

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

Dotazování grafu expozice

Dotazování grafu expozice:

  1. Na portálu Microsoft Defender vyberte proaktivní vyhledávání –> rozšířené proaktivní vyhledávání.

  2. Do oblasti Dotaz zadejte dotaz. Při sestavování dotazu použijte schéma grafu, funkce a tabulky operátorů nebo následující příklady.

  3. Vyberte Spustit dotaz.

Příklady grafově orientovaných dotazů

Tyto příklady dotazů orientovaných na grafy vám pomůžou s psaním lepších dotazů na ohrožení zabezpečení. Příklady hledají vzory pro zveřejnění vztahů mezi entitami, které mohou odhalit riziko. Ukazují, jak korelovat kontext se signály incidentů/výstrah.

Výpis všech popisků uzlů s hraničními okraji ke konkrétnímu popisku uzlu

Výsledkem následujícího dotazu je seznam všech popisků příchozích uzlů s konektorem k popisku uzlu virtuálního počítače. Sestaví strukturu grafu namapováním SourceNodeId dat sloupce v ExposureGraphEdges tabulce na TargetNodeId sloupec v ExposureGraphNodes tabulce pomocí operátoru make-graph , který sestaví strukturu grafu.

Pak pomocí operátoru graph-match vytvoří grafový vzor, kde cílový uzel TargetNode a NodeLabel odpovídá microsoft.compute/virtualmachines. Operátor project se používá k zachování pouze .IncomingNodeLabels Vypíše výsledky podle 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

Vypsat všechny popisky uzlů s určitým popiskem uzlu

Výsledkem následujícího dotazu je seznam všech popisků odchozích uzlů s konektorem k popisku uzlu virtuálního počítače.

  • Vytvoří strukturu grafu namapováním SourceNodeId sloupce pomocí dat v ExposureGraphEdges tabulce na TargetNodeId sloupec v ExposureGraphNodes tabulce pomocí operátoru make-graph k sestavení struktury grafu.
  • Pak pomocí operátoru graph-match porovná vzor grafu where SourceNode a NodeLabel match microsoft.compute/virtualmachines.
  • Operátor project se používá k zachování pouze .OutgoingNodeLabels Vypíše výsledky podle 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

Zjišťování virtuálních počítačů vystavených na internetu s chybou zabezpečení RCE

Následující dotaz umožňuje zjistit virtuální počítače vystavené internetu a ohrožení zabezpečení v důsledku vzdáleného spuštění kódu (RCE).

  • Používá ExposureGraphNodes tabulku schématu.
  • Pokud platí obě NodePropertiesexposedToInternet hodnoty a vulnerableToRCE , zkontroluje, že kategorie (Categories) jsou virtuální počítače (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")

Zjišťování internetových zařízení s ohrožením zabezpečení z hlediska eskalace oprávnění

Následující dotaz hledá zařízení s přístupem k internetu, která jsou vystavená ohrožení zabezpečení z důvodu eskalace oprávnění, které by mohlo v systému umožnit přístup k oprávněním vyšší úrovně.

  • Používá ExposureGraphNodes tabulku schématu.
  • Pokud NodeProperties je připojení k internetu (IsInternetFacing) i VulnerableToPrivilegeEscalation, dotaz zkontroluje, že položky v Categories souboru jsou ve skutečnosti zařízení (device).
ExposureGraphNodes
| where isnotnull(NodeProperties.rawData.IsInternetFacing)
| where isnotnull(NodeProperties.rawData.VulnerableToPrivilegeEscalation)
| where set_has_element(Categories, "device")

Zobrazit všechny uživatele přihlášené k více než jednomu kritickému zařízení

Výsledkem tohoto dotazu je seznam uživatelů přihlášených k více než jednomu kritickému zařízení spolu s počtem zařízení, ke kterým jsou přihlášeni.

  • Vytvoří tabulku IdentitiesAndCriticalDevices pomocí ExposureGraphNodes dat filtrovaných buď podle zařízení s úrovní závažnosti vyšší než 4, nebo podle identity.
  • Pak vytvoří strukturu grafu s operátorem make-graph , kde EdgeLabel je Can Authenticate As.
  • Operátor se používá graph-match k porovnávání instancí, kde objekt device odpovídá identity.
  • Pak pomocí operátoru project zachová ID identit a ID zařízení.
  • Operátor mv-apply filtruje ID zařízení a ID identit podle typu. Shrne je a zobrazí výsledky v tabulce se záhlavími Number Of devices user is logged-in to, a 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

Zobrazení klientských zařízení s kritickou chybou zabezpečení nebo uživatelů, kteří mají přístup k serverům s vysokou hodnotou

Výsledkem následujícího dotazu je seznam zařízení s ohroženími zabezpečení RCE a jejich ID zařízení a zařízení s vysoce kritickými ohroženími zabezpečení a jejich ID zařízení.

  • Vytvoří IdentitiesAndCriticalDevices tabulku, která obsahuje zařízení (device) s ohroženími zabezpečení RCE s nižší závažností než čtyři a identity (identity), které prostřednictvím filtrování a porovnávání vzorů zobrazují zařízení s kritickými ohroženími zabezpečení.
  • Seznam je filtrovaný tak, aby zobrazoval jenom ta připojení, která mají popisky Can Authenticate As hran a 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

Zadejte všechny cesty od konkrétního ID uzlu k uzlu s konkrétním popiskem.

Tento dotaz zobrazí cestu z konkrétního uzlu IP a prochází až třemi prostředky, které mají za následek připojení k popisku uzlu virtuálního počítače.

  • ExposureGraphNodes Používá tabulky schématu a ExposureGraphEdges a operátory make-graph a graph-match k vytvoření struktury grafu.
  • Pomocí operátoru project se zobrazí seznam IP ID, vlastností IP adres, ID virtuálních počítačů a vlastností virtuálního počítače.
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

Další kroky

Prozkoumejte s mapou prostoru útoku.