A vállalati expozíciós diagram lekérdezése

A Microsoft Security Exposure Management vállalati expozíciós grafikonját használva proaktívan kereshet vállalati expozíciós fenyegetéseket a speciális veszélyforrás-keresésekben a Microsoft Defender portálon.

Ez a cikk példákat, tippeket és tippeket tartalmaz a nagyvállalati expozíciós diagram lekérdezéseinek felépítéséhez.

A Security Exposure Management jelenleg nyilvános előzetes verzióban érhető el.

Fontos

A cikkben található információk egy része egy előzetesen kiadott termékre vonatkozik, amely a kereskedelmi forgalomba kerülés előtt lényegesen módosulhat. A Microsoft nem vállal kifejezett vagy hallgatólagos szavatosságot az itt megadott információkra vonatkozóan.

Előfeltételek

Speciális veszélyforrás-keresési lekérdezések létrehozása

A make-graph operátor használata

A Kusto operátora make-graph csomópontokat és éleket tölt be a memóriába.

  • Mivel a Kusto csak a használatban lévő oszlopokat tölti be, nem kell explicit módon kijelölnie az oszlopokat.
  • Az oszlop azonban tartalmazza az NodeProperties összes csomópontinformációt, így nagy méretű is.
  • A legtöbb esetben hasznos, ha csak a szükséges információkat nyeri ki, mielőtt betáplálást ad az make-graph operátornak.

Példa

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

Dinamikus oszlopok és intelligens indexelés használata

