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
- Les om administrasjon av angrepsoverflater.
- Se gjennom nødvendige tillatelser for å arbeide med grafen.
Bygg avanserte jaktspørringer
- Se gjennom anbefalte fremgangsmåter for å bygge avanserte jaktspørringer
- Kom i gang med Kusto Query Language (KQL)
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_element
isempty
isnotnull
ikke bruke indeksen når de brukes på en dynamisk kolonne ogisnotnull(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:
I Microsoft Defender portalen velger du jakt -> avansert jakt.
Skriv inn spørringen i spørringsområdet. Bruk grafskjemaet, funksjonene og operatortabellene eller eksemplene nedenfor for å hjelpe deg med å bygge spørringen.
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 iExposureGraphEdges
tabellen tilTargetNodeId
kolonnen iExposureGraphNodes
tabellen ved hjelp av operatorenmake-graph
til å bygge en grafstruktur. - Deretter bruker den operatoren
graph-match
til å samsvare med grafmønsteret derSourceNode
ogNodeLabel
samsvarermicrosoft.compute/virtualmachines
. - Operatoren
project
brukes bare til å beholdeOutgoingNodeLabels
. Den viser resultatene etterOutgoingNodeLabels
.
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
NodeProperties
exposedToInternet
ogvulnerableToRCE
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
) ogVulnerableToPrivilegeEscalation
, kontrollerer spørringen at elementene iCategories
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 avExposureGraphNodes
data filtrert enten etter enheter med et kritisk nivå over 4 eller etteridentity
. - Deretter lager den en grafstruktur med operatoren
make-graph
, der erEdgeLabel
Can Authenticate As
. - Den bruker operatoren
graph-match
til å samsvare forekomster der en samsvarer med endevice
identity
. - 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 to
ogUser 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
ogCanRemoteInteractiveLogonTo
.
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
ogExposureGraphEdges
operatorenemake-graph
og oggraph-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