共用方式為


查詢企業曝光圖表

使用 Microsoft 安全性暴露風險管理 中的企業曝光圖表,在 Microsoft Defender 入口網站的進階搜捕中主動搜捕企業暴露威脅。

本文提供在企業曝光圖表中建構查詢的一些範例、秘訣和提示。

必要條件

  • 瞭解 受攻擊面管理。
  • 檢閱 使用圖形所需的許可權。

建置進階搜捕查詢

使用 make-graph 運算子

Kusto 的 make-graph 運算子會將節點和邊緣數據載入記憶體。

  • 由於 Kusto 只會載入使用中的數據行,因此不需要明確選取數據行。
  • 不過,數據行 NodeProperties 包含所有節點資訊,因此很大。
  • 在大部分情況下,只擷取所需的資訊,再將它饋送至 make-graph 運算符會很有用。

範例

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

使用動態數據行和智慧型手機索引

NodePropertiesCategories 是動態數據行。

  • Kusto 知道這些數據行包含類似 json 的內容,並套用智慧型手機索引。
  • 不過,並非所有 Kusto 運算子都會使用索引。 例如,set_has_elementisemptyisnotnull索引套用至動態isnotnull(Properties["containsSensitiveData"]數據行且不使用索引時,請勿使用索引。
  • 請改用 一 has() 律使用索引的 運算符。

範例

在下列查詢中,運算 has 符會 data 檢查字串,並 set_has_element 檢查 data 專案。

使用這兩個運算元很重要, has() 因為運算符會傳回 true,即使是類別也一樣 prefix_data

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

深入了解 瞭解字串詞彙

範例曝光查詢

下列範例可協助您撰寫查詢,以瞭解租使用者中的安全性暴露數據。

列出租使用者中的所有節點標籤

下列查詢會將數據表中ExposureGraphNodes的數據分組,並使用 Kusto 的 summarize 運算符依 列出。NodeLabel

ExposureGraphNodes
| summarize by NodeLabel

列出租使用者中的所有邊緣標籤

下列查詢會將數據表中 ExposureGraphEdges 的數據分組,並使用 Kusto 的 summarize 運算符,依邊緣卷標 () EdgeLabel 加以列出。

ExposureGraphEdges
| summarize by EdgeLabel

列出指定節點標籤中的所有連線

下列查詢會將資料表中 ExposureGraphEdges 的數據分組,其中來源節點標籤為 microsoft.compute/virtualmachines,它會依 匯總虛擬機的 EdgeLabel。 其摘要說明將資產連線到安全性暴露圖表中虛擬機的邊緣。

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

列出特定節點標籤的所有連線

下列查詢摘要說明將虛擬機連線到其他安全性暴露圖表資產的邊緣。 它會將數據表中 ExposureGraphEdges 的數據分組,而目標節點標籤為 microsoft.compute/virtualmachines,它會使用 Kusto 的 summarize 運算元,依 EdgeLabel列出目標節點標籤。

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

列出特定節點標籤的屬性

下列查詢會列出虛擬機節點標籤的屬性。 它會將數據表中 ExposureGraphNodes 的數據分組,篩選為僅顯示節點標籤 “microsoft.compute/virtualmachines” 結果。 使用 運算 project-keep 子時,查詢會保留數據行 NodeProperties 。 傳回的數據限製為一個數據列。

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

查詢曝光圖表

若要查詢曝光圖表:

  1. Microsoft Defender 入口網站中,選取 [搜捕 -> 進階搜捕]

  2. 在 [查詢] 區域中,輸入您的查詢。 使用圖表架構、函式和運算符數據表或下列範例來協助您建置查詢。

  3. 取 [執行查詢]

圖形導向查詢範例

使用這些圖形導向查詢範例,協助您撰寫更好的安全性暴露查詢。 這些範例會搜尋模式,以公開可能發現風險的實體之間的關聯性。 它們會示範如何將內容與事件/警示訊號相互關聯。

列出具有特定節點標籤邊緣的所有節點標籤

下列查詢會產生具有虛擬機節點標籤連接器的所有傳入節點標籤清單。 它會使用 SourceNodeId 運算符將數據表中ExposureGraphEdges的數據行數據對應至TargetNodeId數據表make-graphExposureGraphNodes的數據行,以建立圖形結構。

然後,它會使用 運算graph-match符來建立圖形模式,其中的目標節點TargetNodeNodeLabel 相符。microsoft.compute/virtualmachines 運算 project 子是用來只 IncomingNodeLabels保留 。 它會依 列出結果 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

列出對特定節點標籤進行排序的所有節點標籤

下列查詢會產生具有虛擬機節點標籤連接器的所有傳出節點標籤清單。

  • 它會使用 make-graph 運算符將數據表中的數據對應至TargetNodeId數據表中ExposureGraphEdgesExposureGraphNodes的數據行,以建置圖形SourceNodeId結構。
  • 然後,它會使用 運算 graph-match 符來比對圖形模式,其中 SourceNodeNodeLabel 會比對 microsoft.compute/virtualmachines
  • 運算 project 子是用來只 OutgoingNodeLabels保留 。 它會依 列出結果 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

探索向因特網公開且具有 RCE 弱點的 VM

下列查詢可讓您探索公開至因特網的虛擬機,以及遠端程式代碼執行 (RCE) 弱點。

  • 它會使用架 ExposureGraphNodes 構數據表。
  • 當 和 vulnerableToRCENodePropertiesexposedToInternet為 true 時,它會檢查類別 () Categories 是否為虛擬機 (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")

探索具有許可權提升弱點的因特網對向裝置

下列查詢會尋找暴露在許可權提升弱點的因特網對向裝置,這可能會允許存取系統內較高層級的許可權。

  • 它會使用架 ExposureGraphNodes 構數據表。
  • NodeProperties 是 () IsInternetFacingVulnerableToPrivilegeEscalation的因特網對應時,查詢會檢查 中的 Categories 專案實際上是裝置 (device) 。
ExposureGraphNodes
| where isnotnull(NodeProperties.rawData.IsInternetFacing)
| where isnotnull(NodeProperties.rawData.VulnerableToPrivilegeEscalation)
| where set_has_element(Categories, "device")

顯示所有登入多個重要裝置的使用者

此查詢會產生登入多個重要裝置的使用者清單,以及登入的裝置數目。

  • 它會使用ExposureGraphNodes由嚴重性層級高於 4 或 的identity裝置篩選的數據來建立IdentitiesAndCriticalDevices數據表。
  • 然後,它會使用 運算子建立圖形結構 make-graph ,其中 是 EdgeLabelCan Authenticate As
  • 它會使用運算 graph-match 符來比對 device 符合的實例 identity
  • 然後,它會使用 運算 project 符來保留身分識別標識碼和裝置標識符。
  • 操作 mv-apply 員會依類型篩選裝置標識碼和身分識別標識碼。 它會摘要說明它們,並在具有標 Number Of devices user is logged-in to頭、 和 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

顯示具有重要弱點的用戶端裝置/可存取高價值伺服器的使用者

下列查詢會產生具有 RCE 弱點的裝置及其裝置識別碼,以及具有高嚴重弱點的裝置及其裝置標識碼的清單。

  • 它會建立一個 IdentitiesAndCriticalDevices 數據表,其中包含具有 RCE 弱點且 device 嚴重性低於 4 的裝置 () ,而身分識別 (identity) 透過篩選和模式比對顯示具有重大弱點的裝置。
  • 清單會經過篩選,只顯示具有邊緣卷標和 CanRemoteInteractiveLogonTo的連線Can Authenticate As
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

提供從特定節點標識碼到具有特定標籤節點的所有路徑

此查詢會顯示特定IP節點的路徑,最多傳遞三個資產,以聯機到虛擬機節點標籤。

  • 它會使用和 ExposureGraphNodesExposureGraphEdges 架構數據表以及 make-graphgraph-match 運算子來建立圖形結構。
  • 使用運算 project 子時,它會顯示IP標識碼、IP 屬性、虛擬機標識碼和虛擬機屬性的清單。
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

後續步驟

使用受攻擊面地圖進行探索