-KQL'nin Bokunu Hacklemek【ツ】

Jan 08 2023
Geçen yılın yaz aylarında Kuzeybatı Pasifik'in pitoresk dağlarına elveda ve Hollanda'nın dümdüz kasvetine merhaba dedim. Ama buradaki doğa yokken, diğer her şey 2021/2 tavşan deliğinden sonra tam da ihtiyacım olan şeydi.
Alternatif evren c312.5'in hacker Bill Gates, KQLing'in yanlış olduğunu söylüyor..

Geçen yılın yaz aylarında Kuzeybatı Pasifik'in pitoresk dağlarına elveda ve Hollanda'nın dümdüz kasvetine merhaba dedim. Ama buradaki doğa yokken, diğer her şey 2021/2 tavşan deliğinden sonra tam da ihtiyacım olan şeydi. Bu olumlu yönlerden biri, Microsoft Güvenlik Yığını'nı tamamen benimseyen, yeni başlatılan bir SOC'de yeni bir iş olmuştur .

Microsoft Sentinel (eski adıyla Azure Sentinel), Sentinel ve diğer Azure hizmetlerinde veri aramak ve analiz etmek için Kusto Sorgu Dili kullanan, bulutta yerel bir güvenlik bilgileri ve olay yönetimi (SIEM) platformudur. SQL'e aşinaysanız, KQL size tanıdık gelecektir, ancak öğrendiğim gibi, verilerinizden gerçekten en iyi şekilde yararlanmanıza yardımcı olabilecek birkaç önemli fark ve gelişmiş özellik var.

Bu yüzden, kelime sayısını daha fazla doldurmadan, size Hacker Bill gibi Kusto-ing için gerçekten yararlı 5 ipucu ve püf noktası veriyorum.

1. Ayrıştırma işleci, bir dizi düzenli ifade kullanarak dizelerden veri çıkarmanıza olanak tanır. Bu, genellikle karmaşık şekillerde kodlanmış bilgileri içeren günlük verileriyle çalışırken özellikle yararlı olabilir. Örneğin, IP adresini daha büyük bir dizenin parçası olarak içeren bir günlük girişinden ayıklamak için ayrıştırmayı kullanabilirsiniz.

// 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