Kyselyn tekeminen yrityksen altistumiskaaviosta
Käytä yritysten altistumiskaaviota Microsoft-suojauksen altistumishallinta yritysten altistumisuhkien ennakoivaen etsimiseen kehittyneessä metsästyksessä Microsoft Defender portaalissa.
Tässä artikkelissa on esimerkkejä, vihjeitä ja vihjeitä kyselyiden muodostamiseen yrityksen altistumiskaaviossa.
Ennakkovaatimukset
- Lue hyökkäyksen pinnanhallinnasta.
- Tarkista kaavion käsittelemisen vaaditut käyttöoikeudet.
Kehittyneiden metsästyskyselyiden luominen
- Tarkista kehittyneen metsästyksen kyselyiden parhaat käytännöt
- Kusto Query Languagen (KQL) käytön aloittaminen
Tee kaavio -operaattorin käyttäminen
Kuston operaattori lataa solmuja ja reunoja muistiin make-graph
.
- Koska Kusto lataa vain käytössä olevat sarakkeet, sarakkeita ei tarvitse erikseen valita.
- Sarake sisältää kuitenkin kaikki solmutiedot,
NodeProperties
joten se on suuri. - Useimmissa tilanteissa on hyödyllistä poimia vain tarvittavat tiedot ennen sen syöttämistä operaattoriin
make-graph
.
Esimerkki
let FilteredNodes = ExposureGraphNodes
| extend ContainsSensetiveData = NodeProperties has "containsSensitiveData"
| project Id, ContainsSensetiveData, Label, EntityIds, Categories;
Edges
| make-graph SourceNodeId --> TargetNodeId with FilteredNodes on Id
..
Dynaamisten sarakkeiden ja älyindeksoinnin käyttäminen
NodeProperties
ja Categories
ovat dynaamisia sarakkeita.
- Kusto tietää, että nämä sarakkeet sisältävät json-kaltaista sisältöä, ja käyttää älykästä indeksointia.
- Kaikki Kusto-operaattorit eivät kuitenkaan käytä indeksiä. Esimerkiksi , ,
isempty
isnotnull
, ei käytä indeksiä,set_has_element
kun sitä käytetään dynaamisessa sarakkeessaisnotnull(Properties["containsSensitiveData"]
eikä se käytä indeksiä. - Käytä sen sijaan operaattoria
has()
, joka käyttää aina indeksiä.
Esimerkki
Seuraavassa kyselyssä has
operaattori tarkistaa merkkijonon data
ja set_has_element
elementin data
.
Molempien operaattoreiden käyttäminen on tärkeää, has()
sillä operaattori palauttaa arvon tosi myös luokalle prefix_data
.
Categories has('data') and set_has_element(Categories, 'data')
Lue lisätietoja merkkijonotermistä.
Esimerkki altistumiskyselyistä
Seuraavien esimerkkien avulla voit kirjoittaa kyselyitä, joiden avulla ymmärrät vuokraajan suojausalttiustiedot.
Luettele kaikki vuokraajan solmun selitteet
Seuraava kysely ryhmittelee taulukon tiedot ExposureGraphNodes
ja käyttää Kuston summarize
operaattoria niiden luettelemiseen kohteen mukaan NodeLabel
.
ExposureGraphNodes
| summarize by NodeLabel
Luettele kaikki vuokraajan reunaotsikot
Seuraava kysely ryhmittelee taulukon tiedot ExposureGraphEdges
ja käyttää Kuston summarize
operaattoria niiden luettelemiseen reunaotsikoiden (EdgeLabel
) mukaan.
ExposureGraphEdges
| summarize by EdgeLabel
Luettele kaikki yhteydet määritetystä solmun selitteestä
Seuraava kysely ryhmittelee taulukon tiedotExposureGraphEdges
, ja kun lähdesolmun otsikko on microsoft.compute/virtualmachines
, se tekee yhteenvedon näennäiskoneen -kohteesta.EdgeLabel
Se tekee yhteenvedon reunuksista, jotka yhdistävät resursseja virtuaalikoneisiin suojausalttiuskaaviossasi.
ExposureGraphEdges
| where SourceNodeLabel == "microsoft.compute/virtualmachines"
| summarize by EdgeLabel
Luettele kaikki yhteydet tiettyyn solmun otsikkoon
Seuraavassa kyselyssä on yhteenveto reunuksista, jotka yhdistävät näennäiskoneet muihin suojauksen altistumisen kaavioresursseihin. Se ryhmittelee tiedot taulukkoon ExposureGraphEdges
, ja kun kohdesolmun otsikko on microsoft.compute/virtualmachines
, se käyttää Kuston summarize
operaattoria kohdesolmun otsikon luettelemiseen kohteen mukaan EdgeLabel
.
ExposureGraphEdges
| where TargetNodeLabel == "microsoft.compute/virtualmachines"
| summarize by EdgeLabel
Luettele tietyn solmun selitteen ominaisuudet
Seuraavassa kyselyssä luetellaan näennäiskoneen solmuotsikon ominaisuudet. Se ryhmittelee taulukon tiedot ExposureGraphNodes
suodatettuna näyttämään solmun otsikon "microsoft.compute/virtualmachines" vain. -operaattorin project-keep
avulla kysely säilyttää sarakkeen NodeProperties
. Palautetut tiedot on rajoitettu yhteen riviin.
ExposureGraphNodes
| where NodeLabel == "microsoft.compute/virtualmachines"
| project-keep NodeProperties
| take 1
Kysely altistumiskaaviosta
Altistumiskaavion kysely:
Valitse Microsoft Defender-portaalissametsästys -> kehittynyt metsästys.
Kirjoita kysely kyselyalueelle. Käytä kaavion rakennetta, funktioita ja operaattoritaulukoita tai seuraavia esimerkkejä kyselyn luomiseen.
Valitse Suorita kysely.
Kaaviopohjaiset kyselyesimerkit
Näiden kaaviopohjaisten kyselyesimerkkien avulla voit kirjoittaa entistä parempia suojausalttiuskyselyitä. Esimerkeissä haetaan malleja, jotka paljastavat riskejä paljastavan entiteetin väliset suhteet. Ne näyttävät, miten kontekstia korreloidaan tapahtuma- ja hälytyssignaaleihin.
Luettele kaikki reunalla varustettujen solmujen selitteet tiettyyn solmun otsikkoon
Seuraava kysely tuottaa luettelon kaikista saapuvista solmujen otsikoista, joissa on liitin näennäiskoneen solmun otsikkoon. Se luo kaaviorakenteen yhdistämällä SourceNodeId
taulukon saraketiedot ExposureGraphEdges
taulukon sarakkeeseen ExposureGraphNodes
TargetNodeId
operaattorilla make-graph
kaaviorakenteen rakenteita varten.
Sen jälkeen se luo operaattorin graph-match
avulla kaaviokuvion, jossa kohdesolmu TargetNode
vastaa NodeLabel
microsoft.compute/virtualmachines
kohdetta . Operaattoria project
käytetään vain kohteen säilyttämiseen IncomingNodeLabels
. Se luettelee tulokset seuraavasti 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
Luettele kaikki solmun otsikot, jotka ovat tietyn solmun selitteen reunassa
Seuraava kysely tuottaa luettelon kaikista lähtevistä solmujen otsikoista, joissa on liitin näennäiskoneen solmukoosteeseen.
- Se luo kaaviorakenteen yhdistämällä sarakkeen
SourceNodeId
käyttämällä taulukon tietojaExposureGraphEdges
taulukon sarakkeeseenTargetNodeId
ExposureGraphNodes
käyttämällämake-graph
operaattoria kaaviorakenteen luomiseen. - Sen jälkeen se käyttää -operaattoria
graph-match
vastaamaan kaavion kuviota, jossaSourceNode
jaNodeLabel
täsmäämicrosoft.compute/virtualmachines
. - Operaattoria
project
käytetään vain kohteen säilyttämiseenOutgoingNodeLabels
. Se luettelee tulokset seuraavastiOutgoingNodeLabels
: .
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
Internetille altistuneiden näennäiskoneiden etsiminen RCE-haavoittuvuuden avulla
Seuraavan kyselyn avulla voit löytää Internetille alttiina olevia näennäiskoneita ja RCE (Remote Code Execution) -haavoittuvuutta.
- Se käyttää
ExposureGraphNodes
rakennetaulukkoa. - Kun molemmat
NodeProperties
exposedToInternet
javulnerableToRCE
ovat tosia, se tarkistaa, että luokka (Categories
) on näennäiskoneet (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")
Löydä Internetiin yhteydessä olevien laitteiden, joissa on oikeuksien eskaloinnin haavoittuvuus
Seuraava kysely etsii Internetiin päin olevia laitteita, jotka ovat alttiina oikeuksien eskaloinnin haavoittuvuudelle, joka voi mahdollistaa pääsyn järjestelmän ylemmän tason oikeuksiin.
- Se käyttää
ExposureGraphNodes
rakennetaulukkoa. - Kun
NodeProperties
on sekä Internet-yhteydessä (IsInternetFacing
)VulnerableToPrivilegeEscalation
että , kysely tarkistaa, että kohteessaCategories
olevat kohteet ovat itse asiassa laitteita (device
).
ExposureGraphNodes
| where isnotnull(NodeProperties.rawData.IsInternetFacing)
| where isnotnull(NodeProperties.rawData.VulnerableToPrivilegeEscalation)
| where set_has_element(Categories, "device")
Näytä kaikki käyttäjät, jotka ovat kirjautuneet useampaan kuin yhteen kriittiseen laitteeseen
Tämän kyselyn tuloksena on luettelo käyttäjistä, jotka ovat kirjautuneet useampaan kuin yhteen kriittiseen laitteeseen, sekä niiden laitteiden määrän, joissa he ovat kirjautuneet sisään.
- Se luo
IdentitiesAndCriticalDevices
taulukon käyttämälläExposureGraphNodes
tietoja, jotka on suodatettu joko laitteilla, joiden kriittisyystaso on yli 4 tai jonka tekijä onidentity
. - Se luo sitten kaaviorakenteen operaattorin
make-graph
kanssa, jossaEdgeLabel
onCan Authenticate As
. - Se käyttää -operaattoria
graph-match
vastaamaan esiintymiä, joissa vastaadevice
kohdettaidentity
. - Sitten se käyttää operaattoria
project
käyttäjätietotunnusten ja laitetunnusten säilyttämiseen. - Operaattori
mv-apply
suodattaa laitetunnukset ja käyttäjätietotunnukset tyypin mukaan. Se tekee niistä yhteenvedon ja näyttää tulokset taulukossa, jossa on otsikot ,Number Of devices user is logged-in to
jaUser 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
Näytä asiakaslaitteet, joissa on kriittinen haavoittuvuus/käyttäjät, joilla on suuren arvon palvelimien käyttöoikeus
Seuraava kysely tuottaa luettelon laitteista, joissa on RCE-haavoittuvuuksia ja niiden laitetunnuksia, sekä laitteista, joissa on erittäin tärkeitä haavoittuvuuksia, ja niiden laitetunnuksista.
- Se luo
IdentitiesAndCriticalDevices
taulukon, joka sisältää laitteet (device
), joiden kriittisiä RCE-heikkouksia on alle neljä, ja käyttäjätiedot (identity
), jotka suodattamisen ja kuvioiden vastaavuuden avulla näyttävät laitteet, joissa on kriittisiä haavoittuvuuksia. - Luettelo on suodatettu näyttämään vain yhteydet, joissa on reunaotsikot
Can Authenticate As
jaCanRemoteInteractiveLogonTo
.
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
Anna kaikki polut tietystä solmutunnuksesta solmuun, jolla on tietty otsikko
Tämä kysely näyttää polun tietystä IP-solmusta välittämällä enintään kolme resurssia, jotka muodostavat yhteyden näennäiskoneen solmukoosteeseen.
- Se luo kaaviorakenteen taulukoiden ja
ExposureGraphEdges
-rakenteiden sekä -operaattoreidengraph-match
make-graph
ja -operaattoreiden avullaExposureGraphNodes
. - Operaattorin
project
kanssa se näyttää luettelon IP-tunnuksista, IP-ominaisuuksista, näennäiskoneen tunnuksista ja näennäiskoneen ominaisuuksista.
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