Udostępnij za pośrednictwem


Wykonywanie zapytań dotyczących wykresu narażenia przedsiębiorstwa

Użyj wykresu narażenia przedsiębiorstwa w usłudze Microsoft Security Exposure Management , aby proaktywnie wyszukiwać zagrożenia narażenia przedsiębiorstwa w zaawansowanym wyszukiwaniu zagrożeń w portalu usługi Microsoft Defender.

Ten artykuł zawiera kilka przykładów, porad i wskazówek dotyczących konstruowania zapytań na grafie narażenia przedsiębiorstwa.

Usługa Security Exposure Management jest obecnie dostępna w publicznej wersji zapoznawczej.

Ważna

Niektóre informacje zawarte w tym artykule odnoszą się do wersji wstępnej produktu, który może zostać znacznie zmodyfikowany do czasu wydania wersji komercyjnej. Firma Microsoft nie udziela żadnych gwarancji, wyrażonych ani dorozumianych, w odniesieniu do informacji podanych tutaj.

Wymagania wstępne

Tworzenie zaawansowanych zapytań dotyczących wyszukiwania zagrożeń

Korzystanie z operatora make-graph

Operator kusto make-graph ładuje węzły i krawędzie danych do pamięci.

  • Ponieważ usługa Kusto ładuje tylko używane kolumny, nie trzeba jawnie wybierać kolumn.
  • Jednak kolumna NodeProperties zawiera wszystkie informacje o węźle i tak jest duża.
  • W większości scenariuszy warto wyodrębnić tylko informacje wymagane przed wprowadzeniem ich do make-graph operatora.

Przykład

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

Używanie kolumn dynamicznych i inteligentnego indeksowania

