Unternehmensgefährdungsdiagramm abfragen

Verwenden Sie den Unternehmens-Expositionsgraphen in Microsoft Security Exposure Management, um in advanced hunting im Microsoft Defender-Portal proaktiv Bedrohungen durch Unternehmensrisiken über Endpunkte, Cloudumgebungen und hybride Infrastrukturen hinweg aufzuspüren. Mit der Integration von Defender für Cloud in das Defender-Portal umfasst das Expositionsdiagramm jetzt Cloudknotentypen und Entitäten aus Azure-, AWS- und GCP-Umgebungen.

Die folgenden Abschnitte enthalten Beispiele, Tipps und Hinweise zum Erstellen von Abfragen im Belichtungsdiagramm für Unternehmen.

Voraussetzungen

Erweiterte Suchabfragen erstellen

Verwenden Sie den Make-Graph-Operator

Der make-graph-Operator von Kusto lädt Knoten- und Kantendaten 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. Zum Beispiel verwenden set_has_element, isempty und isnotnull den Index nicht, wenn sie auf eine dynamische Spalte angewendet werden, und isnotnull(Properties["containsSensitiveData"] verwendet den Index nicht.
  • 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.

Beispiele für Gefährdungsabfragen

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

Alle Knotenbezeichnungen in Ihrem Mandanten auflisten

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

ExposureGraphNodes
| summarize by NodeLabel

Alle Edge-Bezeichnungen in Ihrem Mandanten auflisten

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

Alle Verbindungen von einem Knoten mit einer angegebenen Bezeichnung auflisten

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. Mit der Integration von Defender für Cloud in das Defender-Portal umfasst dies jetzt Cloudressourcen aus mehreren Umgebungen.

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

Auflisten aller Verbindungen mit einer bestimmten Knotenbezeichnung

Die folgende Abfrage fasst Kanten zusammen, die virtuelle Maschinen mit anderen Ressourcen des Sicherheitsrisikographen 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. Mit der Integration von Defender für Cloud im Defender-Portal enthalten die NodeProperties jetzt zusätzliche cloudspezifische Attribute und Beziehungen.

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

Beispiel: Abfragen von Cloudressourcen in mehreren Umgebungen

Die folgende Abfrage zeigt, wie Sie Cloudressourcen aus verschiedenen Umgebungen abfragen, die jetzt mit der Integration von Defender für Cloud im Defender-Portal verfügbar sind:

ExposureGraphNodes
| where NodeLabel contains "microsoft.compute" or NodeLabel contains "aws." or NodeLabel contains "gcp."
| summarize count() by NodeLabel
| order by count_ desc

Belichtungsgrafik abfragen

So fragen Sie das Belichtungsdiagramm ab:

  1. Wählen Sie im Microsoft Defender-Portaldie 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 graphbasierten Abfragebeispiele, um bessere Abfragen zu Sicherheitsrisiken 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.

Alle Knotenbezeichnungen auflisten, die mit einer bestimmten Knotenbezeichnung durch eine Kante verbunden sind

Die folgende Abfrage ergibt eine Liste aller Bezeichnungen eingehender Knoten mit einem Connector zur Knotenbezeichnung der virtuellen Maschine. Es erstellt eine Graphstruktur, indem die Spaltendaten aus der SourceNodeId-Spalte in der ExposureGraphEdges-Tabelle mit dem Operator TargetNodeId der ExposureGraphNodes-Spalte in der make-graph-Tabelle 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 IncomingNodeLabels aufgelistet.

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

Alle Knotenlabels auflisten, die an ein bestimmtes Knotenlabel angrenzen

Die folgende Abfrage ergibt eine Liste aller ausgehenden Knotenbezeichnungen mit einer Verbindung zur Knotenbezeichnung der virtuellen Maschine.

  • 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 OutgoingNodeLabels aufgelistet.
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 über das Internet erreichbar sind und eine RCE-Schwachstelle aufweisen

Mit der folgenden Abfrage können Sie virtuelle Maschinen identifizieren, die dem Internet ausgesetzt und in Cloudumgebungen für eine Schwachstelle zur Remotecodeausführung (RCE) anfällig sind.

  • Sie verwendet die ExposureGraphNodes Schematabelle.
  • Wenn sowohl NodePropertiesexposedToInternet als auch vulnerableToRCE wahr sind, wird überprüft, ob die Kategorie (Categories) virtuelle Maschinen (virtual_machine) ist.
  • Mit der Integration von Defender für Cloud in das Defender-Portal umfasst dies jetzt VMs aus Azure-, AWS- und GCP-Umgebungen.
ExposureGraphNodes
| where isnotnull(NodeProperties.rawData.exposedToInternet)
| where isnotnull(NodeProperties.rawData.vulnerableToRCE)
| where Categories has "virtual_machine" and set_has_element(Categories, "virtual_machine")

Beispiel: Suchen von Hybridangriffspfaden zwischen Cloud- und lokalen Ressourcen

Die folgende Abfrage veranschaulicht, wie Potenzielle Hybridangriffspfade mit der Integration von Defender für Cloud im Defender-Portal identifiziert werden:

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

Erkennen von über das Internet erreichbaren Geräten mit einer Schwachstelle zur 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 über das Internet erreichbar (IsInternetFacing) als auch VulnerableToPrivilegeEscalation ist, überprüft die Abfrage, ob es sich bei den Elementen in Categories tatsächlich um Geräte (device) handelt.
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 unter Verwendung von ExposureGraphNodes-Daten, die entweder nach Geräten mit einer Kritikalitätsstufe über 4 oder nach identity gefiltert werden.
  • Anschließend wird eine Graphstruktur mit dem make-graph-Operator erstellt, wobei EdgeLabelCan Authenticate As ist.
  • Es verwendet den graph-match-Operator, um Instanzen abzugleichen, bei denen ein device mit einem identity übereinstimmt.
  • 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 die Kantenbeschriftungen Can Authenticate As und CanRemoteInteractiveLogonTo aufweisen.
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

Alle Pfade von einer bestimmten Knoten-ID zu einem Knoten mit einem bestimmten Label ausgeben

Diese Abfrage zeigt den Pfad von einem bestimmten IP-Knoten aus an, der über bis zu drei Assets zu einer Verbindung mit der VM-Knotenbezeichnung führt.

  • Es verwendet die ExposureGraphNodes und ExposureGraphEdges Schema-Tabellen sowie die make-graph und graph-match Operatoren, 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.