Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Utilize o gráfico de exposição empresarial no Gestão da exposição de 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 a Cloud no portal do Defender, o gráfico de exposição inclui agora tipos de nós de cloud e entidades de ambientes de Azure, AWS e GCP.
Este artigo fornece alguns exemplos, sugestões e sugestões para construir consultas no gráfico de exposição empresarial.
Pré-requisitos
- Leia sobre a gestão de superfícies de ataque.
- Reveja as permissões necessárias para trabalhar com o gráfico.
Criar consultas de investigação avançadas
- Rever as melhores práticas para criar consultas de investigação avançadas
- Introdução ao Linguagem de Pesquisa Kusto (KQL)
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
NodePropertiescoluna 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-graphoperador.
Exemplos:
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 eisnotnull(Properties["containsSensitiveData"]não utilizar o índice. - Em vez disso, utilize o
has()operador , que utiliza sempre o índice.
Exemplos:
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. 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 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. 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:
No portal Microsoft Defender, selecione investigação -> investigação avançada.
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.
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
SourceNodeIdcoluna utiliza os dados naExposureGraphEdgestabela para aTargetNodeIdcoluna naExposureGraphNodestabela com omake-graphoperador para criar uma estrutura de gráficos. - Em seguida, utiliza o
graph-matchoperador para corresponder ao padrão do gráfico em queSourceNodeeNodeLabelcorrespondemicrosoft.compute/virtualmachinesa . - O
projectoperador é utilizado para manter apenas oOutgoingNodeLabels. Lista os 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
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
ExposureGraphNodestabela de esquema. - Quando e
NodePropertiesexposedToInternetvulnerableToRCEsão verdadeiros, verifica se a categoria (Categories) é 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
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
ExposureGraphNodestabela de esquema. - Quando
NodePropertiesestá com acesso à Internet (IsInternetFacing) eVulnerableToPrivilegeEscalation, a consulta verifica se os itens emCategoriessã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
IdentitiesAndCriticalDevicestabela comExposureGraphNodesdados filtrados por dispositivos com um nível de criticidade superior a 4 ou poridentity. - Em seguida, cria uma estrutura de grafos com o
make-graphoperador , em queEdgeLabeléCan Authenticate As. - Utiliza o
graph-matchoperador para corresponder a instâncias em que umdevicecorresponde a .identity - Em seguida, utiliza o
projectoperador para manter IDs de identidade e IDs de dispositivo. - O
mv-applyoperador 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 toeUser 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
IdentitiesAndCriticalDevicestabela 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 Asedge eCanRemoteInteractiveLogonTo.
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
ExposureGraphNodestabelas de esquema eExposureGraphEdgese osmake-graphoperadores egraph-matchpara criar uma estrutura de grafos. - Com o
projectoperador, 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