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
- Läs mer om hantering av attackytan.
- Granska de behörigheter som krävs för att arbeta med diagrammet.
Skapa avancerade jaktfrågor
- Granska metodtips för att skapa avancerade jaktfrågor
- Kom igång med Kusto Query Language (KQL)
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_element
isempty
isnotnull
inte indexet när de tillämpas på en dynamisk kolumn ochisnotnull(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 NodeLabel
efter .
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/virtualmachines
sammanfattas 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/virtualmachines
anvä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:
I Microsoft Defender-portalen väljer du jakt –> avancerad jakt.
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.
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 IncomingNodeLabels
behå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 iExposureGraphEdges
tabellen tillTargetNodeId
kolumnen iExposureGraphNodes
tabellen med operatornmake-graph
för att skapa en grafstruktur. - Den använder sedan operatorn
graph-match
för att matcha grafmönstret därSourceNode
ochNodeLabel
matchamicrosoft.compute/virtualmachines
. - Operatorn
project
används för att endastOutgoingNodeLabels
behålla . Den visar resultatet avOutgoingNodeLabels
.
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
NodeProperties
exposedToInternet
ochvulnerableToRCE
ä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
) ochVulnerableToPrivilegeEscalation
kontrollerar frågan att objekten iCategories
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 dataExposureGraphNodes
som filtreras antingen efter enheter med en allvarlighetsnivå över 4 eller .identity
- Den gör sedan en grafstruktur med operatorn
make-graph
, därEdgeLabel
ärCan Authenticate As
. - Den använder operatorn
graph-match
för att matcha instanser där endevice
matchar enidentity
. - 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 to
ochUser 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
ochCanRemoteInteractiveLogonTo
.
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
ochExposureGraphEdges
operatorernamake-graph
ochgraph-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