Abfragen des Enterprise-Expositionsdiagramms

Verwenden Sie das Enterprise-Expositionsdiagramm in Microsoft Security Exposure Management , um proaktiv nach Bedrohungen für Unternehmensexposition bei der erweiterten Suche im Microsoft Defender-Portal zu suchen.

Dieser Artikel enthält einige Beispiele, Tipps und Hinweise zum Erstellen von Abfragen im Enterprise Exposure Graph.

Die Sicherheitsrisikoverwaltung befindet sich derzeit in der öffentlichen Vorschauphase.

Wichtig

Einige Informationen in diesem Artikel beziehen sich auf ein vorab veröffentlichtes Produkt, das vor der kommerziellen Veröffentlichung möglicherweise erheblich geändert wird. Microsoft übernimmt in Bezug auf die hier bereitgestellten Informationen keine Gewährleistung, weder ausdrücklich noch konkludent.

Voraussetzungen

Erstellen erweiterter Suchabfragen

Verwenden des Make-Graph-Operators

Der Operator von make-graph Kusto lädt Knoten und Edgedaten in den Arbeitsspeicher.

  • Da Kusto nur die spalten lädt, die verwendet werden, ist es nicht erforderlich, Spalten explizit auszuwählen.
  • Die NodeProperties Spalte enthält jedoch alle Knoteninformationen und ist daher groß.
  • In den meisten Szenarien ist es hilfreich, nur die erforderlichen Informationen zu extrahieren, bevor sie in den make-graph Operator eingespeist werden.

Beispiel

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

Verwenden dynamischer Spalten und intelligenter Indizierung

