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
- További információ a támadásifelület-kezelésről .
- Tekintse át a gráfhoz szükséges engedélyeket.
Speciális veszélyforrás-keresési lekérdezések létrehozása
- Tekintse át a speciális veszélyforrás-keresési lekérdezések készítésének ajánlott eljárásait
- Ismerkedés a Kusto lekérdezési nyelvvel (KQL)
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_element
isnotnull
isempty
Például, , ne használja az indexet, ha dinamikus oszlopra van alkalmazva, ésisnotnull(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_data
is.
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:
A Microsoft Defender portálon válassza a veszélyforrás-keresés –> speciális veszélyforrás-keresés lehetőséget.
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.
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 SourceNodeId
ExposureGraphEdges
tábla oszlopadatait a TargetNodeId
tábla oszlopához társítja a ExposureGraphNodes
make-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 IncomingNodeLabels
megtartá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 aExposureGraphEdges
tábla adatait aTargetNodeId
tábla oszlopához aExposureGraphNodes
operátorralmake-graph
egy gráfstruktúra létrehozásához. - Ezután a
graph-match
operátorral egyezteti a gráfmintát, aholSourceNode
ésNodeLabel
egyezikmicrosoft.compute/virtualmachines
. - Az
project
operátor csak aOutgoingNodeLabels
megtartá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 isexposedToInternet
NodeProperties
igaz, 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
) ésVulnerableToPrivilegeEscalation
a 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ánExposureGraphNodes
identity
. - Ezután egy gráfstruktúrát hoz létre az
make-graph
operátorral, ahol aEdgeLabel
.Can Authenticate As
- Az operátorral egyezteti azokat a
graph-match
példányokat, ahol adevice
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
ésUser 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
ésCanRemoteInteractiveLogonTo
.
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
aExposureGraphNodes
sématáblát, valamint a ésgraph-match
azmake-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