Compartilhar via


Consultar o gráfico de exposição empresarial

Utilize o gráfico de exposição empresarial na Gestão de Exposição de Segurança da Microsoft para procurar proativamente ameaças de exposição empresarial na investigação avançada no portal do Microsoft Defender.

Este artigo fornece alguns exemplos, sugestões e sugestões para construir consultas no gráfico de exposição empresarial.

A Gestão da Exposição à Segurança está atualmente em pré-visualização pública.

Importante

Algumas informações neste artigo estão relacionadas ao produto pré-lançado que pode ser modificado substancialmente antes de ser lançado comercialmente. A Microsoft não oferece garantias, expressas ou implícitas, com relação às informações aqui fornecidas.

Pré-requisitos

Criar consultas de investigação avançadas

Utilizar o operador make-graph

O operador do make-graph Kusto carrega nós e arestas de dados para a memória.

  • Uma vez que o Kusto só carrega as colunas que estão a ser utilizadas, não é necessário selecionar explicitamente colunas.
  • No entanto, a NodeProperties coluna contém todas as informações do nó, pelo que é grande.
  • Na maioria dos cenários, é útil extrair apenas as informações necessárias antes de as alimentar no make-graph operador.

Exemplo

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

Utilizar colunas dinâmicas e indexação inteligente

