- Hakowanie gówna z KQL【ツ】

Jan 08 2023
Mniej więcej latem zeszłego roku pożegnałem się z malowniczymi górami północno-zachodniego Pacyfiku i przywitałem się z płaską ponurą Holandią. Ale chociaż przyroda tutaj nie istnieje, wszystko inne było dokładnie tym, czego potrzebowałem po króliczej norze 2021/2.
Haker Bill Gates z alternatywnego wszechświata c312.5 mówi, że się mylisz.

Mniej więcej latem zeszłego roku pożegnałem się z malowniczymi górami północno-zachodniego Pacyfiku i przywitałem się z płaską ponurą Holandią. Ale chociaż przyroda tutaj nie istnieje, wszystko inne było dokładnie tym, czego potrzebowałem po króliczej norze 2021/2. Jednym z tych pozytywów była nowa praca w nowo uruchomionym SOC, który w pełni wkupił się w Microsoft Security Stack .

Microsoft Sentinel (dawniej Azure Sentinel) to natywna dla chmury platforma do zarządzania informacjami o zabezpieczeniach i zdarzeniami (SIEM), która używa języka zapytań Kusto do wyszukiwania i analizowania danych w Sentinel i innych usługach platformy Azure. Jeśli znasz SQL, KQL powinien wydawać się znajomy, ale jak się dowiedziałem, istnieje kilka kluczowych różnic i zaawansowanych funkcji, które mogą pomóc Ci w pełni wykorzystać dane.

Tak więc, bez dalszego dopełniania liczby słów, daję ci 5 naprawdę przydatnych wskazówek i sztuczek dla Kusto-ing, takich jak Hacker Bill.

1. Operator analizy umożliwia wyodrębnianie danych z łańcuchów przy użyciu zestawu wyrażeń regularnych. Może to być szczególnie przydatne podczas pracy z danymi dziennika, które często zawierają informacje zakodowane w złożony sposób. Możesz na przykład użyć analizy składni, aby wyodrębnić adres IP z wpisu dziennika, który zawiera go jako część większego ciągu.

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