Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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
- 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 busca avançada
- Revise as melhores práticas para criar consultas de busca avançada
- Introdução ao Linguagem de Consulta Kusto (KQL)
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
NodePropertiesconté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,isnotnullnão usam o índice quando são aplicados a uma coluna dinâmica, eisnotnull(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:
No portal Microsoft Defender, selecione Busca Avançada de Busca>.
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. 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 tabelaExposureGraphEdges, para a colunaTargetNodeIdna tabelaExposureGraphNodesusando o operadormake-graph. - Em seguida, utiliza o operador
graph-matchpara fazer 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 esquema
ExposureGraphNodes. - Quando tanto
NodePropertiesexposedToInternetquantovulnerableToRCEforem 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
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 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
IdentitiesAndCriticalDevicestabela usandoExposureGraphNodesdados filtrados seja 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 operador
graph-matchpara encontrar ocorrências em que umdevicecorresponde a umidentity. - Em seguida, utiliza o operador
projectpara preservar IDs de identificação 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 conexões que tenham os rótulos de borda
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 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
ExposureGraphNodeseExposureGraphEdgese os operadoresmake-graphegraph-matchpara criar uma estrutura de 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