NodeProperties i Categories to kolumny dynamiczne.

  • Kusto wie, że te kolumny zawierają zawartość podobną do json i stosuje inteligentne indeksowanie.
  • Jednak nie wszystkie operatory Kusto używają indeksu. Na przykład set_has_elementisemptyisnotnull , nie używaj indeksu, gdy są one stosowane do kolumny dynamicznej i isnotnull(Properties["containsSensitiveData"] nie używają indeksu.
  • Zamiast tego użyj has() operatora, który zawsze używa indeksu.

Przykład

W poniższym zapytaniu has operator sprawdza data ciąg i set_has_element sprawdza data element.

Używanie obu operatorów jest ważne, has() ponieważ operator zwraca wartość true nawet dla kategorii prefix_data.

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

Dowiedz się więcej o zrozumieniu terminów ciągów.

Przykładowe zapytania dotyczące ekspozycji

Poniższe przykłady mogą pomóc w pisaniu zapytań w celu zrozumienia danych dotyczących ekspozycji na zabezpieczenia w dzierżawie.

Wyświetlanie listy wszystkich etykiet węzłów w dzierżawie

Poniższe zapytanie grupuje dane w tabeli i używa operatora Kusto summarize do wyświetlenia ich w NodeLabelkolumnie ExposureGraphNodes .

ExposureGraphNodes
| summarize by NodeLabel

Wyświetlanie listy wszystkich etykiet krawędzi w dzierżawie

Poniższe zapytanie grupuje dane w ExposureGraphEdges tabeli i używa operatora kusto do wyświetlania summarize ich na liście według etykiet krawędzi (EdgeLabel).

ExposureGraphEdges
| summarize by EdgeLabel

Wyświetl listę wszystkich połączeń z określonej etykiety węzła

Poniższe zapytanie grupuje dane w ExposureGraphEdges tabeli, a gdzie etykieta węzła źródłowego to microsoft.compute/virtualmachines, podsumowuje maszynę wirtualną według EdgeLabel. Podsumowuje krawędzie łączące zasoby z maszynami wirtualnymi na grafie narażenia na zabezpieczenia.

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

Wyświetl listę wszystkich połączeń z określoną etykietą węzła

Poniższe zapytanie zawiera podsumowanie krawędzi łączących maszyny wirtualne z innymi zasobami wykresu narażenia na zabezpieczenia. Grupuje ona dane w ExposureGraphEdges tabeli i gdzie etykieta węzła docelowego to microsoft.compute/virtualmachines, używa operatora Kusto do wyświetlenia etykiety węzła summarize docelowego według EdgeLabel.

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

Wyświetlanie listy właściwości określonej etykiety węzła

Poniższe zapytanie zawiera listę właściwości etykiety węzła maszyny wirtualnej. Grupuje ona dane w ExposureGraphNodes tabeli, filtrowane w celu wyświetlenia tylko wyników etykiety węzła "microsoft.compute/virtualmachines". Za pomocą project-keep operatora zapytanie przechowuje kolumnę NodeProperties . Zwrócone dane są ograniczone do jednego wiersza.

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

Wykonywanie zapytań dotyczących wykresu ekspozycji

Aby wykonać zapytanie dotyczące wykresu narażenia:

  1. W portalu usługi Microsoft Defender wybierz pozycję Wyszukiwanie zagrożeń —> zaawansowane wyszukiwanie zagrożeń.

  2. W obszarze Zapytanie wpisz zapytanie. Użyj schematu grafu, funkcji i tabel operatorów lub poniższych przykładów, aby ułatwić tworzenie zapytania.

  3. Wybierz pozycję Uruchom zapytanie.

Przykłady zapytań zorientowanych na grafy

Użyj tych przykładów zapytań zorientowanych na grafy, aby ułatwić pisanie zapytań dotyczących lepszej ekspozycji na zabezpieczenia. W przykładach wyszukiwane są wzorce umożliwiające uwidocznienie relacji między jednostkami, które mogą odkryć ryzyko. Pokazują one, jak skorelować kontekst z sygnałami zdarzenia/alertu.

Wyświetlanie listy wszystkich etykiet węzłów z krawędzią do określonej etykiety węzła

Poniższe zapytanie powoduje wyświetlenie listy wszystkich etykiet węzłów przychodzących z łącznikiem do etykiety węzła maszyny wirtualnej. Tworzy strukturę grafu przez mapowanie SourceNodeId danych kolumn w ExposureGraphEdges tabeli na TargetNodeId kolumnę w ExposureGraphNodes tabeli za pomocą make-graph operatora w celu utworzenia struktury grafów.

Następnie używa graph-match operatora do utworzenia wzorca grafu, w którym węzeł TargetNode docelowy jest zgodny microsoft.compute/virtualmachinesz NodeLabel . Operator project służy do przechowywania tylko obiektu IncomingNodeLabels. Wyświetla wyniki według 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

Wyświetl listę wszystkich etykiet węzłów, które tworzy etykietę określonego węzła

Poniższe zapytanie powoduje wyświetlenie listy wszystkich etykiet węzłów wychodzących z łącznikiem do etykiety węzła maszyny wirtualnej.

  • Tworzy strukturę grafów przez mapowanie SourceNodeId kolumny, która używa danych w ExposureGraphEdges tabeli do TargetNodeId kolumny w ExposureGraphNodes tabeli przy użyciu make-graph operatora w celu utworzenia struktury grafu.
  • Następnie używa graph-match operatora do dopasowania wzorca wykresu do miejsca SourceNode i NodeLabel dopasowania microsoft.compute/virtualmachines.
  • Operator project służy do przechowywania tylko obiektu OutgoingNodeLabels. Wyświetla wyniki według 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

Odnajdywanie maszyn wirtualnych uwidocznionych w Internecie z luką w zabezpieczeniach RCE

Poniższe zapytanie umożliwia odnajdywanie maszyn wirtualnych uwidocznionych w Internecie i luki w zabezpieczeniach zdalnego wykonywania kodu (RCE).

  • Używa tabeli schematu ExposureGraphNodes .
  • Gdy obie NodePropertiesexposedToInternet wartości i vulnerableToRCE są prawdziwe, sprawdza, czy kategoria (Categories) to maszyny wirtualne (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")

Odnajdywanie urządzeń z Dostępem do Internetu z luką w zabezpieczeniach dotyczącą eskalacji uprawnień

Poniższe zapytanie szuka urządzeń dostępnych z Internetu narażonych na lukę w zabezpieczeniach dotyczącą eskalacji uprawnień, która może zezwalać na dostęp do uprawnień wyższego poziomu w systemie.

  • Używa tabeli schematu ExposureGraphNodes .
  • Gdy NodeProperties zapytanie ma połączenie z Internetem (IsInternetFacing) i VulnerableToPrivilegeEscalation, sprawdza, czy elementy w programie są faktycznie Categories urządzeniami (device).
ExposureGraphNodes
| where isnotnull(NodeProperties.rawData.IsInternetFacing)
| where isnotnull(NodeProperties.rawData.VulnerableToPrivilegeEscalation)
| where set_has_element(Categories, "device")

Pokaż wszystkich użytkowników zalogowanych na więcej niż jednym urządzeniu krytycznym

To zapytanie powoduje wyświetlenie listy użytkowników zalogowanych na więcej niż jednym urządzeniu krytycznym wraz z liczbą urządzeń, na których są zalogowani.

  • Tworzy tabelę IdentitiesAndCriticalDevices przy użyciu ExposureGraphNodes danych filtrowanych według urządzeń o poziomie krytyczności powyżej 4 lub .identity
  • Następnie tworzy strukturę grafu z operatorem make-graph , gdzie EdgeLabel jest Can Authenticate As.
  • Używa graph-match operatora do dopasowania wystąpień, w device których element jest zgodny z elementem identity.
  • Następnie używa project operatora do przechowywania identyfikatorów tożsamości i identyfikatorów urządzeń.
  • Operator mv-apply filtruje identyfikatory urządzeń i identyfikatory tożsamości według typu. Podsumowuje je i wyświetla wyniki w tabeli z nagłówkami , Number Of devices user is logged-in toi 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

Pokaż urządzenia klienckie z krytyczną luką w zabezpieczeniach/użytkownikami, którzy mają dostęp do serwerów o wysokiej wartości

Poniższe zapytanie powoduje wyświetlenie listy urządzeń z lukami w zabezpieczeniach RCE oraz ich identyfikatorów urządzeń oraz urządzeń z wysokimi krytycznymi lukami w zabezpieczeniach i identyfikatorami urządzeń.

  • Tworzy tabelę zawierającą IdentitiesAndCriticalDevices urządzenia (device) z lukami w zabezpieczeniach RCE o krytycznym znaczeniu niższym niż cztery oraz tożsamości (identity), które za pomocą filtrowania i dopasowywania wzorców pokazują urządzenia z krytycznymi lukami w zabezpieczeniach.
  • Lista jest filtrowana w celu wyświetlenia tylko tych połączeń, które mają etykiety Can Authenticate As krawędzi i CanRemoteInteractiveLogonTo.
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

Podaj wszystkie ścieżki z określonego identyfikatora węzła do węzła z określoną etykietą

To zapytanie wyświetla ścieżkę z określonego węzła IP, przechodząc przez maksymalnie trzy zasoby, które skutkują połączeniem z etykietą węzła maszyny wirtualnej.

  • ExposureGraphNodes Używa ona tabel i ExposureGraphEdges schematów make-graph oraz operatorów i graph-match do utworzenia struktury grafów.
  • project Operator wyświetla listę identyfikatorów IP, właściwości adresów IP, identyfikatorów maszyn wirtualnych i właściwości maszyny wirtualnej.
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

Następne kroki

Zapoznaj się z mapą obszaru ataków.