Aracılığıyla paylaş


Kurumsal açığa çıkarma grafını sorgulama

Microsoft Defender portalında gelişmiş tehdit avcılığında kurumsal maruz kalma tehditlerini proaktif olarak avlamak için Microsoft Güvenlik Açığa Çıkarma Yönetimi'ndeki kurumsal maruz kalma grafiğini kullanın.

Bu makalede, kurumsal maruz kalma grafiğinde sorgu oluşturmaya yönelik bazı örnekler, ipuçları ve ipuçları sağlanır.

Güvenlik Açığa Çıkarma Yönetimi şu anda genel önizleme aşamasındadır.

Önemli

Bu makaledeki bazı bilgiler önceden yayımlanmış bir ürünle ilgilidir ve ticari olarak piyasaya sürülmeden önce önemli ölçüde değiştirilmiş olabilir. Microsoft, burada sağlanan bilgilerle ilgili olarak açık veya zımni hiçbir garanti vermez.

Önkoşullar

Gelişmiş tehdit avcılığı sorguları oluşturma

Graf yapma işlecini kullanma

Kusto'nun make-graph operatörü, düğümleri ve kenarları belleğe yükler.

  • Kusto yalnızca kullanımda olan sütunları yüklediğinden, sütunları açıkça seçmenize gerek yoktur.
  • Ancak, NodeProperties sütun tüm düğüm bilgilerini içerir ve bu nedenle büyüktür.
  • Çoğu senaryoda, yalnızca işleçle beslemeden önce gereken bilgileri ayıklamak make-graph yararlı olur.

Örnek

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

Dinamik sütunları ve akıllı dizin oluşturmayı kullanma

