Del via


Spørre diagrammet for virksomhetseksponering

Bruk virksomhetseksponeringsgrafen i Microsoft Security Exposure Management til proaktivt å jakte på trusler om virksomhetseksponering i avansert jakt i Microsoft Defender portalen.

Denne artikkelen inneholder noen eksempler, tips og tips for å konstruere spørringer i bedriftens eksponeringsgraf.

Forutsetninger

Bygg avanserte jaktspørringer

Bruke make-graph-operatoren

Kusto-operatoren make-graph laster noder og kanter data inn i minnet.

  • Siden Kusto bare laster inn kolonnene som er i bruk, er det ikke nødvendig å eksplisitt velge kolonner.
  • Kolonnen inneholder imidlertid NodeProperties all nodeinformasjon, og den er derfor stor.
  • I de fleste scenarier er det nyttig å trekke ut bare informasjonen som kreves før du mater den inn i 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
..

Bruke dynamiske kolonner og smartindeksering

NodeProperties og Categories er dynamiske kolonner.

  • Kusto vet at disse kolonnene inneholder json-lignende innhold, og bruker smart indeksering.
  • Men ikke alle Kusto-operatorer bruker indeksen. Du må for eksempel set_has_elementisemptyisnotnull ikke bruke indeksen når de brukes på en dynamisk kolonne og isnotnull(Properties["containsSensitiveData"] ikke bruker indeksen.
  • Bruk i stedet operatoren has() , som alltid bruker indeksen.

Eksempel

I følgende spørring søker operatoren has etter strengen data , og set_has_element ser etter data elementet.

Bruk av begge operatorene er viktig ettersom operatoren has() returnerer sann selv for en kategori prefix_data.

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

Mer informasjon om å forstå strengtermer.

Eksempel på eksponeringsspørringer

Eksemplene nedenfor kan hjelpe deg med å skrive spørringer for å forstå dataene om sikkerhetseksponering i leieren.

Vis alle nodeetiketter i leieren

Følgende spørring grupperer dataene i ExposureGraphNodes tabellen og bruker Kusto-operatoren summarize til å liste dem opp etter NodeLabel.

ExposureGraphNodes
| summarize by NodeLabel

Vis alle kantetiketter i leieren

Følgende spørring grupperer dataene i ExposureGraphEdges tabellen og bruker Kustos summarize operator til å liste dem opp etter kantetiketter (EdgeLabel).

ExposureGraphEdges
| summarize by EdgeLabel

Vis alle tilkoblinger fra en angitt nodeetikett

Følgende spørring grupperer dataene i ExposureGraphEdges tabellen, og der kildenodeetiketten er microsoft.compute/virtualmachines, oppsummerer den den virtuelle maskinens etter EdgeLabel. Den oppsummerer kantene som kobler ressurser til virtuelle maskiner i grafen for sikkerhetseksponering.

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

Vis alle tilkoblinger til en bestemt nodeetikett

Følgende spørring oppsummerer kanter som kobler virtuelle maskiner til andre dataressurser for sikkerhetseksponering. Den grupperer dataene i ExposureGraphEdges tabellen, og der målnodeetiketten er microsoft.compute/virtualmachines, bruker den Kusto-operatoren summarize til å vise målnodeetiketten etter EdgeLabel.

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

Listeegenskaper for en bestemt nodeetikett

Følgende spørring viser egenskaper for nodeetiketten for den virtuelle maskinen. Den grupperer dataene i ExposureGraphNodes tabellen, filtrert for å bare vise nodeetiketten «microsoft.compute/virtualmachines». Med operatoren project-keep beholder spørringen NodeProperties kolonnen. Dataene som returneres, er begrenset til én rad.

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

Spørre grafen for eksponering

Slik spør du eksponeringsdiagrammet:

  1. I Microsoft Defender portalen velger du jakt -> avansert jakt.

  2. Skriv inn spørringen i spørringsområdet. Bruk grafskjemaet, funksjonene og operatortabellene eller eksemplene nedenfor for å hjelpe deg med å bygge spørringen.

  3. Velg kjørespørring.

Graforienterte spørringseksempler

Bruk disse graforienterte spørringseksempler for å hjelpe deg med å skrive bedre spørringer om sikkerhetseksponering. Eksemplene søker etter mønstre for å vise relasjoner mellom enheter som kan avdekke risiko. De viser deg hvordan du koordinerer kontekst med hendelses-/varselsignaler.

Vis alle nodeetiketter med en kant til en bestemt nodeetikett

Følgende spørring resulterer i en liste over alle innkommende nodeetiketter med en kobling til nodeetiketten for den virtuelle maskinen. Den bygger en grafstruktur ved å tilordne SourceNodeId kolonnedataene i ExposureGraphEdges tabellen til TargetNodeId kolonnen i ExposureGraphNodes tabellen med operatoren make-graph for å bygge en grafstruktur.

Deretter bruker den operatoren graph-match til å lage et grafmønster der målnoden TargetNode og NodeLabel samsvarer microsoft.compute/virtualmachines. Operatoren project brukes bare til å beholde IncomingNodeLabels. Den viser resultatene etter 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

Liste over alle nodeetiketter som kanter en bestemt nodeetikett

Følgende spørring resulterer i en liste over alle utgående nodeetiketter med en kobling til nodeetiketten for den virtuelle maskinen.

  • Den bygger en grafstruktur ved å tilordne SourceNodeId kolonnen bruker dataene i ExposureGraphEdges tabellen til TargetNodeId kolonnen i ExposureGraphNodes tabellen ved hjelp av operatoren make-graph til å bygge en grafstruktur.
  • Deretter bruker den operatoren graph-match til å samsvare med grafmønsteret der SourceNode og NodeLabel samsvarer microsoft.compute/virtualmachines.
  • Operatoren project brukes bare til å beholde OutgoingNodeLabels. Den viser resultatene etter 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

Oppdag virtuelle maskiner som er eksponert internett med et RCE-sikkerhetsproblem

Med følgende spørring kan du oppdage virtuelle maskiner som er eksponert for Internett, og et sikkerhetsproblem for ekstern kjøring av kode (RCE).

  • Den bruker skjematabellen ExposureGraphNodes .
  • Når begge NodePropertiesexposedToInternet og vulnerableToRCE er sanne, 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")

Oppdag Internett-motstående enheter med et sikkerhetsproblemet med privilegisopptrapping

Følgende spørring ser etter Internett-vendte enheter som er utsatt for et sikkerhetsproblem for eskalering av rettigheter, noe som kan gi tilgang til høyere tilgangsnivåer i systemet.

  • Den bruker skjematabellen ExposureGraphNodes .
  • Når NodeProperties er både Internett-vendt (IsInternetFacing) og VulnerableToPrivilegeEscalation, kontrollerer spørringen at elementene i Categories faktisk er enheter (device).
ExposureGraphNodes
| where isnotnull(NodeProperties.rawData.IsInternetFacing)
| where isnotnull(NodeProperties.rawData.VulnerableToPrivilegeEscalation)
| where set_has_element(Categories, "device")

Vis alle brukere som er logget på mer enn én kritisk enhet

Denne spørringen resulterer i en liste over brukere som er logget på mer enn én kritisk enhet, sammen med antall enheter de er logget på.

  • Den oppretter en IdentitiesAndCriticalDevices tabell ved hjelp av ExposureGraphNodes data filtrert enten etter enheter med et kritisk nivå over 4 eller etter identity.
  • Deretter lager den en grafstruktur med operatoren make-graph , der er EdgeLabelCan Authenticate As.
  • Den bruker operatoren graph-match til å samsvare forekomster der en samsvarer med en deviceidentity.
  • Deretter bruker den project operatøren til å beholde identitets-ID-er og enhets-ID-er.
  • Operatoren mv-apply filtrerer enhets-ID-er og identitets-ID-er etter type. Den oppsummerer dem og viser resultatene i en tabell med overskriftene, 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 klientenheter med et kritisk sikkerhetsproblem/brukere som har tilgang til servere med høy verdi

Følgende spørring resulterer i en liste over enheter med RCE-sårbarheter og enhets-ID-er og enheter med høykritiske sårbarheter og enhets-ID-er.

  • Den oppretter en IdentitiesAndCriticalDevices tabell som inkluderer enheter (device) med RCE-sårbarheter med kritiskhet lavere enn fire, og identiteter (identity) som med gjennom filtrering og mønstersamsvar viser enheter med kritiske sårbarheter.
  • Listen er filtrert for å vise bare de tilkoblingene som har kantetiketter 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

Angi alle baner fra en bestemt node-ID til en node med en bestemt etikett

Denne spørringen viser banen fra en bestemt IP-node som går gjennom opptil tre aktiva som resulterer i en tilkobling til nodeetiketten for den virtuelle maskinen.

  • Den bruker skjematabellene ExposureGraphNodes og ExposureGraphEdges operatorene make-graph og og graph-match til å opprette en grafstruktur.
  • Med operatoren project vises en liste over IP-ID-er, IP-egenskaper, virtuelle maskin-ID-er og egenskaper 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

Neste trinn

Utforsk med angrepsoverflatekartet.