NodeProperties és Categories dinamikus oszlopok.

  • A Kusto tudja, hogy ezek az oszlopok json-szerű tartalmat tartalmaznak, és intelligens indexelést alkalmaz.
  • Azonban nem minden Kusto-operátor használja az indexet. set_has_elementisnotnullisemptyPéldául, , ne használja az indexet, ha dinamikus oszlopra van alkalmazva, és isnotnull(Properties["containsSensitiveData"] nem használja az indexet.
  • Ehelyett használja az operátort has() , amely mindig az indexet használja.

Példa

A következő lekérdezésben az has operátor ellenőrzi a sztringet data , és set_has_element ellenőrzi az data elemet.

Mindkét operátor használata fontos, mivel az has() operátor igaz értéket ad vissza még egy kategóriához prefix_datais.

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

További információ a sztringkifejezések értelmezéséről.

Példa expozíciós lekérdezésekre

Az alábbi példák segíthetnek lekérdezések írásában a bérlő biztonsági expozíciós adatainak megértéséhez.

A bérlő összes csomópontcímkéjének listázása

Az alábbi lekérdezés csoportosítja a ExposureGraphNodes táblában lévő adatokat, és a Kusto operátorával summarize listázja azokat a alapján NodeLabel.

ExposureGraphNodes
| summarize by NodeLabel

A bérlő összes élcímkéjének listázása

Az alábbi lekérdezés csoportosítja a ExposureGraphEdges táblában lévő adatokat, és a Kusto operátorát summarize használja az élfeliratok szerinti listázáshoz (EdgeLabel).

ExposureGraphEdges
| summarize by EdgeLabel

Adott csomópontcímkéből származó összes kapcsolat listázása

Az alábbi lekérdezés csoportosítja a ExposureGraphEdges táblában lévő adatokat, és ahol a forráscsomópont címkéje microsoft.compute/virtualmachines, a a által EdgeLabelösszegzi a virtuális gépek adatait. Összefoglalja azokat a peremhálózatokat, amelyek az objektumokat virtuális gépekhez kötik a biztonsági expozíciós diagramon.

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

Adott csomópontcímkéhez tartozó összes kapcsolat listázása

Az alábbi lekérdezés összefoglalja azokat a peremhálózatokat, amelyek virtuális gépeket csatlakoztatnak más biztonsági expozíciós gráfeszközökhöz. Csoportosítja a ExposureGraphEdges táblában lévő adatokat, és ahol a célcsomópont címkéje microsoft.compute/virtualmachines, a Kusto operátorával summarize listázhatja a célcsomópont címkéjét a alapján EdgeLabel.

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

Adott csomópontcímke tulajdonságainak listázása

Az alábbi lekérdezés a virtuálisgép-csomópont címkéjének tulajdonságait sorolja fel. Csoportosítja a ExposureGraphNodes táblában lévő adatokat, szűrve, hogy csak a "microsoft.compute/virtualmachines" csomópontcímke eredményeit jelenítse meg. Az operátorral project-keep a lekérdezés megtartja az oszlopot NodeProperties . A visszaadott adatok egy sorra korlátozódnak.

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

Az expozíciós diagram lekérdezése

Az expozíciós diagram lekérdezése:

  1. A Microsoft Defender portálon válassza a veszélyforrás-keresés –> speciális veszélyforrás-keresés lehetőséget.

  2. A Lekérdezés területen írja be a lekérdezést. A lekérdezés összeállításához használja a gráfsémát, a függvényeket és az operátortáblákat, illetve az alábbi példákat.

  3. Válassza a Lekérdezés futtatása lehetőséget.

Gráforientált lekérdezési példák

Ezekkel a gráforientált lekérdezési példák segítségével jobb biztonsági expozíciós lekérdezéseket írhat. A példák olyan mintákat keresnek, amelyek felfedhetik a kockázatokat felfedő entitások közötti kapcsolatokat. Bemutatják, hogyan lehet korrelálni a kontextust az incidensek/riasztások jelzéseivel.

Egy éllel rendelkező összes csomópontcímke listázása egy adott csomópontcímkére

Az alábbi lekérdezés eredménye az összes bejövő csomópontcímke listája, amely tartalmazza a virtuális gép csomópontcímkéjének összekötőjét. Gráfstruktúrát hoz létre úgy, hogy a SourceNodeIdExposureGraphEdges tábla oszlopadatait a TargetNodeId tábla oszlopához társítja a ExposureGraphNodesmake-graph operátorral egy gráfstruktúra létrehozásához.

Ezután az graph-match operátor használatával gráfmintát hoz létre, amelyben a célcsomópont TargetNode és NodeLabel a egyezik microsoft.compute/virtualmachines. Az project operátor csak a IncomingNodeLabelsmegtartására szolgál. Az eredményeket a következő szerint sorolja fel: 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

Az összes csomópontcímke listázása egy adott csomópontcímkével

Az alábbi lekérdezés eredménye az összes kimenő csomópontcímke listája, amely tartalmazza a virtuális gép csomópontcímkéjének összekötőjét.

  • Gráfstruktúrát hoz létre úgy, hogy megfelelteti az SourceNodeId oszlopnak a ExposureGraphEdges tábla adatait a TargetNodeId tábla oszlopához a ExposureGraphNodes operátorral make-graph egy gráfstruktúra létrehozásához.
  • Ezután a graph-match operátorral egyezteti a gráfmintát, ahol SourceNode és NodeLabel egyezik microsoft.compute/virtualmachines.
  • Az project operátor csak a OutgoingNodeLabelsmegtartására szolgál. Az eredményeket a következő szerint sorolja fel: 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

Az interneten elérhető virtuális gépek felderítése RCE biztonsági résrel

A következő lekérdezéssel felderítheti az interneten és a távoli kódvégrehajtási (RCE) biztonsági résben lévő virtuális gépeket.

  • A sématáblát ExposureGraphNodes használja.
  • Ha a és vulnerableToRCE a értéke isexposedToInternetNodePropertiesigaz, ellenőrzi, hogy a kategória (Categories) virtuális gépek-e (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")

Jogosultságeszkalációs biztonsági résrel rendelkező internetkapcsolattal rendelkező eszközök felderítése

Az alábbi lekérdezés olyan, a jogosultságok eszkalálásával kapcsolatos biztonsági résnek kitett internetkapcsolattal rendelkező eszközöket keres, amelyek magasabb szintű jogosultságokhoz való hozzáférést tehetnek lehetővé a rendszeren belül.

  • A sématáblát ExposureGraphNodes használja.
  • Ha NodeProperties az internetkapcsolat (IsInternetFacing) és VulnerableToPrivilegeEscalationa is, a lekérdezés ellenőrzi, hogy a benne lévő Categories elemek valójában eszközök-e (device).
ExposureGraphNodes
| where isnotnull(NodeProperties.rawData.IsInternetFacing)
| where isnotnull(NodeProperties.rawData.VulnerableToPrivilegeEscalation)
| where set_has_element(Categories, "device")

Több kritikus eszközre bejelentkezett összes felhasználó megjelenítése

Ez a lekérdezés egynél több kritikus eszközbe bejelentkezett felhasználók listáját, valamint a bejelentkezett eszközök számát eredményezi.

  • Egy táblát hoz létre a IdentitiesAndCriticalDevices 4-esnél magasabb kritikussági szinttel rendelkező eszközök vagy a által szűrt adatok alapján ExposureGraphNodesidentity.
  • Ezután egy gráfstruktúrát hoz létre az make-graph operátorral, ahol a EdgeLabel .Can Authenticate As
  • Az operátorral egyezteti azokat a graph-match példányokat, ahol a device egyezés egyezik.identity
  • Ezután az operátor használatával megőrzi az project identitásazonosítókat és az eszközazonosítókat.
  • Az mv-apply operátor típus szerint szűri az eszközazonosítókat és az identitásazonosítókat. Összegzi őket, és megjeleníti az eredményeket egy táblázatban a fejlécekkel( Number Of devices user is logged-in toés 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

Kritikus biztonsági résrel rendelkező ügyféleszközök/magas értékű kiszolgálókhoz hozzáféréssel rendelkező felhasználók megjelenítése

A következő lekérdezés az RCE biztonsági résekkel és eszközazonosítókkal rendelkező eszközök, valamint a magas kritikus biztonsági résekkel és eszközazonosítókkal rendelkező eszközök listáját eredményezi.

  • Létrehoz egy táblát IdentitiesAndCriticalDevices , amely tartalmazza a négynél alacsonyabb kritikusságú RCE-biztonsági résekkel rendelkező eszközöket (device), valamint az identitásokat (identity), amelyek szűréssel és mintaegyeztetéssel a kritikus biztonsági résekkel rendelkező eszközöket jelenítik meg.
  • A lista úgy van szűrve, hogy csak azokat a kapcsolatokat jelenítse meg, amelyek élcímkéi Can Authenticate As és 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

Adott csomópont-azonosítótól egy adott címkével rendelkező csomópontig minden elérési út megadása

Ez a lekérdezés egy adott IP-csomópont elérési útját jeleníti meg, és legfeljebb három objektumon halad át, amelyek kapcsolatot eredményeznek a virtuálisgép-csomópont címkével.

  • A és ExposureGraphEdges a ExposureGraphNodes sématáblát, valamint a és graph-match az make-graph operátort használja a gráfstruktúra létrehozásához.
  • Az operátor megjeleníti az project IP-azonosítók, IP-tulajdonságok, virtuálisgép-azonosítók és virtuálisgép-tulajdonságok listáját.
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

Következő lépések

Ismerkedjen meg a támadási felület térképével.