Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Microsoft Defender portalında gelişmiş tehdit avcılığında uç noktalar, bulut ortamları ve hibrit altyapılar genelinde kurumsal maruz kalma tehditlerini proaktif olarak avlamak için Microsoft Güvenlik Korunma Düzeyi Yönetimi'deki kurumsal maruz kalma grafiğini kullanın. Defender portalında Bulut için Defender'ın tümleştirilmesiyle, açığa çıkarma grafiği artık Azure, AWS ve GCP ortamlarındaki bulut düğümü türlerini ve varlıkları içerir.
Bu makalede, kurumsal maruz kalma grafiğinde sorgu oluşturmaya yönelik bazı örnekler, ipuçları ve ipuçları sağlanır.
Önkoşullar
- Saldırı yüzeyi yönetimi hakkında bilgi edinin.
- Grafikle çalışmak için gerekli izinleri gözden geçirin.
Gelişmiş tehdit avcılığı sorguları oluşturma
- Gelişmiş tehdit avcılığı sorguları oluşturmak için en iyi yöntemleri gözden geçirin
- Kusto Sorgu Dili (KQL) kullanmaya başlama
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,
NodePropertiessü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-graphyararlı 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_elementisemptyisnotnullbir dinamik sütuna uygulandığında dizini kullanmaz veisnotnull(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. Defender portalında Bulut için Defender'ın tümleştirilmesiyle birlikte, bu artık birden çok ortamdan bulut kaynaklarını içerir.
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. Defender portalında Bulut için Defender'ın tümleştirilmesiyle NodeProperties artık buluta özgü ek öznitelikler ve ilişkiler içeriyor.
ExposureGraphNodes
| where NodeLabel == "microsoft.compute/virtualmachines"
| project-keep NodeProperties
| take 1
Örnek: Birden çok ortamda bulut kaynaklarını sorgulama
Aşağıdaki sorguda, Artık Defender portalında Bulut için Defender'ın tümleştirilmesiyle birlikte farklı ortamlardaki bulut kaynaklarının nasıl sorgu yapılacağı gösterilmektedir:
ExposureGraphNodes
| where NodeLabel contains "microsoft.compute" or NodeLabel contains "aws." or NodeLabel contains "gcp."
| summarize count() by NodeLabel
| order by count_ desc
Açığa çıkarma grafiğini sorgulama
Açığa çıkarma grafiğini sorgulamak için:
Microsoft Defender portalındaavcılık -> gelişmiş avcılık'ı seçin.
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.
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
SourceNodeIdbir grafik yapısı oluşturur ve bir grafik yapısı oluşturmak için işlecinimake-graphkullanır.TargetNodeIdExposureGraphNodesExposureGraphEdges - Ardından, işlecini
graph-matchkullanarak graf desenini ile eşleştirir veNodeLabelileSourceNodeeşleşirmicrosoft.compute/virtualmachines. -
projectişleci yalnızca öğesiniOutgoingNodeLabelstutmak için kullanılır. Sonuçları ölçütüne göreOutgoingNodeLabelslisteler.
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 bulut ortamlarında Uzaktan Kod Yürütme (RCE) güvenlik açığına maruz kalan sanal makineleri keşfetmenizi sağlar.
- Şema tablosunu kullanır
ExposureGraphNodes. - Hem hem de
vulnerableToRCENodePropertiesexposedToInternetdoğru olduğunda, kategorinin () sanal makineler (Categoriesvirtual_machine) olup olmadığını denetler. - Defender portalında Bulut için Defender'ın tümleştirilmesiyle bu, artık Azure, AWS ve GCP ortamlarındaki VM'leri de içerir.
ExposureGraphNodes
| where isnotnull(NodeProperties.rawData.exposedToInternet)
| where isnotnull(NodeProperties.rawData.vulnerableToRCE)
| where Categories has "virtual_machine" and set_has_element(Categories, "virtual_machine")
Örnek: Bulut ve şirket içi varlıklar arasındaki karma saldırı yollarını bulma
Aşağıdaki sorguda, Defender portalında Bulut için Defender'ın tümleştirilmesiyle olası karma saldırı yollarının nasıl tanım yapılacağı gösterilmektedir:
let CloudAssets = ExposureGraphNodes
| where Categories has "virtual_machine" and (NodeLabel contains "microsoft.compute" or NodeLabel contains "aws." or NodeLabel contains "gcp.");
let OnPremAssets = ExposureGraphNodes
| where Categories has "device" and not(NodeLabel contains "microsoft.compute" or NodeLabel contains "aws." or NodeLabel contains "gcp.");
ExposureGraphEdges
| make-graph SourceNodeId --> TargetNodeId with ExposureGraphNodes on NodeId
| graph-match (CloudVM)-[edge1]->(Identity)-[edge2]->(OnPremDevice)
where set_has_element(CloudVM.Categories, "virtual_machine") and
(CloudVM.NodeLabel contains "microsoft.compute" or CloudVM.NodeLabel contains "aws." or CloudVM.NodeLabel contains "gcp.") and
set_has_element(Identity.Categories, "identity") and
set_has_element(OnPremDevice.Categories, "device") and
not(OnPremDevice.NodeLabel contains "microsoft.compute" or OnPremDevice.NodeLabel contains "aws." or OnPremDevice.NodeLabel contains "gcp.")
project CloudVMName=CloudVM.NodeName, IdentityName=Identity.NodeName, OnPremDeviceName=OnPremDevice.NodeName
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çindekiCategoriesöğ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 kullanarakExposureGraphNodesbirIdentitiesAndCriticalDevicestablo oluşturur. - Ardından işleciyle
make-graphbir graf yapısı oluşturur ve buradaEdgeLabelolurCan Authenticate As. - bir ile
graph-matcheşleşen örneklerideviceidentityeş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-applycihaz 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 birIdentitiesAndCriticalDevicestablo 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ı vemake-graphvegraph-matchişleçlerini kullanırExposureGraphNodes. - işleciyle
projectIP 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