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
- 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,
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_element
isempty
isnotnull
bir 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_data
iç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 NodeLabel
listeler.
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/virtualmachines
olduğu verileri gruplandırarak sanal makinenin EdgeLabel
değ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/virtualmachines
tarafından listelemek için Kusto'nun summarize
işlecini EdgeLabel
kullanı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:
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 ExposureGraphEdges
SourceNodeId
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-match
TargetNode
bulunduğu ve NodeLabel
eşleştirildiği microsoft.compute/virtualmachines
bir graf deseni oluşturmak için işlecini kullanır.
project
işleci yalnızca öğesini IncomingNodeLabels
tutmak için kullanılır. Sonuçları ölçütüne göre IncomingNodeLabels
listeler.
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şlecinimake-graph
kullanır.TargetNodeId
ExposureGraphNodes
ExposureGraphEdges
- Ardından, işlecini
graph-match
kullanarak graf desenini ile eşleştirir veNodeLabel
ileSourceNode
eşleşirmicrosoft.compute/virtualmachines
. -
project
işleci yalnızca öğesiniOutgoingNodeLabels
tutmak için kullanılır. Sonuçları ölçütüne göreOutgoingNodeLabels
listeler.
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
vulnerableToRCE
NodeProperties
exposedToInternet
doğru olduğunda, kategorinin () sanal makineler (Categories
virtual_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çindekiCategories
öğelerin gerçekten cihaz (device
) olup olmadığınıVulnerableToPrivilegeEscalation
denetler.
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
identity
tarafından filtrelenmiş verileri kullanarakExposureGraphNodes
birIdentitiesAndCriticalDevices
tablo oluşturur. - Ardından işleciyle
make-graph
bir graf yapısı oluşturur ve buradaEdgeLabel
olurCan Authenticate As
. - bir ile
graph-match
eşleşen örnekleridevice
identity
eş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 to
User Id
iç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 birIdentitiesAndCriticalDevices
tablo oluşturur. - Liste, yalnızca ve kenar etiketlerine
Can Authenticate As
CanRemoteInteractiveLogonTo
sahip 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-graph
vegraph-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