KQL

KQL – Guia Básico – Instrução Let

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

Se você já teve algum contato com alguma linguagem de programação deve conhecer um pouco sobre declaração de variáveis. As instruções let são usadas para atribuir um valor à uma variável como vemos no exemplo abaixo usando datas:

let today = endofday(now());
let yesterday = startofday(now(-1d));

Por associar nomes à expressões, o let te ajuda a reutilizar um valor futuramente e também permite que você divida uma expressão complexa em várias partes. Você pode associar cada parte à um nome por meio da instrução let para compor uma pesquisa mais completa.

As expressões associadas por instruções let podem ser dos seguintes tipo:

  • Tipos escalares
  • Tipos tabulares
  • Funções definidas pelo usuário

Nós veremos um pouco de cada um deles em artigos futuros, não se preocupe com esses nomes agora.

É importante dizer que os nomes associados por instruções let precisam ser nomes de entidade válidos, como vemos no exemplo abaixo retirado da documentação Microsoft.

Sintaxe: let Name = ScalarExpression | TabularExpression | FunctionDefinitionExpression

CampoDefiniçãoExemplo
NomeO nome a ser associado. O nome precisa ser um nome de entidade válido.O escape de nome de entidade, como ["Name with spaces"], é permitido.
ScalarExpressionUma expressão com um resultado escalar cujo valor está associado ao nome.let one=1;
TabularExpressionUma expressão com um resultado tabular cujo valor está associado ao nome.Logs | where Timestamp > ago(1h)
FunctionDefinitionExpressionUma expressão que suspende um lambda, uma declaração da função anônima que deve ser associada ao nome.let f=(a:int, b:string) { strcat(b, ":", a) }

Também podemos usar o let mais de uma vez em nossa pesquisa usando o delimitador ponto e vírgula (;) entre elas, como no exemplo a seguir.

let start = ago(5h);
let period = 2h;
T | where Time > start and Time < start + period | …

No exemplo abaixo, timeOffSet e discardEventId são criados e usados como parte da instrução “where” SecurityEvent.

let timeOffset = 7d;
let discardEventId = 4688;

SecurityEvent
| where TimeGenerated > ago(timeOffset*2) and TimeGenerated < ago(timeOffset)
| where EventID != discardEventId

Podemos usar a instrução let também para tabelas ou listas dinâmicas:

let suspiciousAccounts = datatable(account: string) [
@"\administrator",
@"NT AUTHORITY\SYSTEM"
];

SecurityEvent | where Account in (suspiciousAccounts)

Outro exemplo:

let LowActivityAccounts =
SecurityEvent
| summarize cnt = count() by Account
| where cnt < 10;

LowActivityAccounts | where Account contains "Mal"

Extraí uma parte do material de vídeo e apresentação do Program Manager de Azure Sentinel, Ofer Shezaf, que recomendo fortemente.

Vídeo – Azure Sentinel Webinar KQL parte 1.

Você também poder ver uma série de exemplos no GitHub do Azure Sentinel – GitHub – Azure/Azure-Sentinel: Cloud-native SIEM for intelligent security analytics for your entire enterprise. Também recomendo acessar o diretório GitHub – rod-trent/SentinelKQL: Azure Sentinel KQL.

Conclusão

Nesse artigo vimos como usar a instrução let para criar e usar variáveis e tabelas dinâmicas.

Referências:

Instrução Let – Azure Data Explorer | Microsoft Docs

Usar a instrução let – Learn | Microsoft Docs

Obrigado e deixe seu comentário, feedback, crítica ou sugestão!

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