Del via


Forespørg i virksomhedseksponeringsgrafen

Brug grafen over eksponering i virksomheder i Microsoft Security Exposure Management til proaktivt at jagte trusler mod virksomhedseksponering i avanceret jagt på Microsoft Defender portalen.

Denne artikel indeholder nogle eksempler, tip og tip til oprettelse af forespørgsler i virksomhedseksponeringsgrafen.

Forudsætninger

Byg avancerede jagtforespørgsler

Brug make-graph-operatoren

Kustos make-graph operator indlæser node- og kantdata i hukommelsen.

  • Da Kusto kun indlæser de kolonner, der er i brug, er det ikke nødvendigt at markere kolonner eksplicit.
  • Kolonnen indeholder dog NodeProperties alle nodeoplysninger og er derfor stor.
  • I de fleste scenarier er det nyttigt kun at udtrække de oplysninger, der kræves, før den overføres til operatoren make-graph .

Eksempel

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

Brug dynamiske kolonner og smart-indeksering

NodeProperties og Categories er dynamiske kolonner.

  • Kusto ved, at disse kolonner indeholder json-lignende indhold og anvender smart indeksering.
  • Det er dog ikke alle Kusto-operatorer, der bruger indekset. Brug f.eks. ikke indekset, set_has_elementisemptyisnotnull når de anvendes på en dynamisk kolonne, og isnotnull(Properties["containsSensitiveData"] de bruger ikke indekset.
  • Brug i stedet operatoren has() , som altid bruger indekset.

Eksempel

I følgende forespørgsel søger operatoren has efter strengen data og set_has_element kontrollerer elementet data .

Det er vigtigt at bruge begge operatorer, da operatoren has() returnerer true, selv for en kategori prefix_data.

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

Få mere at vide om strengbegreber.

Eksempel på eksponeringsforespørgsler

Følgende eksempler kan hjælpe dig med at skrive forespørgsler for at forstå sikkerhedseksponeringsdata i din lejer.

Vis alle nodenavne i din lejer

Følgende forespørgsel grupperer dataene i tabellen ExposureGraphNodes og bruger Kustos summarize operator til at vise dem efter NodeLabel.

ExposureGraphNodes
| summarize by NodeLabel

Vis alle kantmærkater i din lejer

Følgende forespørgsel grupperer dataene i tabellen ExposureGraphEdges og bruger Kustos summarize operator til at vise dem efter kantmærkater (EdgeLabel).

ExposureGraphEdges
| summarize by EdgeLabel

Vis alle forbindelser fra en angivet nodeetiket

I følgende forespørgsel grupperes dataene i tabellen ExposureGraphEdges , og hvor kildenodenavnet er microsoft.compute/virtualmachines, opsummeres den virtuelle maskines efter EdgeLabel. Den opsummerer de kanter, der forbinder aktiver til virtuelle maskiner i diagrammet over sikkerhedseksponering.

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

Vis alle forbindelser til et bestemt nodenavn

I følgende forespørgsel opsummeres kanter, der forbinder virtuelle maskiner med andre grafaktiver for sikkerhedseksponering. Den grupperer dataene i ExposureGraphEdges tabellen, og hvor destinationsnodens mærkat er microsoft.compute/virtualmachines, bruger den Kusto-operatoren summarize til at angive destinationsnodens mærkat efter EdgeLabel.

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

Listeegenskaber for et bestemt nodenavn

I følgende forespørgsel vises egenskaber for nodenavnet for den virtuelle maskine. Den grupperer dataene i ExposureGraphNodes tabellen, filtreret for kun at vise nodenavnet "microsoft.compute/virtualmachines" resultater. Med operatoren project-keep bevarer forespørgslen kolonnen NodeProperties . De returnerede data er begrænset til én række.

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

Forespørg på eksponeringsgrafen

Sådan forespørger du på eksponeringsgrafen:

  1. I Microsoft Defender portalen skal du vælge jagt -> avanceret jagt.

  2. Skriv din forespørgsel i området Forespørgsel. Brug grafskema-, funktions- og operatortabeller eller følgende eksempler til at hjælpe dig med at oprette din forespørgsel.

  3. Vælg Kør forespørgsel.

Graforienterede forespørgselseksempler

Brug disse graforienterede forespørgselseksempler til at hjælpe dig med at skrive bedre forespørgsler om sikkerhedseksponering. Eksemplerne søger efter mønstre for at vise relationer mellem objekter, der kan afdække risici. De viser dig, hvordan du korrelerer kontekst med hændelses-/advarselssignaler.

Vis alle nodenavne med en kant til et bestemt nodenavn

Følgende forespørgsel resulterer i en liste over alle indgående nodenavne med en forbindelse til nodenavnet på den virtuelle maskine. Den opretter en grafstruktur ved at knytte SourceNodeId kolonnedataene i tabellen ExposureGraphEdges til TargetNodeId kolonnen i ExposureGraphNodes tabellen med operatoren make-graph for at oprette en grafstruktur.

Derefter bruges operatoren graph-match til at oprette et grafmønster, hvor destinationsnoden TargetNode og NodeLabel matcher microsoft.compute/virtualmachines. Operatoren project bruges kun IncomingNodeLabelstil at bevare . Den viser resultaterne efter 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

Vis alle nodenavne, der kan vises på en bestemt nodeetiket

Følgende forespørgsel resulterer i en liste over alle udgående nodenavne med en forbindelse til nodenavnet på den virtuelle maskine.

  • Den opretter en grafstruktur ved at knytte kolonnen SourceNodeId bruger dataene i ExposureGraphEdges tabellen til TargetNodeId kolonnen i ExposureGraphNodes tabellen ved hjælp af operatoren make-graph til at oprette en grafstruktur.
  • Derefter bruges operatoren graph-match til at matche det grafmønster, hvor SourceNode og NodeLabel matcher microsoft.compute/virtualmachines.
  • Operatoren project bruges kun OutgoingNodeLabelstil at bevare . Den viser resultaterne efter 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

Find VM'er, der er eksponeret til internettet, med en RCE-sårbarhed

Følgende forespørgsel giver dig mulighed for at finde virtuelle maskiner, der er eksponeret for internettet, og en RCE-sikkerhedsrisiko (Remote Code Execution).

  • Skematabellen bruges ExposureGraphNodes .
  • Når både NodePropertiesexposedToInternet og vulnerableToRCE er sande, kontrollerer den, at kategorien (Categories) er virtuelle maskiner (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")

Find enheder over for internettet med en sårbarhed over for rettighedseskalering

Følgende forespørgsel søger efter enheder på internettet, der er udsat for en rettighedseskaleringssårbarhed, hvilket kan give adgang til rettigheder på et højere niveau i systemet.

  • Skematabellen bruges ExposureGraphNodes .
  • Når NodeProperties både er mod internettet (IsInternetFacing) og VulnerableToPrivilegeEscalation, kontrollerer forespørgslen, at elementerne i Categories faktisk er enheder (device).
ExposureGraphNodes
| where isnotnull(NodeProperties.rawData.IsInternetFacing)
| where isnotnull(NodeProperties.rawData.VulnerableToPrivilegeEscalation)
| where set_has_element(Categories, "device")

Vis alle brugere, der er logget på mere end én kritisk enhed

Denne forespørgsel resulterer i en liste over brugere, der er logget på mere end én kritisk enhed, sammen med antallet af enheder, de er logget på.

  • Der oprettes en IdentitiesAndCriticalDevices tabel ved hjælp af ExposureGraphNodes data, der enten er filtreret efter enheder med et kritisk niveau over 4 eller efter identity.
  • Derefter oprettes der en grafstruktur med operatoren make-graph , hvor EdgeLabel er Can Authenticate As.
  • Den bruger operatoren graph-match til at matche forekomster, hvor en device svarer til en identity.
  • Derefter bruges operatoren project til at beholde identitets-id'er og enheds-id'er.
  • Operatoren mv-apply filtrerer enheds-id'er og identitets-id'er efter type. Den opsummerer dem og viser resultaterne i en tabel med overskrifterne , Number Of devices user is logged-in toog 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

Vis klientenheder med en kritisk sårbarhed/brugere, der har adgang til servere med høj værdi

Følgende forespørgsel resulterer i en liste over enheder med RCE-sikkerhedsrisici og deres enheds-id'er og enheder med høj kritiske sikkerhedsrisici og deres enheds-id'er.

  • Den opretter en IdentitiesAndCriticalDevices tabel, der indeholder enheder (device) med RCE-sikkerhedsrisici med en kritisk værdi, der er lavere end fire, og identiteter (identity), der med gennem filtrering og mønstermatchning viser enheder med kritiske sikkerhedsrisici.
  • Listen er filtreret, så der kun vises de forbindelser, der har kantnavne Can Authenticate As og 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

Angiv alle stier fra et bestemt node-id til en node med en bestemt etiket

Denne forespørgsel viser stien fra en bestemt IP-node, der går gennem op til tre aktiver, der resulterer i en forbindelse til nodenavnet for den virtuelle maskine.

  • Den bruger skematabellerne ExposureGraphNodes og ExposureGraphEdges og make-graphgraph-match til at oprette en grafstruktur.
  • Med operatoren project vises en liste over IP-id'er, IP-egenskaber, id'er for virtuelle maskiner og egenskaber for virtuelle maskiner.
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

Næste trin

Udforsk med angrebsoverfladekortet.