Dela via


Fråga företagets exponeringsdiagram

Använd exponeringsdiagrammet för företag i Microsoft Security Exposure Management för att proaktivt jaga efter hot om företagsexponering i avancerad jakt i Microsoft Defender-portalen.

Den här artikeln innehåller några exempel, tips och tips för att konstruera frågor i företagets exponeringsdiagram.

Säkerhetsexponeringshantering finns för närvarande i offentlig förhandsversion.

Viktigt

Viss information i den här artikeln gäller en förhyrd produkt som kan ändras avsevärt innan den släpps kommersiellt. Microsoft lämnar inga garantier, uttryckta eller underförstådda, med avseende på den information som tillhandahålls här.

Förhandskrav

Skapa avancerade jaktfrågor

Använda operatorn make-graph

Kustos make-graph operator läser in noder och kanter i minnet.

  • Eftersom Kusto bara läser in de kolumner som används behöver du inte uttryckligen välja kolumner.
  • Kolumnen innehåller dock NodeProperties all nodinformation och är stor.
  • I de flesta scenarier är det användbart att endast extrahera den information som krävs innan du matar in den i operatorn make-graph .

Exempel

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

Använda dynamiska kolumner och smart indexering

NodeProperties och Categories är dynamiska kolumner.

  • Kusto vet att dessa kolumner innehåller json-liknande innehåll och tillämpar smart indexering.
  • Alla Kusto-operatorer använder dock inte indexet. Använd till exempel set_has_elementisemptyisnotnull inte indexet när de tillämpas på en dynamisk kolumn och isnotnull(Properties["containsSensitiveData"] använder inte indexet.
  • Använd i stället operatorn has() som alltid använder indexet.

Exempel

I följande fråga söker operatorn has efter strängen data och set_has_element söker efter -elementet data .

Det är viktigt att använda båda operatorerna eftersom operatorn has() returnerar true även för en kategori prefix_data.

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

Läs mer om att förstå strängtermer.

Exempel på exponeringsfrågor

Följande exempel kan hjälpa dig att skriva frågor för att förstå säkerhetsexponeringsdata i din klientorganisation.

Lista alla nodetiketter i din klientorganisation

Följande fråga grupperar data i ExposureGraphNodes tabellen och använder Kustos summarize operator för att lista dem NodeLabelefter .

ExposureGraphNodes
| summarize by NodeLabel

Lista alla gränsetiketter i din klientorganisation

Följande fråga grupperar data i ExposureGraphEdges tabellen och använder Kustos summarize operator för att lista dem efter kantetiketter (EdgeLabel).

ExposureGraphEdges
| summarize by EdgeLabel

Lista alla anslutningar från en angiven nodetikett

Följande fråga grupperar data i ExposureGraphEdges tabellen och där källnodetiketten är microsoft.compute/virtualmachinessammanfattas den virtuella datorns efter EdgeLabel. Den sammanfattar de kanter som ansluter tillgångar till virtuella datorer i diagrammet för säkerhetsexponering.

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

Lista alla anslutningar till en specifik nodetikett

Följande fråga sammanfattar kanter som ansluter virtuella datorer till andra graftillgångar för säkerhetsexponering. Den grupperar data i ExposureGraphEdges tabellen och där målnodetiketten är microsoft.compute/virtualmachinesanvänder den Kustos summarize operator för att lista målnodetiketten efter EdgeLabel.

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

Lista egenskaper för en specifik nodetikett

Följande fråga visar egenskaper för den virtuella datorns nodetikett. Den grupperar data i ExposureGraphNodes tabellen, filtrerade för att visa nodetiketten "microsoft.compute/virtualmachines"-resultat. Med operatorn project-keep behåller NodeProperties frågan kolumnen. De data som returneras är begränsade till en rad.

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

Fråga exponeringsdiagrammet

Så här frågar du exponeringsdiagrammet:

  1. I Microsoft Defender-portalen väljer du jakt –> avancerad jakt.

  2. I området Fråga skriver du frågan. Använd diagramschemat, funktionerna och operatortabellerna eller följande exempel för att skapa din fråga.

  3. Välj kör fråga.

Diagramorienterade frågeexempel

Använd dessa diagramorienterade frågeexempel för att hjälpa dig att skriva bättre frågor om säkerhetsexponering. Exemplen söker efter mönster för att exponera relationer mellan entiteter som kan upptäcka risker. De visar hur du korrelerar kontext med incident-/aviseringssignaler.

Lista alla nodetiketter med en kant till en specifik nodetikett

Följande fråga resulterar i en lista över alla inkommande nodetiketter med en anslutningsapp till den virtuella datorns nodetikett. Den skapar en grafstruktur genom att mappa SourceNodeId kolumndata i ExposureGraphEdges tabellen till TargetNodeId kolumnen i ExposureGraphNodes tabellen med operatorn make-graph för att skapa en grafstruktur.

Sedan använder den operatorn graph-match för att skapa ett diagrammönster där målnoden TargetNode och NodeLabel matchar microsoft.compute/virtualmachines. Operatorn project används för att endast IncomingNodeLabelsbehålla . Den visar resultatet av 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

Visa en lista över alla nodetiketter som kantats av en specifik nodetikett

Följande fråga resulterar i en lista över alla utgående nodetiketter med en koppling till den virtuella datorns nodetikett.

  • Den skapar en grafstruktur genom att mappa SourceNodeId kolumnen använder data i ExposureGraphEdges tabellen till TargetNodeId kolumnen i ExposureGraphNodes tabellen med operatorn make-graph för att skapa en grafstruktur.
  • Den använder sedan operatorn graph-match för att matcha grafmönstret där SourceNode och NodeLabel matcha microsoft.compute/virtualmachines.
  • Operatorn project används för att endast OutgoingNodeLabelsbehålla . Den visar resultatet av 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

Identifiera virtuella datorer som exponeras för Internet med en RCE-säkerhetsrisk

Med följande fråga kan du identifiera virtuella datorer som är exponerade mot Internet och till en säkerhetsproblem med fjärrkodskörning (RCE).

  • Den använder schematabellen ExposureGraphNodes .
  • När både NodePropertiesexposedToInternet och vulnerableToRCE är sanna kontrollerar den att kategorin (Categories) är virtuella datorer (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")

Identifiera internetuppkopplade enheter med en säkerhetsrisk för behörighetseskalering

Följande fråga söker efter Internetuppkopplade enheter som exponeras för en säkerhetsrisk för behörighetseskalering, vilket kan ge åtkomst till privilegier på högre nivå i systemet.

  • Den använder schematabellen ExposureGraphNodes .
  • När NodeProperties är både internetuppkopplad (IsInternetFacing) och VulnerableToPrivilegeEscalationkontrollerar frågan att objekten i Categories faktiskt är enheter (device).
ExposureGraphNodes
| where isnotnull(NodeProperties.rawData.IsInternetFacing)
| where isnotnull(NodeProperties.rawData.VulnerableToPrivilegeEscalation)
| where set_has_element(Categories, "device")

Visa alla användare som är inloggade på mer än en kritisk enhet

Den här frågan resulterar i en lista över användare som är inloggade på mer än en kritisk enhet, tillsammans med antalet enheter som de är inloggade på.

  • Den skapar en IdentitiesAndCriticalDevices tabell med data ExposureGraphNodes som filtreras antingen efter enheter med en allvarlighetsnivå över 4 eller .identity
  • Den gör sedan en grafstruktur med operatorn make-graph , där EdgeLabel är Can Authenticate As.
  • Den använder operatorn graph-match för att matcha instanser där en device matchar en identity.
  • Sedan använder den operatorn project för att behålla identitets-ID:n och enhets-ID:n.
  • Operatören mv-apply filtrerar enhets-ID:n och identitets-ID:n efter typ. Den sammanfattar dem och visar resultatet i en tabell med rubrikerna , Number Of devices user is logged-in tooch 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

Visa klientenheter med en kritisk säkerhetsrisk/användare som har åtkomst till servrar med högt värde

Följande fråga resulterar i en lista över enheter med RCE-sårbarheter och deras enhets-ID:n och enheter med hög kritisk sårbarhet och deras enhets-ID.

  • Den skapar en IdentitiesAndCriticalDevices tabell som innehåller enheter (device) med RCE-sårbarheter med lägre allvarlighetsgrad än fyra och identiteter (identity) som med hjälp av filtrering och mönstermatchning visar enheter med kritiska sårbarheter.
  • Listan filtreras för att endast visa de anslutningar som har kantetiketter Can Authenticate As och 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

Ange alla sökvägar från ett specifikt nod-ID till en nod med en specifik etikett

Den här frågan visar sökvägen från en specifik IP-nod och skickar genom upp till tre tillgångar som resulterar i en anslutning till den virtuella datorns nodetikett.

  • Den använder schematabellerna ExposureGraphNodes och ExposureGraphEdges operatorerna make-graph och graph-match för att skapa en grafstruktur.
  • Med operatorn project visas en lista över IP-ID:t, IP-egenskaper, virtuella dator-ID:t och egenskaper för virtuella datorer.
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ästa steg

Utforska med kartan över attackytan.