Sdílet prostřednictvím


Dotaz na graf podnikové expozice

Pomocí grafu podnikové expozice v Správa míry rizika zabezpečení od Microsoftu můžete na portálu Microsoft Defender proaktivně vyhledávat hrozby podnikové expozice při 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.

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.