NodeProperties und Categories sind dynamische Spalten.

  • Kusto weiß, dass diese Spalten JSON-ähnliche Inhalte enthalten, und wendet eine intelligente Indizierung an.
  • Allerdings verwenden nicht alle Kusto-Operatoren den Index. Verwenden Sie z. Bset_has_elementisemptyisnotnull. , nicht den Index, wenn sie auf eine dynamische Spalte angewendet werden, und isnotnull(Properties["containsSensitiveData"] verwenden Sie nicht den Index.
  • Verwenden Sie stattdessen den has() -Operator, der immer den Index verwendet.

Beispiel

In der folgenden Abfrage sucht der has Operator nach der data Zeichenfolge und set_has_element nach dem data -Element.

Die Verwendung beider Operatoren ist wichtig, da der has() Operator auch für eine Kategorie prefix_datatrue zurückgibt.

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

Erfahren Sie mehr über das Verständnis von Zeichenfolgenbegriffen.

Beispielabfragen für die Belichtung

Die folgenden Beispiele können Ihnen helfen, Abfragen zu schreiben, um die Sicherheitsrisikodaten in Ihrem Mandanten zu verstehen.

Auflisten aller Knotenbezeichnungen in Ihrem Mandanten

Die folgende Abfrage gruppiert die Daten in der ExposureGraphNodes Tabelle und verwendet den Kusto-Operator summarize , um sie nach NodeLabelaufzulisten.

ExposureGraphNodes
| summarize by NodeLabel

Auflisten aller Edgebezeichnungen in Ihrem Mandanten

Die folgende Abfrage gruppiert die Daten in der ExposureGraphEdges Tabelle und verwendet den Kusto-Operator summarize , um sie nach Edgebeschriftungen (EdgeLabel) aufzulisten.

ExposureGraphEdges
| summarize by EdgeLabel

Auflisten aller Verbindungen von einer angegebenen Knotenbezeichnung

Die folgende Abfrage gruppiert die Daten in der ExposureGraphEdges Tabelle, wobei die Quellknotenbezeichnung ist microsoft.compute/virtualmachines, und fasst die des virtuellen Computers nach EdgeLabelzusammen. Es fasst die Kanten zusammen, die Ressourcen mit virtuellen Computern in Ihrem Sicherheitsrisikodiagramm verbinden.

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

Auflisten aller Verbindungen mit einer bestimmten Knotenbezeichnung

Die folgende Abfrage fasst Edges zusammen, die virtuelle Computer mit anderen Sicherheitsrisiko-Graphressourcen verbinden. Sie gruppiert die Daten in der ExposureGraphEdges Tabelle, und wenn die Zielknotenbezeichnung ist microsoft.compute/virtualmachines, wird der Kusto-Operator summarize verwendet, um die Zielknotenbezeichnung nach EdgeLabelaufzulisten.

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

Auflisten der Eigenschaften einer bestimmten Knotenbezeichnung

Die folgende Abfrage listet die Eigenschaften der Knotenbezeichnung des virtuellen Computers auf. Es gruppiert die Daten in der ExposureGraphNodes Tabelle, gefiltert, um nur die Ergebnisse der Knotenbezeichnung "microsoft.compute/virtualmachines" anzuzeigen. Mit dem project-keep -Operator behält die Abfrage die NodeProperties Spalte bei. Die zurückgegebenen Daten sind auf eine Zeile beschränkt.

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

Abfragen des Belichtungsdiagramms

So fragen Sie das Belichtungsdiagramm ab:

  1. Wählen Sie im Microsoft Defender-PortalDie Option Hunting –> Erweiterte Suche aus.

  2. Geben Sie im Bereich Abfrage Ihre Abfrage ein. Verwenden Sie die Diagrammschema-, Funktions- und Operatortabellen oder die folgenden Beispiele, um Ihre Abfrage zu erstellen.

  3. Wählen Sie Abfrage ausführen aus.

Beispiele für graphorientierte Abfragen

Verwenden Sie diese graphorientierten Abfragebeispiele, um Abfragen mit höherer Sicherheitsrisiko zu schreiben. Die Beispiele suchen nach Mustern, um Beziehungen zwischen Entitäten verfügbar zu machen, die Risiken aufdecken können. Sie zeigen Ihnen, wie Sie den Kontext mit Incident-/Warnungssignalen korrelieren.

Auflisten aller Knotenbezeichnungen mit einer Kante zu einer bestimmten Knotenbezeichnung

Die folgende Abfrage führt zu einer Liste aller eingehenden Knotenbezeichnungen mit einem Connector für die Knotenbezeichnung des virtuellen Computers. Es erstellt eine Graphstruktur, indem die SourceNodeId Spaltendaten in der ExposureGraphEdges Tabelle der Spalte in der TargetNodeIdExposureGraphNodes Tabelle mit dem make-graph Operator zugeordnet werden, um eine Graphstruktur zu erstellen.

Anschließend wird der graph-match -Operator verwendet, um ein Diagrammmuster zu erstellen, bei dem der Zielknoten TargetNode und NodeLabel übereinstimmen microsoft.compute/virtualmachines. Der project -Operator wird verwendet, um nur die IncomingNodeLabelsbeizubehalten. Die Ergebnisse werden nach aufgelistet 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

Auflisten aller Knotenbezeichnungen, die eine bestimmte Knotenbezeichnung edieren

Die folgende Abfrage führt zu einer Liste aller ausgehenden Knotenbezeichnungen mit einem Connector für die Knotenbezeichnung des virtuellen Computers.

  • Es erstellt eine Graphstruktur, indem die Spalte, die SourceNodeId die Daten in der ExposureGraphEdges Tabelle verwendet, der TargetNodeId Spalte in der ExposureGraphNodes Tabelle zugeordnet wird, wobei der make-graph -Operator verwendet wird, um eine Graphstruktur zu erstellen.
  • Anschließend wird der graph-match -Operator verwendet, um das Diagrammmuster abzugleichen, in dem SourceNode und NodeLabel übereinstimmen microsoft.compute/virtualmachines.
  • Der project -Operator wird verwendet, um nur die OutgoingNodeLabelsbeizubehalten. Die Ergebnisse werden nach aufgelistet 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

Ermitteln von VMs, die im Internet mit einem RCE-Sicherheitsrisiko verfügbar gemacht werden

Mit der folgenden Abfrage können Sie virtuelle Computer ermitteln, die für das Internet und eine RcE-Sicherheitslücke (Remote Code Execution, Remotecodeausführung) verfügbar sind.

  • Sie verwendet die ExposureGraphNodes Schematabelle.
  • Wenn sowohl als vulnerableToRCE auch NodePropertiesexposedToInternet true sind, wird überprüft, ob die Kategorie (Categories) virtuelle Computer (virtual_machine) ist.
ExposureGraphNodes
| where isnotnull(NodeProperties.rawData.exposedToInternet)
| where isnotnull(NodeProperties.rawData.vulnerableToRCE)
| where Categories has "virtual_machine" and set_has_element(Categories, "virtual_machine")

Ermitteln von Geräten mit Internetzugriff mit einem Sicherheitsrisiko bei der Rechteausweitung

Die folgende Abfrage sucht nach Geräten mit Internetzugriff, die einem Sicherheitsrisiko aufgrund einer Berechtigungsausweitung ausgesetzt sind, die den Zugriff auf Berechtigungen auf höherer Ebene innerhalb des Systems ermöglichen könnte.

  • Sie verwendet die ExposureGraphNodes Schematabelle.
  • Wenn NodeProperties sowohl mit dem Internet (IsInternetFacing) VulnerableToPrivilegeEscalationals auch ist, überprüft die Abfrage, ob die Elemente in Categories tatsächlich Geräte (device) sind.
ExposureGraphNodes
| where isnotnull(NodeProperties.rawData.IsInternetFacing)
| where isnotnull(NodeProperties.rawData.VulnerableToPrivilegeEscalation)
| where set_has_element(Categories, "device")

Anzeigen aller Benutzer, die bei mehr als einem kritischen Gerät angemeldet sind

Diese Abfrage führt zu einer Liste von Benutzern, die bei mehr als einem kritischen Gerät angemeldet sind, zusammen mit der Anzahl der Geräte, bei denen sie angemeldet sind.

  • Es erstellt eine IdentitiesAndCriticalDevices Tabelle mithilfe von ExposureGraphNodes Daten, die entweder nach Geräten mit einer Wichtigkeitsstufe über 4 oder nach gefiltert werden identity.
  • Anschließend wird eine Graphstruktur mit dem make-graph -Operator erstellt, wobei ist EdgeLabelCan Authenticate As.
  • Es verwendet den graph-match -Operator, um Instanzen abzugleichen, bei denen ein device mit übereinstimmt identity.
  • Anschließend wird der project Operator verwendet, um Identitäts-IDs und Geräte-IDs beizubehalten.
  • Der mv-apply Operator filtert Geräte-IDs und Identitäts-IDs nach Typ. Sie fasst sie zusammen und zeigt die Ergebnisse in einer Tabelle mit den Überschriften , Number Of devices user is logged-in tound User Idan.
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

Anzeigen von Clientgeräten mit einer kritischen Sicherheitslücke/Benutzern, die Zugriff auf server mit hohem Wert haben

Die folgende Abfrage führt zu einer Liste von Geräten mit RCE-Sicherheitsrisiken und deren Geräte-IDs sowie Geräten mit hohen kritischen Sicherheitsrisiken und deren Geräte-IDs.

  • Es wird eine IdentitiesAndCriticalDevices Tabelle erstellt, die Geräte (device) mit RCE-Sicherheitsrisiken mit einer Wichtigkeit von weniger als vier und Identitäten (identity) enthält, die geräte mit kritischen Sicherheitsrisiken durch Filterung und Musterabgleich anzeigen.
  • Die Liste wird so gefiltert, dass nur die Verbindungen angezeigt werden, die Edgebeschriftungen Can Authenticate As und aufweisen 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

Bereitstellen aller Pfade von einer bestimmten Knoten-ID zu einem Knoten mit einer bestimmten Bezeichnung

Diese Abfrage zeigt den Pfad von einem bestimmten IP-Knoten an und durchläuft bis zu drei Ressourcen, die zu einer Verbindung mit der Vm-Knotenbezeichnung führen.

  • Es verwendet die ExposureGraphNodes Schematabellen und ExposureGraphEdges die make-graph Operatoren und graph-match , um eine Graphstruktur zu erstellen.
  • Mit dem project Operator wird eine Liste der IP-IDs, IP-Eigenschaften, VM-IDs und VM-Eigenschaften angezeigt.
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

Nächste Schritte

Erkunden Sie die Angriffsfläche mit der Karte.