Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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
- Erfahren Sie mehr über die Verwaltung der Angriffsfläche.
- Überprüfen Sie die erforderlichen Berechtigungen für die Arbeit mit dem Graphen.
Erweiterte Suchabfragen erstellen
- Überprüfen bewährter Methoden zum Erstellen erweiterter Huntingabfragen
- Erste Schritte mit Kusto-Abfragesprache (KQL)
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
NodePropertiesSpalte 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-graphOperator 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,isemptyundisnotnullden Index nicht, wenn sie auf eine dynamische Spalte angewendet werden, undisnotnull(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:
Wählen Sie im Microsoft Defender-Portaldie Erweiterte Suche aus>.
Geben Sie im Bereich Abfrage Ihre Abfrage ein. Verwenden Sie die Diagrammschema-, Funktions- und Operatortabellen oder die folgenden Beispiele, um Ihre Abfrage zu erstellen.
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
SourceNodeIddie Daten in derExposureGraphEdgesTabelle verwendet, derTargetNodeIdSpalte in derExposureGraphNodesTabelle zugeordnet wird, wobei dermake-graph-Operator verwendet wird, um eine Graphstruktur zu erstellen. - Anschließend wird der
graph-match-Operator verwendet, um das Diagrammmuster abzugleichen, in demSourceNodeundNodeLabelübereinstimmenmicrosoft.compute/virtualmachines. - Der
project-Operator wird verwendet, um nur dieOutgoingNodeLabelsbeizubehalten. Die Ergebnisse werden nachOutgoingNodeLabelsaufgelistet.
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
ExposureGraphNodesSchematabelle. - Wenn sowohl
NodePropertiesexposedToInternetals auchvulnerableToRCEwahr 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
ExposureGraphNodesSchematabelle. - Wenn
NodePropertiessowohl über das Internet erreichbar (IsInternetFacing) als auchVulnerableToPrivilegeEscalationist, überprüft die Abfrage, ob es sich bei den Elementen inCategoriestatsä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 vonExposureGraphNodes-Daten, die entweder nach Geräten mit einer Kritikalitätsstufe über 4 oder nachidentitygefiltert werden. - Anschließend wird eine Graphstruktur mit dem
make-graph-Operator erstellt, wobeiEdgeLabelCan Authenticate Asist. - Es verwendet den
graph-match-Operator, um Instanzen abzugleichen, bei denen eindevicemit einemidentityübereinstimmt. - Anschließend wird der
projectOperator verwendet, um Identitäts-IDs und Geräte-IDs beizubehalten. - Der
mv-applyOperator 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 toundUser 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
IdentitiesAndCriticalDevicesTabelle 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 AsundCanRemoteInteractiveLogonToaufweisen.
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
ExposureGraphNodesundExposureGraphEdgesSchema-Tabellen sowie diemake-graphundgraph-matchOperatoren, um eine Graphstruktur zu erstellen. - Mit dem
projectOperator 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