-Hackeando a merda do KQL【ツ】
Por volta do verão do ano passado, disse adeus às pitorescas montanhas do noroeste do Pacífico e olá à monotonia da Holanda. Mas enquanto a natureza aqui é inexistente, todo o resto foi exatamente o que eu precisava depois da toca do coelho de 2021/2. Um desses pontos positivos foi um novo emprego em um SOC recém-lançado que aderiu totalmente ao Microsoft Security Stack .
O Microsoft Sentinel (anteriormente Azure Sentinel) é uma plataforma de gerenciamento de eventos e informações de segurança (SIEM) nativa da nuvem que usa Kusto Query Language para pesquisar e analisar dados no Sentinel e outros serviços do Azure. Se você estiver familiarizado com SQL, KQL deve parecer familiar, mas, conforme aprendi, existem algumas diferenças importantes e recursos avançados que podem ajudá-lo a obter o máximo de seus dados.
Portanto, sem aumentar a contagem de palavras, dou a você 5 dicas e truques realmente úteis para Kusto-ing como o Hacker Bill.
1. O operador parse permite extrair dados de strings usando um conjunto de expressões regulares. Isso pode ser especialmente útil ao trabalhar com dados de log, que geralmente incluem informações codificadas de maneiras complexas. Por exemplo, você pode usar parse para extrair o endereço IP de uma entrada de log que o inclua como parte de uma string maior.
// Extract the IP address from a log entry that includes it as part of a larger string
let log_entry = "User logged in from IP address: 192.168.1.1";
let ip_address = parse(log_entry, "IP address: (\\d+.\\d+.\\d+.\\d+)");
// Add a column that calculates the percentage change in some metric from one day to the next
let data = datatable(date:datetime, value:int)
[ datetime(2020-01-01), 100, datetime(2020-01-02), 105, datetime(2020-01-03), 110];
data
| extend pct_change = (value - lag(value)) / lag(value)
| project date, value, pct_change
// Group data by user and count the number of events each user generated
let data = datatable(user:string, event:string)
[
"User 1", "Event 1",
"User 1", "Event 2",
"User 2", "Event 3",
"User 2", "Event 4",
"User 3", "Event 5"
];
data
| summarize count() by user
// Create a line chart that shows the number of events per hour over the course of a day
let data = datatable(timestamp:datetime, event:string)
[ datetime(2020-01-01 01:00), "Event 1", datetime(2020-01-01 02:00), "Event 2", datetime(2020-01-01 03:00), "Event 3", datetime(2020-01-01 04:00), "Event 4", datetime(2020-01-01 05:00), "Event 5"];
data
| make-series count() on timestamp in range(datetime(2020-01-01), datetime(2020-01-01 23:59), 1h) by event
// Combine data from a log file with data from a user database, based on the user's ID
let log_data = datatable(user_id:int, event:string)
[
1, "Event 1",
2, "Event 2",
3, "Event 3"
];
let user_data = datatable(user_id:int, name:string)
[
1, "John Smith",
2, "Jane Doe",
3, "Bob Johnson"
];
log_data
| join user_data on user_id
| project name, event





































![O que é uma lista vinculada, afinal? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)