KQL

KQL – Guia Básico – Operador Where

Nível: Iniciante | Tempo de leitura: 5 minutos

Olá, obrigado a todos pela visita! Vimos no último post sobre Kusto Query Language – KQL – Guia Básico – Operador Search, como iniciar no mundo das pesquisas usando o operador Search. Nesse artigo vamos evoluir um pouco mais para outro muito útil: Where.

Vale lembrar também que esse assunto é cobrado no exame de certificação SC-200: Microsoft Security Operations Analyst.

Como já avançamos um pouco, vamos direto ao ponto, mas se você deseja ver todos os artigos dessa série, acesse o seguinte link: https://cybergeeks.cloud/category/kql/.

Where – É similar ao Search como falamos no último artigo, mas mais eficiente, pois ao invés de fazer como o search, e buscar todos as colunas por valores, ele limita o resultado baseado nas condições que você especificou. Um exemplo bem prático é buscar em uma tabela resultados de eventos gerados só no último dia ou hora. Você verá que este é um dos operadores mais usados.

Exemplo 1 – eventos de segurança de até 1 dia atrás.

SecurityEvent
| where TimeGenerated > ago(1d)

Exemplo 2 – posso especificar o tempo + um ID de evento.

SecurityEvent
| where TimeGenerated > ago(1h) and EventID == "4624"

Exemplo 3 – posso adicionar mais condições à busca.

SecurityEvent
| where TimeGenerated > ago(1h)
| where EventID == 4624
| where AccountType =~ "user"

Note que na pesquisa acima temos dois operadores de string, que são: == e o =~. Vamos entender o que são eles na tabela abaixo:

ExpressãoDescriçãoExemplo
==Verificação de igualdade – case sensitiveLevel == 8
=~Verificação de igualdade – case insensitiveEventSourceName =~ "microsoft-windows-security-auditing"
! =, <>Verifique a desigualdade
(as duas expressões são idênticas)
Level != 4
andorNecessário entre condiçõesLevel == 16 or CommandLine != ""

Vamos ver um exemplo prático de uma pesquisa do Microsoft Defender for Endpoint, que pode ser executado no na tabela DeviceNetworkEvents, acessada através do portal – https://security.microsoft.com/advanced-hunting ou mesmo através do portal do Azure Sentinel, se este estiver recebendo logs do MDE.

  • Pesquisar eventos do dispositivo por determinado endereço IP

DeviceNetworkEvents
| where RemoteIP == “200.1.2.3”

  • Podemos também listar os dispositivos contendo nome de arquivo de vírus na tabela DeviceFileEvents.

DeviceFileEvents
| where FileName == 'Invoice.pdf.exe'

Dica: Para executar a pesquisa você pode usar o botão Run Query, mas é bem mais prático usar o Shift + Enter.

Evoluindo um pouco nosso where, posso adicionar mais filtros, como por exemplo: se desejo buscar por dispositivos com extensão de arquivo de Phising (extensão dupla) como .pdf.exe, .docx.exe, .doc.exe, .mp3.exe. Nesse exemplo, usamos o where e também o opeador booleano OR.

DeviceProcessEvents
| where Timestamp > ago(7d) 
| where FileName endswith ".pdf.exe" 
    or FileName endswith ".doc.exe" 
    or FileName contains ".docx.exe" 
    or FileName contains ".mp3.exe" 
| project Timestamp, DeviceName, FileName, AccountSid, AccountName, AccountDomain 
| top 100 by Timestamp 

No exemplo anterior usei também o operador project, o qual será detalhado em breve em um próximo artigo.

Futuramente irei mostrar também como usar as consultas de advanced hunting mais proativamente para criar regras de detecção customizadas. Essas regras são executadas automaticamente para verificar e responder à atividade de violação suspeita, máquinas configuradas incorretamente e outras descobertas.

Conclusão

Nesse artigos avançamos no estudo do KQL com alguns exemplos práticos do operador where.

Referências:

Microsoft Defender for Endpoint Commonly Used Queries and Examples – Microsoft Tech Community

Usar o operador where – Learn | Microsoft Docs

Obrigado!

Tiago Souza

Tiago Souza

Security Technical Specialist
Cyber Security Technical Specialist at Microsoft | Cloud Security & Threat Protection | Blog content creator at CyberGeeks.Cloud - https://linktr.ee/tiagovf