NodeProperties e Categories são colunas dinâmicas.

  • O Kusto sabe que essas colunas contêm conteúdo semelhante a json e aplica a indexação inteligente.
  • No entanto, nem todos os operadores Kusto utilizam o índice. Por exemplo, set_has_element, isemptyisnotnull , não utilize o índice quando for aplicado a uma coluna dinâmica e isnotnull(Properties["containsSensitiveData"] não utilizar o índice.
  • Em vez disso, utilize o has() operador , que utiliza sempre o índice.

Exemplo

Na consulta seguinte, o has operador verifica a data cadeia e set_has_element verifica o data elemento.

A utilização de ambos os operadores é importante, uma vez que o has() operador devolve verdadeiro mesmo para uma categoria prefix_data.

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

Saiba mais sobre como compreender os termos das cadeias de carateres.

Consultas de exposição de exemplo

Os exemplos seguintes podem ajudá-lo a escrever consultas para compreender os dados de exposição à segurança no seu inquilino.

Listar todas as etiquetas de nós no seu inquilino

A consulta seguinte agrupa os dados na tabela e utiliza o ExposureGraphNodes operador do summarize Kusto para listá-lo por NodeLabel.

ExposureGraphNodes
| summarize by NodeLabel

Listar todas as etiquetas edge no seu inquilino

A consulta seguinte agrupa os dados na tabela e utiliza o ExposureGraphEdges operador do summarize Kusto para listá-lo por etiquetas edge (EdgeLabel).

ExposureGraphEdges
| summarize by EdgeLabel

Listar todas as ligações a partir de uma etiqueta de nó especificada

A consulta seguinte agrupa os dados na ExposureGraphEdges tabela e em que a etiqueta do nó de origem é microsoft.compute/virtualmachines, resume as máquinas virtuais por EdgeLabel. Resume as arestas que ligam recursos a máquinas virtuais no gráfico de exposição de segurança.

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

Listar todas as ligações a uma etiqueta de nó específica

A consulta seguinte resume as arestas que ligam máquinas virtuais a outros recursos de gráficos de exposição de segurança. Agrupa os dados na ExposureGraphEdges tabela e onde está microsoft.compute/virtualmachinesa etiqueta do nó de destino , utiliza o operador do summarize Kusto para listar a etiqueta do nó de destino por EdgeLabel.

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

Listar propriedades de uma etiqueta de nó específica

A consulta seguinte lista as propriedades da etiqueta do nó da máquina virtual. Agrupa os dados na ExposureGraphNodes tabela, filtrados para mostrar apenas os resultados da etiqueta do nó "microsoft.compute/virtualmachines". Com o project-keep operador , a consulta mantém a NodeProperties coluna. Os dados devolvidos estão limitados a uma linha.

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

Consultar o gráfico de exposição

Para consultar o gráfico de exposição:

  1. No portal do Microsoft Defender, selecione investigação –> investigação avançada.

  2. Na área Consulta, escreva a consulta. Utilize o esquema do gráfico, as funções e as tabelas de operadores ou os seguintes exemplos para o ajudar a criar a consulta.

  3. Selecione Executar consulta.

Exemplos de consultas orientadas para gráficos

Utilize estes exemplos de consultas orientadas para gráficos para o ajudar a escrever melhores consultas de exposição à segurança. Os exemplos procuram padrões para expor relações entre entidades que podem descobrir riscos. Mostram-lhe como correlacionar o contexto com os sinais de incidente/alerta.

Listar todas as etiquetas de nós com uma margem para uma etiqueta de nó específica

A consulta seguinte resulta numa lista de todas as etiquetas de nós recebidos com um conector para a etiqueta do nó da máquina virtual. Cria uma estrutura de grafos ao mapear os dados da SourceNodeIdExposureGraphEdges coluna na tabela para a TargetNodeId coluna na ExposureGraphNodes tabela com o make-graph operador para criar uma estrutura de grafos.

Em seguida, utiliza o graph-match operador para criar um padrão de gráfico em que o nó de TargetNode destino e NodeLabel correspondem microsoft.compute/virtualmachinesa . O project operador é utilizado para manter apenas o IncomingNodeLabels. Lista os 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

Listar todas as etiquetas de nó com uma etiqueta de nó específica

A consulta seguinte resulta numa lista de todas as etiquetas de nó de saída com um conector para a etiqueta do nó da máquina virtual.

  • Cria uma estrutura de grafos ao mapear a SourceNodeId coluna utiliza os dados na ExposureGraphEdges tabela para a TargetNodeId coluna na ExposureGraphNodes tabela com o make-graph operador para criar uma estrutura de gráficos.
  • Em seguida, utiliza o graph-match operador para corresponder ao padrão do gráfico em que SourceNode e NodeLabel corresponde microsoft.compute/virtualmachinesa .
  • O project operador é utilizado para manter apenas o OutgoingNodeLabels. Lista os resultados por 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

Detetar VMs expostas à Internet com uma vulnerabilidade RCE

A consulta seguinte permite-lhe detetar máquinas virtuais expostas à Internet e a uma vulnerabilidade de Execução Remota de Código (RCE).

  • Utiliza a ExposureGraphNodes tabela de esquema.
  • Quando e NodePropertiesexposedToInternetvulnerableToRCE são verdadeiros, verifica se a categoria (Categories) é máquinas virtuais (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")

Descobrir dispositivos com acesso à Internet com uma vulnerabilidade de escalamento de privilégios

A consulta seguinte procura dispositivos com acesso à Internet expostos a uma vulnerabilidade de escalamento de privilégios, o que pode permitir o acesso a privilégios de nível superior no sistema.

  • Utiliza a ExposureGraphNodes tabela de esquema.
  • Quando NodeProperties está com acesso à Internet (IsInternetFacing) e VulnerableToPrivilegeEscalation, a consulta verifica se os itens em Categories são realmente dispositivos (device).
ExposureGraphNodes
| where isnotnull(NodeProperties.rawData.IsInternetFacing)
| where isnotnull(NodeProperties.rawData.VulnerableToPrivilegeEscalation)
| where set_has_element(Categories, "device")

Mostrar todos os utilizadores com sessão iniciada em mais do que um dispositivo crítico

Esta consulta resulta numa lista de utilizadores com sessão iniciada em mais do que um dispositivo crítico, juntamente com o número de dispositivos em que têm sessão iniciada.

  • Cria uma IdentitiesAndCriticalDevices tabela com ExposureGraphNodes dados filtrados por dispositivos com um nível de criticidade superior a 4 ou por identity.
  • Em seguida, cria uma estrutura de grafos com o make-graph operador , em que EdgeLabel é Can Authenticate As.
  • Utiliza o graph-match operador para corresponder a instâncias em que um device corresponde a .identity
  • Em seguida, utiliza o project operador para manter IDs de identidade e IDs de dispositivo.
  • O mv-apply operador filtra os IDs do dispositivo e os IDs de identidade por tipo. Resume-os e apresenta os resultados numa tabela com os cabeçalhos , Number Of devices user is logged-in toe 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

Mostrar dispositivos cliente com uma vulnerabilidade/utilizadores críticos que têm acesso a servidores de alto valor

A consulta seguinte resulta numa lista de dispositivos com vulnerabilidades RCE e os respetivos IDs de dispositivo e dispositivos com vulnerabilidades críticas elevadas e os respetivos IDs de dispositivo.

  • Cria uma IdentitiesAndCriticalDevices tabela que inclui dispositivos (device) com vulnerabilidades RCE com criticidade inferior a quatro e identidades (identity) que, através da filtragem e da correspondência de padrões, mostram dispositivos com vulnerabilidades críticas.
  • A lista é filtrada para mostrar apenas as ligações que têm etiquetas Can Authenticate As edge e 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

Indique todos os caminhos do ID de nó específico para um nó com uma etiqueta específica

Esta consulta apresenta o caminho de um nó IP específico, transmitindo até três recursos que resultam numa ligação à etiqueta do nó da máquina virtual.

  • Utiliza as ExposureGraphNodes tabelas de esquema e ExposureGraphEdges e os make-graph operadores e graph-match para criar uma estrutura de grafos.
  • Com o project operador, apresenta uma lista de IDs de IP, propriedades de IP, IDs de máquina virtual e propriedades da 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

Próximas etapas

Explore com o mapa da superfície de ataque.