Consultar o gráfico de exposição empresarial

Utilize o gráfico de exposição empresarial no Gerenciamento de Exposição da Segurança da Microsoft para procurar proativamente ameaças de exposição empresarial entre pontos finais, ambientes na cloud e infraestruturas híbridas na investigação avançada no portal do Microsoft Defender. Com a integração do Defender para Nuvem ao portal do Defender, o grafo de exposição agora inclui tipos de nós de nuvem e entidades dos ambientes do Azure, AWS e GCP.

As seções a seguir fornecem exemplos, dicas e dicas para construir consultas no grafo de exposição empresarial.

Pré-requisitos

Criar consultas de busca avançada

Utilizar o operador make-graph

O operador make-graph do Kusto carrega os dados de nós e arestas na 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 coluna NodeProperties contém todas as informações do nó e, por isso, é grande.
  • Na maioria dos cenários, é útil extrair apenas as informações necessárias antes de fornecê-las ao operador make-graph.

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, isempty, isnotnull não usam o índice quando são aplicados a uma coluna dinâmica, e isnotnull(Properties["containsSensitiveData"] não usa 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.

Exemplos de consultas de exposição

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 locatário

A consulta a seguir agrupa os dados na tabela ExposureGraphNodes e usa o operador summarize do Kusto para listá-los por NodeLabel.

ExposureGraphNodes
| summarize by NodeLabel

Liste todas as etiquetas de borda do seu locatário

A consulta a seguir agrupa os dados na tabela ExposureGraphEdges e usa o operador summarize do Kusto para listá-los por rótulos de borda (EdgeLabel).

ExposureGraphEdges
| summarize by EdgeLabel

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

A consulta a seguir agrupa os dados na tabela ExposureGraphEdges e, quando o rótulo do nó de origem é microsoft.compute/virtualmachines, resume os dados da máquina virtual por EdgeLabel. Resume as conexões que ligam ativos a máquinas virtuais no seu gráfico de exposição de segurança. Com a integração do Defender para a Cloud no portal do Defender, isto inclui agora recursos da cloud de vários ambientes.

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

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

A consulta a seguir resume as arestas que conectam máquinas virtuais a outros ativos do grafo de exposição de segurança. Ele agrupa os dados na tabela ExposureGraphEdges e, quando o rótulo do nó de destino é microsoft.compute/virtualmachines, usa o operador summarize do Kusto para listar o rótulo 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 tabela ExposureGraphNodes, filtrada para mostrar apenas os resultados do rótulo 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. Com a integração do Defender para Cloud no portal do Defender, os NodeProperties incluem agora atributos e relações adicionais específicos da cloud.

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

Exemplo: Consultar recursos da cloud em vários ambientes

A consulta seguinte mostra como consultar recursos da cloud de diferentes ambientes agora disponíveis com a integração do Defender para Cloud no portal do Defender:

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

Consultar o gráfico de exposição

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

  1. No portal Microsoft Defender, selecione Busca Avançada de Busca>.

  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. Ele cria uma estrutura de grafo ao mapear os dados da coluna SourceNodeId na tabela ExposureGraphEdges para a coluna TargetNodeId na tabela ExposureGraphNodes com o operador make-graph para construir uma estrutura de grafo.

Em seguida, utiliza o operador graph-match para criar um padrão de gráfico em que o nó de destino TargetNode e NodeLabel correspondem a microsoft.compute/virtualmachines. 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 todos os rótulos de nó adjacentes a um rótulo de nó específico

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

  • Ela cria uma estrutura de grafo mapeando a coluna SourceNodeId, que usa os dados da tabela ExposureGraphEdges, para a coluna TargetNodeId na tabela ExposureGraphNodes usando o operador make-graph.
  • Em seguida, utiliza o operador graph-match para fazer corresponder ao padrão de grafo em que SourceNode e NodeLabel correspondem a microsoft.compute/virtualmachines.
  • 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) em ambientes na cloud.

  • Utiliza a tabela de esquema ExposureGraphNodes.
  • Quando tanto NodePropertiesexposedToInternet quanto vulnerableToRCE forem verdadeiros, verifica se a categoria (Categories) corresponde a máquinas virtuais (virtual_machine).
  • Com a integração do Defender para a Cloud no portal do Defender, isto inclui agora VMs de ambientes de Azure, AWS e GCP.
ExposureGraphNodes
| where isnotnull(NodeProperties.rawData.exposedToInternet)
| where isnotnull(NodeProperties.rawData.vulnerableToRCE)
| where Categories has "virtual_machine" and set_has_element(Categories, "virtual_machine")

Exemplo: Localizar caminhos de ataque híbridos entre recursos na cloud e no local

A consulta seguinte demonstra como identificar potenciais caminhos de ataque híbridos com a integração do Defender para Cloud no portal do 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

Descubra dispositivos expostos à Internet com uma vulnerabilidade de elevação 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 tabela de esquema ExposureGraphNodes.
  • 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 usuários conectados a mais de 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 usando ExposureGraphNodes dados filtrados seja 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 operador graph-match para encontrar ocorrências em que um device corresponde a um identity.
  • Em seguida, utiliza o operador project para preservar IDs de identificação 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 conexões que tenham os rótulos de borda Can Authenticate As 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

Forneça todos os caminhos de um ID de nó específico até um nó com um rótulo específico

Esta consulta exibe o caminho a partir de um nó IP específico, passando por até três ativos, que resulta em uma conexão com o rótulo do nó da máquina virtual.

  • Utiliza as tabelas de esquema ExposureGraphNodes e ExposureGraphEdges e os operadores make-graph e graph-match para criar uma estrutura de grafo.
  • 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.