Jaa


Kyselyn tekeminen yrityksen altistumiskaaviosta

Käytä Yritysten altistumiskaaviota Microsoft Security Exposure Managementissa yritysten altistumisuhkien ennakoivaen etsimiseen kehittyneessä metsästyksessä Microsoft Defender -portaalissa.

Tässä artikkelissa on esimerkkejä, vihjeitä ja vihjeitä kyselyiden muodostamiseen yrityksen altistumiskaaviossa.

Suojauksen näkymisen hallinta on tällä hetkellä julkisessa esikatselussa.

Tärkeää

Jotkin tämän artikkelin tiedot liittyvät tuotteen ennakkojulkaisuversioon, jota voidaan muuttaa huomattavasti ennen kaupallista julkaisua. Microsoft ei anna mitään takuita tässä annettujen tietojen suhteen.

Ennakkovaatimukset

Kehittyneiden metsästyskyselyiden luominen

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 , , isemptyisnotnull , ei käytä indeksiä, set_has_elementkun sitä käytetään dynaamisessa sarakkeessa isnotnull(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:

  1. Valitse Microsoft Defender -portaalissametsästys -> kehittynyt metsästys.

  2. Kirjoita kysely kyselyalueelle. Käytä kaavion rakennetta, funktioita ja operaattoritaulukoita tai seuraavia esimerkkejä kyselyn luomiseen.

  3. 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 ExposureGraphNodesTargetNodeId operaattorilla make-graph kaaviorakenteen rakenteita varten.

Sen jälkeen se luo operaattorin graph-match avulla kaaviokuvion, jossa kohdesolmu TargetNode vastaa NodeLabelmicrosoft.compute/virtualmachineskohdetta . 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 tietoja ExposureGraphEdges taulukon sarakkeeseen TargetNodeIdExposureGraphNodes käyttämällä make-graph operaattoria kaaviorakenteen luomiseen.
  • Sen jälkeen se käyttää -operaattoria graph-match vastaamaan kaavion kuviota, jossa SourceNode ja NodeLabel täsmää microsoft.compute/virtualmachines.
  • Operaattoria project käytetään vain kohteen säilyttämiseen OutgoingNodeLabels. Se luettelee tulokset seuraavasti 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

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 NodePropertiesexposedToInternet ja vulnerableToRCE 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) VulnerableToPrivilegeEscalationettä , kysely tarkistaa, että kohteessa Categories 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ä on identity.
  • Se luo sitten kaaviorakenteen operaattorin make-graph kanssa, jossa EdgeLabel on Can Authenticate As.
  • Se käyttää -operaattoria graph-match vastaamaan esiintymiä, joissa vastaa device kohdetta identity.
  • 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 toja 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

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 ja 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

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ä -operaattoreiden graph-matchmake-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

Seuraavat vaiheet

Tutki hyökkäyspintakartan avulla.