Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Use el gráfico de exposición empresarial de Administración de exposición de seguridad Microsoft para buscar de forma proactiva amenazas de exposición empresarial en puntos de conexión, entornos en la nube e infraestructuras híbridas en la búsqueda avanzada en el portal de Microsoft Defender. Con la integración de Defender for Cloud en el portal de Defender, el gráfico de exposición ahora incluye tipos de nodos en la nube y entidades de entornos de Azure, AWS y GCP.
En las secciones siguientes se proporcionan ejemplos, sugerencias y sugerencias para construir consultas en el gráfico de exposición empresarial.
Requisitos previos
- Obtenga información sobre la administración de la superficie expuesta a ataques.
- Revise los permisos necesarios para trabajar con el gráfico.
Creación de consultas de búsqueda avanzadas
- Revisión de los procedimientos recomendados para crear consultas de búsqueda avanzadas
- Introducción a Lenguaje de consulta Kusto (KQL)
Uso del operador make-graph
El operador make-graph de Kusto carga en memoria los datos de nodos y aristas.
- Dado que Kusto solo carga las columnas que están en uso, no es necesario seleccionar columnas explícitamente.
- Sin embargo, la columna contiene toda la
NodePropertiesinformación del nodo, por lo que es grande. - En la mayoría de los escenarios, es útil extraer solo la información necesaria antes de introducirla en el
make-graphoperador.
Ejemplo
let FilteredNodes = ExposureGraphNodes
| extend ContainsSensetiveData = NodeProperties has "containsSensitiveData"
| project Id, ContainsSensetiveData, Label, EntityIds, Categories;
Edges
| make-graph SourceNodeId --> TargetNodeId with FilteredNodes on Id
..
Uso de columnas dinámicas e indexación inteligente
NodeProperties y Categories son columnas dinámicas.
- Kusto sabe que esas columnas contienen contenido similar a json y aplica la indexación inteligente.
- Sin embargo, no todos los operadores de Kusto usan el índice. Por ejemplo,
set_has_element,isempty,isnotnullno usan el índice cuando se aplican a una columna dinámica, yisnotnull(Properties["containsSensitiveData"]no usa el índice. - En su lugar, use el
has()operador , que siempre usa el índice.
Ejemplo
En la consulta siguiente, el has operador busca la data cadena y set_has_element comprueba el data elemento .
El uso de ambos operadores es importante, ya que el has() operador devuelve true incluso para una categoría prefix_data.
Categories has('data') and set_has_element(Categories, 'data')
Obtenga más información sobre la comprensión de los términos de cadena.
Consultas de ejemplo sobre exposición
Los siguientes ejemplos pueden ayudarle a escribir consultas para comprender los datos sobre la exposición de seguridad de su tenant.
Enumerar todas las etiquetas de nodo de su inquilino
La siguiente consulta agrupa los datos de la tabla ExposureGraphNodes y utiliza el operador summarize de Kusto para enumerarlos por NodeLabel.
ExposureGraphNodes
| summarize by NodeLabel
Enumerar todas las etiquetas de borde de su inquilino
La consulta siguiente agrupa los datos de la tabla y usa el ExposureGraphEdges operador de summarize Kusto para enumerarlos por etiquetas perimetrales (EdgeLabel).
ExposureGraphEdges
| summarize by EdgeLabel
Enumerar todas las conexiones de una etiqueta de nodo especificada
La siguiente consulta agrupa los datos de la tabla ExposureGraphEdges y, cuando la etiqueta del nodo de origen es microsoft.compute/virtualmachines, resume los datos de la máquina virtual por EdgeLabel. Resume los bordes que conectan los recursos a las máquinas virtuales en el gráfico de exposición de seguridad. Con la integración de Defender for Cloud en el portal de Defender, ahora incluye recursos en la nube de varios entornos.
ExposureGraphEdges
| where SourceNodeLabel == "microsoft.compute/virtualmachines"
| summarize by EdgeLabel
Enumerar todas las conexiones a una etiqueta de nodo específica
La siguiente consulta resume las aristas que conectan las máquinas virtuales con otros recursos del grafo de exposición de seguridad. Agrupa los datos en la tabla ExposureGraphEdges y, cuando la etiqueta del nodo de destino es microsoft.compute/virtualmachines, usa el operador summarize de Kusto para enumerar la etiqueta del nodo de destino por EdgeLabel.
ExposureGraphEdges
| where TargetNodeLabel == "microsoft.compute/virtualmachines"
| summarize by EdgeLabel
Enumerar las propiedades de una etiqueta de nodo específica
En la consulta siguiente se enumeran las propiedades de la etiqueta de nodo de máquina virtual. Agrupa los datos de la ExposureGraphNodes tabla, filtrados para mostrar solo los resultados de la etiqueta de nodo "microsoft.compute/virtualmachines". Con el project-keep operador , la consulta mantiene la NodeProperties columna. Los datos devueltos están limitados a una fila. Con la integración de Defender for Cloud en el portal de Defender, nodeProperties ahora incluye atributos y relaciones adicionales específicos de la nube.
ExposureGraphNodes
| where NodeLabel == "microsoft.compute/virtualmachines"
| project-keep NodeProperties
| take 1
Ejemplo: Consulta de recursos en la nube en varios entornos
En la consulta siguiente se muestra cómo consultar recursos en la nube de diferentes entornos ahora disponibles con la integración de Defender for Cloud en el portal de Defender:
ExposureGraphNodes
| where NodeLabel contains "microsoft.compute" or NodeLabel contains "aws." or NodeLabel contains "gcp."
| summarize count() by NodeLabel
| order by count_ desc
Consultar el gráfico de exposición
Para consultar el gráfico de exposición:
En el portal de Microsoft Defender, seleccione Búsqueda > avanzada de búsqueda.
En el área Consulta, escriba la consulta. Use el esquema de grafos, las funciones y las tablas de operadores o los ejemplos siguientes para ayudarle a compilar la consulta.
Seleccione Ejecutar consulta.
Ejemplos de consultas orientadas a gráficos
Use estos ejemplos de consulta orientados a gráficos para ayudarle a escribir consultas de exposición de seguridad mejores. Los ejemplos buscan patrones para exponer las relaciones entre entidades que pueden descubrir riesgos. Le muestran cómo correlacionar el contexto con las señales de incidentes o alertas.
Enumerar todas las etiquetas de nodos que tengan una arista hacia una etiqueta de nodo específica
La consulta siguiente da como resultado una lista de todas las etiquetas de nodo entrantes con un conector a la etiqueta de nodo de máquina virtual. Crea una estructura de grafo asignando los datos de la columna SourceNodeId de la tabla ExposureGraphEdges a la columna TargetNodeId de la tabla ExposureGraphNodes con el operador make-graph para construir una estructura de grafo.
A continuación, utiliza el operador graph-match para crear un patrón de grafo en el que el nodo de destino TargetNode y NodeLabel coinciden con microsoft.compute/virtualmachines. El operador project se utiliza para conservar únicamente el IncomingNodeLabels. Enumera los resultados por 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
Enumerar todas las etiquetas de nodo que están conectadas a una etiqueta de nodo específica
La siguiente consulta genera una lista de todas las etiquetas de nodo salientes que tienen un conector con la etiqueta de nodo de la máquina virtual.
- Construye una estructura de grafo asignando la columna
SourceNodeId, que usa los datos de la tablaExposureGraphEdges, a la columnaTargetNodeIdde la tablaExposureGraphNodesmediante el operadormake-graphpara construir una estructura de grafo. - A continuación, usa el operador
graph-matchpara hacer coincidir el patrón del grafo dondeSourceNodeyNodeLabelcoinciden conmicrosoft.compute/virtualmachines. - El operador
projectse utiliza para conservar únicamente elOutgoingNodeLabels. Enumera los resultados porOutgoingNodeLabels.
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
Detección de máquinas virtuales expuestas a Internet con una vulnerabilidad de RCE
La consulta siguiente permite detectar máquinas virtuales expuestas a Internet y a una vulnerabilidad de ejecución remota de código (RCE) en entornos de nube.
- Usa la tabla de esquemas
ExposureGraphNodes. - Cuando ambos
NodePropertiesexposedToInternetyvulnerableToRCEson verdaderos, comprueba que la categoría (Categories) sea máquinas virtuales (virtual_machine). - Con la integración de Defender for Cloud en el portal de Defender, ahora incluye máquinas virtuales de entornos de Azure, AWS y GCP.
ExposureGraphNodes
| where isnotnull(NodeProperties.rawData.exposedToInternet)
| where isnotnull(NodeProperties.rawData.vulnerableToRCE)
| where Categories has "virtual_machine" and set_has_element(Categories, "virtual_machine")
Ejemplo: Búsqueda de rutas de ataque híbridas entre recursos locales y en la nube
En la consulta siguiente se muestra cómo identificar posibles rutas de ataque híbridas con la integración de Defender for Cloud en el portal de Defender:
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
Detección de dispositivos accesibles desde Internet con una vulnerabilidad de escalado de privilegios
La consulta siguiente busca dispositivos accesibles desde Internet expuestos a una vulnerabilidad de elevación de privilegios, lo que podría permitir el acceso a privilegios de nivel superior dentro del sistema.
- Usa la tabla de esquemas
ExposureGraphNodes. - Cuando
NodePropertiesestá orientado a Internet (IsInternetFacing) yVulnerableToPrivilegeEscalation, la consulta comprueba que los elementos deCategoriesson realmente dispositivos (device).
ExposureGraphNodes
| where isnotnull(NodeProperties.rawData.IsInternetFacing)
| where isnotnull(NodeProperties.rawData.VulnerableToPrivilegeEscalation)
| where set_has_element(Categories, "device")
Mostrar todos los usuarios que han iniciado sesión en más de un dispositivo crítico
Esta consulta da como resultado una lista de usuarios que han iniciado sesión en más de un dispositivo crítico, junto con el número de dispositivos en los que han iniciado sesión.
- Crea una tabla
IdentitiesAndCriticalDevicesutilizando datos deExposureGraphNodesfiltrados ya sea por dispositivos con un nivel de criticidad superior a 4 o poridentity. - A continuación, crea una estructura de gráfico con el
make-graphoperador , dondeEdgeLabelesCan Authenticate As. - Usa el
graph-matchoperador para hacer coincidir las instancias en las que undevicecoincide con unidentity. - A continuación, usa el
projectoperador para mantener los identificadores de identidad y los identificadores de dispositivo. - El
mv-applyoperador filtra los identificadores de dispositivo y los identificadores de identidad por tipo. Los resume y muestra los resultados en una tabla con los encabezados ,Number Of devices user is logged-in toyUser 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
Mostrar dispositivos cliente con una vulnerabilidad crítica o usuarios que tienen acceso a servidores de alto valor
La consulta siguiente da como resultado una lista de dispositivos con vulnerabilidades de RCE y sus identificadores de dispositivo, y dispositivos con vulnerabilidades críticas elevadas y sus identificadores de dispositivo.
- Crea una
IdentitiesAndCriticalDevicestabla que incluye dispositivos (device) con vulnerabilidades de RCE con una importancia crítica inferior a cuatro e identidades (identity) que, con el filtrado y la coincidencia de patrones, muestran dispositivos con vulnerabilidades críticas. - La lista se filtra para mostrar solo las conexiones que tienen etiquetas perimetrales
Can Authenticate AsyCanRemoteInteractiveLogonTo.
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
Proporcionar todas las rutas de acceso desde un identificador de nodo específico a un nodo con una etiqueta específica
Esta consulta muestra la ruta desde un nodo IP específico, pasando por hasta tres recursos, que da lugar a una conexión con la etiqueta del nodo de máquina virtual.
- Usa las
ExposureGraphNodestablas de esquema yExposureGraphEdgesy losmake-graphoperadores ygraph-matchpara crear una estructura de grafos. - Con el
projectoperador , muestra una lista de identificadores IP, propiedades IP, identificadores de máquina virtual y propiedades de máquina virtual.
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