Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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 na cloud e entidades dos ambientes do Azure, AWS e GCP.
As secções seguintes fornecem exemplos, dicas e dicas 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 pesquisa avançada
- Veja as melhores práticas para criar consultas de pesquisa avançada
- Introdução à Linguagem de Consulta Kusto (KQL)
Utilizar o operador make-graph
O operador make-graph do Kusto carrega 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
NodePropertiescontém toda a informação sobre o nó e, por isso, é grande. - Na maioria das situações, é útil extrair apenas as informações necessárias antes de as introduzir no operador
make-graph.
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,isempty,isnotnullnão utilizam o índice quando são aplicados a uma coluna dinâmica eisnotnull(Properties["containsSensitiveData"]não utiliza 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.
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 inquilino
A consulta seguinte agrupa os dados na tabela ExposureGraphNodes e utiliza o operador summarize do Kusto para listá-los por NodeLabel.
ExposureGraphNodes
| summarize by NodeLabel
Listar todas as etiquetas de extremidade no seu locatário
A consulta seguinte agrupa os dados na tabela ExposureGraphEdges e utiliza o operador summarize do Kusto para listá-los por rótulos de extremidade (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 tabela ExposureGraphEdges e, quando o rótulo 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 com um rótulo de nó específico
A consulta seguinte resume as ligações que ligam máquinas virtuais a outros ativos do grafo de exposição de segurança. Agrupa os dados na tabela ExposureGraphEdges e, quando a etiqueta do nó de destino é microsoft.compute/virtualmachines, utiliza o operador summarize do 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 tabela ExposureGraphNodes, filtrados de modo a mostrar apenas os resultados com o 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:
No portal Microsoft Defender, selecione Caça > 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 grafo ao mapear os dados da coluna SourceNodeId na tabela ExposureGraphEdges para a coluna TargetNodeId na tabela ExposureGraphNodes com o operador make-graph.
Em seguida, utiliza o operador graph-match para criar um padrão de grafo 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ó de saída com um conector para a etiqueta do nó da máquina virtual.
- Cria uma estrutura de grafo ao mapear a coluna
SourceNodeId, que utiliza os dados na tabelaExposureGraphEdges, à colunaTargetNodeIdna tabelaExposureGraphNodesutilizando o operadormake-graph. - Em seguida, utiliza o operador
graph-matchpara corresponder ao padrão de grafo em queSourceNodeeNodeLabelcorrespondem amicrosoft.compute/virtualmachines. - 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 tabela de esquemas
ExposureGraphNodes - Quando
NodePropertiesexposedToInternetevulnerableToRCEsão ambos 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 esquemas
ExposureGraphNodes - 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 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
IdentitiesAndCriticalDevicestabela comExposureGraphNodesdados filtrados quer por dispositivos com um nível de criticidade superior a 4 quer poridentity. - Em seguida, cria uma estrutura de grafos com o
make-graphoperador , em queEdgeLabeléCan Authenticate As. - Utiliza o operador
graph-matchpara corresponder às ocorrências em que umdevicecorresponde a umidentity. - Em seguida, utiliza o operador
projectpara preservar IDs de identidade e IDs de dispositivos. - 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 conexões que têm etiquetas de extremidade
Can Authenticate AseCanRemoteInteractiveLogonTo.
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 a partir de um ID de nó específico até um nó com um rótulo específico
Esta consulta mostra o caminho a partir de um nó IP específico, passando por até três ativos, até resultar numa ligação ao rótulo do nó da máquina virtual.
- Utiliza as tabelas de esquema
ExposureGraphNodeseExposureGraphEdgese os operadoresmake-graphegraph-matchpara criar uma estrutura em grafo. - 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