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 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.
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 Consulta 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
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
,isempty
isnotnull
, 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.
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/virtualmachines
a 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:
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 SourceNodeId
ExposureGraphEdges
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/virtualmachines
a . 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 naExposureGraphEdges
tabela para aTargetNodeId
coluna naExposureGraphNodes
tabela com omake-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 queSourceNode
eNodeLabel
correspondemicrosoft.compute/virtualmachines
a . - O
project
operador é 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).
- Utiliza a
ExposureGraphNodes
tabela de esquema. - Quando e
NodeProperties
exposedToInternet
vulnerableToRCE
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
) eVulnerableToPrivilegeEscalation
, a consulta verifica se os itens emCategories
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 comExposureGraphNodes
dados filtrados por dispositivos com um nível de criticidade superior a 4 ou poridentity
. - Em seguida, cria uma estrutura de grafos com o
make-graph
operador , em queEdgeLabel
éCan Authenticate As
. - Utiliza o
graph-match
operador para corresponder a instâncias em que umdevice
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 to
eUser 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 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
ExposureGraphNodes
tabelas de esquema eExposureGraphEdges
e osmake-graph
operadores egraph-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