NodeProperties ve Categories dinamik sütunlardır.

  • Kusto bu sütunların json benzeri içerik içerdiğini bilir ve akıllı dizin oluşturma uygular.
  • Ancak, tüm Kusto işleçleri dizini kullanmaz. Örneğin, , set_has_elementisemptyisnotnull bir dinamik sütuna uygulandığında dizini kullanmaz ve isnotnull(Properties["containsSensitiveData"] dizini kullanmaz.
  • Bunun yerine, her zaman dizini kullanan işlecini kullanın has() .

Örnek

Aşağıdaki sorguda has işleç dizeyi data denetler ve set_has_element öğesini denetler data .

bir kategori prefix_dataiçin bile işleç true döndürdüğünden her iki işlecin kullanılması önemlidirhas().

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

Dize terimlerini anlama hakkında daha fazla bilgi edinin.

Örnek açığa çıkarma sorguları

Aşağıdaki örnekler, kiracınızdaki güvenlik açığa çıkarma verilerini anlamak için sorgu yazmanıza yardımcı olabilir.

Kiracınızdaki tüm düğüm etiketlerini listeleme

Aşağıdaki sorgu, tablodaki ExposureGraphNodes verileri gruplandırıp Kusto'nun summarize işlecini kullanarak tarafından NodeLabellisteler.

ExposureGraphNodes
| summarize by NodeLabel

Kiracınızdaki tüm kenar etiketlerini listeleme

Aşağıdaki sorgu, tablodaki ExposureGraphEdges verileri gruplar ve uç etiketlerine (EdgeLabel ) göre listelemek için Kusto işlecini summarize kullanır.

ExposureGraphEdges
| summarize by EdgeLabel

Belirtilen düğüm etiketinden tüm bağlantıları listeleme

Aşağıdaki sorgu, tablodaki ExposureGraphEdges verileri ve kaynak düğüm etiketinin microsoft.compute/virtualmachinesolduğu verileri gruplandırarak sanal makinenin EdgeLabeldeğerini özetler. Varlıkları güvenlik açığa çıkarma grafınızdaki sanal makinelere bağlayan kenarları özetler.

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

Belirli bir düğüm etiketine yönelik tüm bağlantıları listeleme

Aşağıdaki sorgu, sanal makineleri diğer güvenlik açığa çıkarma grafı varlıklarına bağlayan kenarları özetler. Tablodaki ExposureGraphEdges verileri ve hedef düğüm etiketinin olduğu yeri gruplandırarak hedef düğüm etiketini microsoft.compute/virtualmachinestarafından listelemek için Kusto'nun summarize işlecini EdgeLabelkullanır.

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

Belirli bir düğüm etiketinin özelliklerini listeleme

Aşağıdaki sorgu, sanal makine düğümü etiketinin özelliklerini listeler. Tablodaki ExposureGraphNodes verileri gruplandırarak yalnızca "microsoft.compute/virtualmachines" düğüm etiketini gösterecek şekilde filtrelenmiştir. project-keep işleciyle sorgu sütunu tutarNodeProperties. Döndürülen veriler bir satırla sınırlıdır.

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

Açığa çıkarma grafiğini sorgulama

Açığa çıkarma grafiğini sorgulamak için:

  1. Microsoft Defender portalındaavcılık -> gelişmiş avcılık'ı seçin.

  2. Sorgu alanına sorgunuzu yazın. Sorgunuzu oluşturmanıza yardımcı olması için grafik şemasını, işlevleri ve işleç tablolarını veya aşağıdaki örnekleri kullanın.

  3. Sorguyu çalıştır'ı seçin.

Graf odaklı sorgu örnekleri

Daha iyi güvenlik açığa çıkarma sorguları yazmanıza yardımcı olması için bu graf odaklı sorgu örneklerini kullanın. Örnekler, riski ortaya çıkarabilecek varlıklar arasındaki ilişkileri ortaya çıkarmak için desenleri arar. Bağlamı olay/uyarı sinyalleriyle nasıl ilişkilendireceğini gösterir.

Kenarlı tüm düğüm etiketlerini belirli bir düğüm etiketine listeleme

Aşağıdaki sorgu, sanal makine düğümü etiketine bağlayıcısı olan tüm gelen düğüm etiketlerinin listesini döndürür. Grafik yapısı oluşturmak için TargetNodeId tablodaki ExposureGraphEdgesSourceNodeId sütun verilerini işleciyle make-graph tablodaki ExposureGraphNodes sütuna eşleyerek bir grafik yapısı oluşturur.

Ardından hedef düğümün graph-matchTargetNode bulunduğu ve NodeLabel eşleştirildiği microsoft.compute/virtualmachinesbir graf deseni oluşturmak için işlecini kullanır. project işleci yalnızca öğesini IncomingNodeLabelstutmak için kullanılır. Sonuçları ölçütüne göre IncomingNodeLabelslisteler.

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

Belirli bir düğüm etiketinin kenarlarını içeren tüm düğüm etiketlerini listeleme

Aşağıdaki sorgu, sanal makine düğümü etiketine bağlayıcısı olan tüm giden düğüm etiketlerinin listesini döndürür.

  • Sütun, tablodaki verileri tablodaki sütuna eşleyerek SourceNodeId bir grafik yapısı oluşturur ve bir grafik yapısı oluşturmak için işlecini make-graph kullanır.TargetNodeIdExposureGraphNodesExposureGraphEdges
  • Ardından, işlecini graph-match kullanarak graf desenini ile eşleştirir ve NodeLabel ile SourceNode eşleşirmicrosoft.compute/virtualmachines.
  • project işleci yalnızca öğesini OutgoingNodeLabelstutmak için kullanılır. Sonuçları ölçütüne göre OutgoingNodeLabelslisteler.
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 güvenlik açığıyla İnternet'e açık vm'leri keşfetme

Aşağıdaki sorgu, İnternet'e ve Uzaktan Kod Yürütme (RCE) güvenlik açığına maruz kalan sanal makineleri keşfetmenize olanak tanır.

  • Şema tablosunu kullanır ExposureGraphNodes .
  • Hem hem de vulnerableToRCENodePropertiesexposedToInternet doğru olduğunda, kategorinin () sanal makineler (Categoriesvirtual_machine) olup olmadığını denetler.
ExposureGraphNodes
| where isnotnull(NodeProperties.rawData.exposedToInternet)
| where isnotnull(NodeProperties.rawData.vulnerableToRCE)
| where Categories has "virtual_machine" and set_has_element(Categories, "virtual_machine")

Ayrıcalık yükseltme güvenlik açığı olan İnternet'e yönelik cihazları keşfedin

Aşağıdaki sorgu, sistemde daha üst düzey ayrıcalıklara erişime izin verebilecek bir ayrıcalık yükseltme güvenlik açığına maruz kalan İnternet'e yönelik cihazları arar.

  • Şema tablosunu kullanır ExposureGraphNodes .
  • Hem İnternet'e (IsInternetFacing) hem de öğesine yönelik olduğundaNodeProperties, sorgu içindeki Categories öğelerin gerçekten cihaz (device) olup olmadığını VulnerableToPrivilegeEscalationdenetler.
ExposureGraphNodes
| where isnotnull(NodeProperties.rawData.IsInternetFacing)
| where isnotnull(NodeProperties.rawData.VulnerableToPrivilegeEscalation)
| where set_has_element(Categories, "device")

Birden fazla kritik cihazda oturum açmış olan tüm kullanıcıları gösterme

Bu sorgu, oturum açtıkları cihaz sayısıyla birlikte birden fazla kritik cihazda oturum açmış olan kullanıcıların listesiyle sonuçlanmıştır.

  • Kritiklik düzeyi 4'ü aşan cihazlara göre veya identitytarafından filtrelenmiş verileri kullanarak ExposureGraphNodes bir IdentitiesAndCriticalDevices tablo oluşturur.
  • Ardından işleciyle make-graph bir graf yapısı oluşturur ve burada EdgeLabel olur Can Authenticate As.
  • bir ile graph-match eşleşen örnekleri deviceidentityeşleştirmek için işlecini kullanır.
  • Ardından, kimlik kimliklerini ve cihaz kimliklerini korumak için işlecini kullanır project .
  • Operatör, mv-apply cihaz kimliklerini ve kimlik kimliklerini türe göre filtreler. Bunları özetler ve sonuçları, ve başlıklarını Number Of devices user is logged-in toUser Idiçeren bir tabloda görüntüler.
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

Kritik güvenlik açığı olan istemci cihazlarını/yüksek değerli sunuculara erişimi olan kullanıcıları gösterme

Aşağıdaki sorgu, RCE güvenlik açıklarına ve bunların cihaz kimliklerine sahip cihazların ve yüksek kritik güvenlik açıklarına ve cihaz kimliklerine sahip cihazların listesini verir.

  • Kritikliği dörtten düşük olan RCE güvenlik açıklarına sahip cihazları (device) ve filtreleme ve desen eşleştirme yoluyla kritik güvenlik açıklarına sahip cihazları gösteren kimlikleri (identity) içeren bir IdentitiesAndCriticalDevices tablo oluşturur.
  • Liste, yalnızca ve kenar etiketlerine Can Authenticate AsCanRemoteInteractiveLogonTosahip bağlantıları gösterecek şekilde filtrelenmiştir.
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

Belirli bir düğüm kimliğinden belirli bir etikete sahip bir düğüme tüm yolları sağlama

Bu sorgu belirli bir IP düğümünden gelen yolu görüntüler ve sanal makine düğümü etiketine bağlantıyla sonuçlayan üçe kadar varlık geçirir.

  • Graf yapısı oluşturmak için ve ExposureGraphEdges şema tablolarını ve make-graph ve graph-match işleçlerini kullanırExposureGraphNodes.
  • işleciyle project IP kimliklerinin, IP özelliklerinin, sanal makine kimliklerinin ve sanal makine özelliklerinin listesini görüntüler.
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

Sonraki adımlar

Saldırı yüzeyi haritasıyla keşfedin.