Migrować reguły wykrywania Splunk do Microsoft Sentinel

Reguły detekcji w Splunk to elementy systemu zarządzania informacjami i zdarzeniami bezpieczeństwa (SIEM), które odpowiadają regułom analitycznym w Microsoft Sentinel. Ten artykuł opisuje koncepcje używane do identyfikacji, porównywania i migracji reguł wykrywania Splunk do Microsoft Sentinel. Najlepszym sposobem migrowania reguł wykrywania z platformy Splunk do Microsoft Sentinel jest rozpoczęcie od funkcji migracji SIEM, która identyfikuje wbudowane reguły analityczne (OOTB) do automatycznego tłumaczenia.

Jeśli chcesz przeprowadzić migrację wdrożenia rozwiązania Splunk Observability, dowiedz się więcej o tym, jak przeprowadzić migrację z aplikacji Splunk do Azure Monitor Logs.

Reguły inspekcji

Microsoft Sentinel używa analizy uczenia maszynowego do tworzenia zdarzeń o wysokiej wierności i możliwości działania. Niektóre z istniejących wykrywań Splunk mogą być redundantne w Microsoft Sentinel, więc nie migruj wszystkich detekcji Splunk na ślepo. Zapoznaj się z poniższymi aspektami audytu reguł podczas identyfikowania Twoich istniejących reguł wykrywania.

  • Pamiętaj, aby wybrać przypadki użycia, które uzasadniają migrację reguł, biorąc pod uwagę priorytet biznesowy i wydajność.
  • Sprawdź, czy rozumiesz typy reguł Microsoft Sentinel.
  • Sprawdź, czy rozumiesz terminologię reguł.
  • Przejrzyj nieaktualne reguły, które nie mają alertów w ciągu ostatnich 6–12 miesięcy, i określ, czy są one nadal istotne.
  • Eliminuj zagrożenia niskiego poziomu lub alerty, które są rutynowo ignorowane.
  • Microsoft Sentinel Analytics wymaga, aby typ danych był obecny w obszarze roboczym usługi Log Analytics przed włączeniem reguły. Upewnij się, że wymagane źródła danych są połączone i przejrzyj metody połączenia danych. Wróć do rozmów dotyczących zbierania danych, aby zapewnić odpowiednią szczegółowość i zakres danych dla przypadków użycia, które planujesz wykrywać. Następnie skorzystaj z funkcji migracji SIEM, aby upewnić się, że źródła danych zostały odpowiednio zmapowane.

Migrowanie reguł

Po zidentyfikowaniu detekcji Splunk, które mają zostać zmigrowane, zapoznaj się z następującymi kwestiami dotyczącymi procesu migracji:

  • Porównaj istniejące funkcje reguł analizy OOTB Microsoft Sentinel z bieżącymi przypadkami użycia. Użyj narzędzia migracji SIEM, aby zobaczyć, które detekcje Splunk są automatycznie przekształcane w gotowe szablony OOTB.
  • Przetłumacz wykrycia, które nie są zgodne z regułami analitycznymi OOTB. Najlepszym sposobem na automatyczne tłumaczenie detekcji Splunk jest środowisko migracji SIEM.
  • Odkryj więcej algorytmów dla swoich zastosowań, przeglądając zasoby społeczności, takie jak SOC Prime Threat Detection Marketplace.
  • Ręcznie przetłumacz detekcje, jeśli wbudowane reguły nie są dostępne lub nie zostały przetłumaczone automatycznie. Utwórz nowe zapytania KQL i przejrzyj mapowanie reguł.

Aby uzyskać więcej informacji, zobacz najlepsze rozwiązania dotyczące migrowania reguł wykrywania.

Etapy migracji reguł

Wykonaj następujące kroki, aby zweryfikować, przetłumaczyć i przetestować każdą regułę wykrywania w systemie Splunk podczas migracji do Microsoft Sentinel.

  1. Sprawdź, czy masz wdrożony system testowy dla każdej reguły, którą chcesz przenieść.

    1. Przygotowanie procesu weryfikacji dla zmigrowanych reguł, w tym pełnych scenariuszy testowych i skryptów.

    2. Upewnij się, że twój zespół ma przydatne zasoby do testowania zmigrowanych reguł.

    3. Upewnij się, że masz połączone wymagane źródła danych i przejrzyj metody połączenia danych.

  2. Sprawdź, czy twoje wykrycia są dostępne jako szablony OOTB w Microsoft Sentinel:

    • Użyj środowiska migracji SIEM , aby zautomatyzować tłumaczenie i instalację szablonów OOTB.

      Aby uzyskać więcej informacji, zobacz Korzystanie z środowiska migracji SIEM.

    • Jeśli przypadki użycia nie zostały odzwierciedlone w wykrywaniach, utwórz reguły dla własnego obszaru roboczego przy użyciu szablonów reguł OOTB.

      W Microsoft Sentinel przejdź do centrum zawartości.

      Filtruj typ zawartości dla szablonów reguł analizy .

      Znajdź i zainstaluj/zaktualizuj każde odpowiednie rozwiązanie centrum zawartości lub szablon reguły analizy autonomicznej.

      Aby uzyskać więcej informacji, zobacz Gotowe do użycia wykrywanie zagrożeń.

    • Jeśli masz wykrycia, które nie są objęte regułami OOTB Microsoft Sentinel, najpierw wypróbuj środowisko migracji SIEM w celu automatycznego tłumaczenia.

    • Jeśli ani reguły OOTB, ani migracja SIEM nie przetłumaczą całkowicie wykrywania, utwórz regułę ręcznie. Aby utworzyć regułę, wykonaj następujące kroki:

      1. Zidentyfikuj źródła danych, których chcesz użyć w regule. Zidentyfikuj tabele w usłudze Microsoft Sentinel, które chcesz odpytywać, tworząc tabelę mapowania między źródłami danych i tabelami.

      2. Zidentyfikuj wszystkie atrybuty, pola lub jednostki w danych, których chcesz użyć w regułach.

      3. Określ kryteria i logikę swojej reguły. Podczas identyfikowania kryteriów i logiki reguły rozważ użycie szablonów reguł jako przykładów tworzenia zapytań języka KQL.

        Należy wziąć pod uwagę filtry, reguły korelacji, aktywne listy, zestawy odwołań, listy obserwowanych, anomalie wykrywania, agregacje itd. Możesz użyć odwołań dostarczonych przez starszą funkcję SIEM, aby zrozumieć , jak najlepiej mapować składnię zapytania.

      4. Zidentyfikuj warunek wyzwalacza i akcję reguły, a następnie utwórz i przejrzyj swoje zapytanie KQL. Analizując zapytanie, skorzystaj z materiałów zawierających zalecenia dotyczące optymalizacji języka KQL.

  3. Przetestuj regułę dla każdego odpowiedniego przypadku użycia. Jeśli nie zapewnia oczekiwanych wyników, przejrzyj i edytuj KQL i przetestuj go ponownie.

  4. Gdy uznasz, że wszystko jest w porządku, uznaj regułę za zmigrowaną. W razie potrzeby utwórz podręcznik procedur dla działania reguły. Aby uzyskać więcej informacji, zobacz Automatyzowanie reagowania na zagrożenia za pomocą podręczników w Microsoft Sentinel.

Dowiedz się więcej o regułach analizy:

Porównanie terminologii reguł

Poniższa tabela porównawcza wyjaśnia, w jaki sposób reguła oparta na języku KQL w usłudze Microsoft Sentinel odpowiada detekcji opartej na SPL w systemie Splunk.

Splunk Microsoft Sentinel
Typ reguły •Zaplanowane
•Czasu rzeczywistego
• Zaplanowane zapytanie
• Łączenie
• Zabezpieczenia firmy Microsoft
• Analiza zachowań oparta na uczeniu maszynowym (ML)
Kryteria Definiuj w SPL Definiuj w języku KQL
Warunek wyzwalacza • Liczba wyników
• Liczba hostów
• Liczba źródeł
• Niestandardowe
Próg: liczba wyników zapytania
Akcja • Dodaj do uruchomionych alertów
• Zdarzenie dziennika zdarzeń
• Wyniki wyjściowe do wyszukania
• I więcej
• Tworzenie alertu lub zdarzenia
• Integruje się z usługą Logic Apps

Mapowanie i porównywanie przykładów reguł

Użyj przykładowych tabel SPL-do-KQL w tej sekcji, aby porównać i odwzorować reguły ze Splunk na Microsoft Sentinel w różnych scenariuszach.

Porównaj typowe polecenia wyszukiwania Splunk z przykładami KQL

Ta tabela mapuje typowe polecenia wyszukiwania SPL na ich odpowiedniki KQL w Microsoft Sentinel.

polecenie SPL Opis Operator KQL Przykład KQL
chart/ timechart Zwraca wyniki w formie tabelarycznej do tworzenia wykresów szeregów czasowych. operator renderowania … | render timechart
dedup Usuwa kolejne wyniki zgodne z określonym kryterium. odrębne
podsumowywanie
… | summarize by Computer, EventID
eval Oblicza wyrażenie. Dowiedz się więcej o typowych eval poleceniach. Rozszerzyć T | extend duration = endTime - startTime
fields Usuwa pola z wyników wyszukiwania. projekt
odejście od projektu
T | project cost=price*quantity, price
head/tail Zwraca pierwsze lub ostatnie wyniki N. Do góry T | top 5 by Name desc nulls last
lookup Dodaje wartości pól ze źródła zewnętrznego. dane zewnętrzne
wyszukiwanie
Przykład polecenia wyszukania KQL
rename Zmienia nazwę pola. Użyj symboli wieloznacznych, aby określić wiele pól. project-rename T | project-rename new_column_name = column_name
rex Określa nazwy grup przy użyciu wyrażeń regularnych do wyodrębniania pól. dopasowuje regex … | where field matches regex "^addr.*"
search Filtruje wyniki do wyników zgodnych z wyrażeniem wyszukiwania. Szukaj search "X"
sort Sortuje wyniki wyszukiwania według określonych pól. Sortuj T | sort by strlen(country) asc, price desc
stats Udostępnia statystyki, opcjonalnie pogrupowane według pól. Dowiedz się więcej o typowych poleceniach statystyk. Podsumować Przykład polecenia statystyki KQL
mstats Podobnie jak statystyki, stosowane do metryk zamiast zdarzeń. Podsumować Przykład komendy Mstats KQL
table Określa, które pola mają być przechowywane w zestawie wyników i przechowuje dane w formacie tabelarycznym. projekt T | project columnA, columnB
top/rare Wyświetla najbardziej lub najmniej typowe wartości pola. Do góry T | top 5 by Name desc nulls last
transaction Grupuje wyniki wyszukiwania w transakcje.

Przykład polecenia transakcyjnego SPL
Przykład: row_window_session Przykład polecenia transakcyjnego KQL
eventstats Generuje statystyki sumaryczne z pól w zdarzeniach i zapisuje te statystyki w nowym polu.

Przykład SPL
Przykłady:
Dołącz
make_list
rozszerzenie mv-expand
Przykład KQL
streamstats Znajdź sumę skumulowaną pola.

Przykład SPL:
... | streamstats sum(bytes) as bytes _ total \| timechart
row_cumsum ...\| serialize cs=row_cumsum(bytes)
anomalydetection Znajdź anomalie w określonym polu.

Przykład SPL
series_decompose_anomalies() Przykład KQL
where Filtruje wyniki wyszukiwania przy użyciu eval wyrażeń. Służy do porównywania dwóch różnych pól. Gdzie T | where fruit=="apple"

lookup polecenie: przykład KQL

Ten przykład KQL służy externaldata do odtworzenia wzorca SPL lookup poprzez filtrowanie użytkowników względem zewnętrznego źródła danych.

Users 
| where UserID in ((externaldata (UserID:string) [
@"https://storageaccount.blob.core.windows.net/storagecontainer/users.txt" 
h@"?...SAS..." // Secret token to access the blob 
])) | ... 

stats polecenie: przykład KQL

Ten przykład KQL służy summarize do liczenia transakcji i sumowania sum, pogrupowanych według owoców i miesięcy.

Sales 
| summarize NumTransactions=count(), 
Total=sum(UnitPrice * NumUnits) by Fruit, 
StartOfMonth=startofmonth(SellDateTime) 

mstats polecenie: przykład KQL

Ten przykład KQL dzieli wartości metryczne na zakresy cenowe i liczy rekordy w każdym zakresie.

T | summarize count() by price_range=bin(price, 10.0) 

transaction przykład polecenia SPL

Ten przykład SPL grupuje powiązane zdarzenia startu i stop w jedną transakcję według ID aktywności.

sourcetype=MyLogTable type=Event
| transaction ActivityId startswith="Start" endswith="Stop"
| Rename timestamp as StartTime
| Table City, ActivityId, StartTime, Duration

transaction polecenie: przykład KQL

Ten przykład KQL odtwarza grupowanie transakcji SPL, łącząc zdarzenia start i stop na wspólnym ID aktywności i obliczając czas trwania.

let Events = MyLogTable | where type=="Event";
Events
| where Name == "Start"
| project Name, City, ActivityId, StartTime=timestamp
| join (Events
| where Name == "Stop"
| project StopTime=timestamp, ActivityId)
on ActivityId
| project City, ActivityId, StartTime, 
Duration = StopTime – StartTime

Użyj row_window_session(), aby obliczyć wartości początkowe sesji dla kolumny w serializowanym zbiorze wierszy.

...| extend SessionStarted = row_window_session(
Timestamp, 1h, 5m, ID != prev(ID))

eventstats przykład polecenia SPL

Ten przykład SPL oblicza liczbę zdarzeń w kategoriach jednominutowych, a następnie dodaje sumę eventstatsna czas za koszyk .

… | bin span=1m _time
|stats count AS count_i by _time, category
| eventstats sum(count_i) as count_total by _time

eventstats polecenie: przykład KQL

Oto przykład z instrukcją join :

let binSize = 1h;
let detail = SecurityEvent 
| summarize detail_count = count() by EventID,
tbin = bin(TimeGenerated, binSize);
let summary = SecurityEvent
| summarize sum_count = count() by 
tbin = bin(TimeGenerated, binSize);
detail 
| join kind=leftouter (summary) on tbin 
| project-away tbin1

Oto przykład z instrukcją make_list :

let binSize = 1m;
SecurityEvent
| where TimeGenerated >= ago(24h)
| summarize TotalEvents = count() by EventID, 
groupBin =bin(TimeGenerated, binSize)
|summarize make_list(EventID), make_list(TotalEvents), 
sum(TotalEvents) by groupBin
| mvexpand list_EventID, list_TotalEvents

anomalydetection przykład polecenia SPL

Ten przykład SPL wykrywa anomalie w historycznych danych o cenach zamknięcia z okresu 10 lat.

sourcetype=nasdaq earliest=-10y
| anomalydetection Close _ Price

anomalydetection polecenie: przykład KQL

Ten przykład KQL wykorzystuje funkcje analizy szeregów czasowych do wykrywania anomalii w trendach logowania kont niepełnosprawnych w ciągu siedmiodniowego okresu wstecznego.

let LookBackPeriod= 7d;
let disableAccountLogon=SignIn
| where ResultType == "50057"
| where ResultDescription has "account is disabled";
disableAccountLogon
| make-series Trend=count() default=0 on TimeGenerated 
in range(startofday(ago(LookBackPeriod)), now(), 1d)
| extend (RSquare,Slope,Variance,RVariance,Interception,
LineFit)=series_fit_line(Trend)
| extend (anomalies,score) = 
series_decompose_anomalies(Trend)

Porównaj typowe polecenia Splunk eval z odpowiednikami KQL

Ta tabela mapuje typowe funkcje SPL eval na ich odpowiedniki KQL w Microsoft Sentinel.

polecenie SPL Opis Przykład SPL Polecenie KQL Przykład KQL
abs(X) Zwraca wartość bezwzględną X. abs(number) abs() abs(X)
case(X,"Y",…) Przyjmuje pary argumentów X i Y, w których argumenty X są wyrażeniami logicznymi. Jeśli wynikiem jest TRUE, argumenty zwracają odpowiedni argument Y. Przykład SPL case Przykład KQL
ceil(X) Limit liczby X. ceil(1.9) ceiling() ceiling(1.9)
cidrmatch("X",Y) Identyfikuje adresy IP należące do określonej podsieci. cidrmatch
("123.132.32.0/25",ip)
ipv4_is_match()
ipv6_is_match()
ipv4_is_match('192.168.1.1', '192.168.1.255')
== false
coalesce(X,…) Zwraca pierwszą wartość, która nie jest null. coalesce(null(), "Returned val", null()) coalesce() coalesce(tolong("not a number"),
tolong("42"), 33) == 42
cos(X) Oblicza cosinus X. n=cos(0) cos() cos(X)
exact(X) Oblicza wyrażenie X przy użyciu arytmetyki zmiennoprzecinkowych podwójnej precyzji. exact(3.14*num) todecimal() todecimal(3.14*2)
exp(X) Zwraca eX. exp(3) exp() exp(3)
if(X,Y,Z) Jeśli X ma wartość TRUE, wynikiem jest drugi argument Y. Jeśli X przyjmuje wartość FALSE, wynik przyjmuje wartość trzeciego argumentu Z. if(error==200,
"OK", "Error")
iff() Przykład KQL
isbool(X) Zwraca TRUE wartość , jeśli X jest wartością logiczną. isbool(field) iff()
gettype
iff(gettype(X) =="bool","TRUE","FALSE")
isint(X) Zwraca TRUE wartość , jeśli X jest liczbą całkowitą. isint(field) iff()
gettype
Przykład KQL
isnull(X) Zwraca wartość TRUE , jeśli X ma wartość null. isnull(field) isnull() isnull(field)
isstr(X) Zwraca TRUE, jeśli X jest ciągiem znaków. isstr(field) iff()
gettype
Przykład KQL
len(X) Ta funkcja zwraca długość znaku ciągu X. len(field) strlen() strlen(field)
like(X,"y") Zwraca TRUE wtedy i tylko wtedy, gdy X pasuje do wzorca SQLite w Y. like(field, "addr%") has
contains
startswith
dopasowuje regex
Przykład KQL
log(X,Y) Zwraca dziennik pierwszego argumentu X przy użyciu drugiego argumentu Y jako podstawy. Wartość domyślna Y to 10. log(number,2) log
log2
log10
log(X)

log2(X)

log10(X)
lower(X) Zwraca wartość X zapisaną małymi literami. lower(username) tolower tolower(username)
ltrim(X,Y) Zwraca X znaki w parametrze Y przycięte z lewej strony. Domyślne dane wyjściowe Y to spacje i tabulatory. ltrim(" ZZZabcZZ ", " Z") trim_start() trim_start(“ ZZZabcZZ”,” ZZZ”)
match(X,Y) Zwraca wartość , jeśli X pasuje do wzorca regex Y. match(field, "^\d{1,3}.\d$") matches regex … | where field matches regex @"^\d{1,3}.\d$")
max(X,…) Zwraca wartość maksymalną w kolumnie. max(delay, mydelay) max()
arg_max()
… | summarize max(field)
md5(X) Zwraca skrót MD5 ciągu X. md5(field) hash_md5 hash_md5("X")
min(X,…) Zwraca wartość minimalną w kolumnie. min(delay, mydelay) min_of()
min()
arg_min
Przykład KQL
mvcount(X) Zwraca liczbę (całkowitą X ) wartości. mvcount(multifield) dcount …| summarize dcount(X) by Y
mvfilter(X) Filtruje pole wielowartościowe na podstawie wyrażenia logicznego X . mvfilter(match(email, "net$")) mv-apply Przykład KQL
mvindex(X,Y,Z) Zwraca podzbiór argumentu wielowartościowego X z pozycji początkowej (na podstawie zera) Y do Z (opcjonalnie). mvindex( multifield, 2) array_slice array_slice(arr, 1, 2)
mvjoin(X,Y) Dla pola wielowartościowego X i separatora ciągu znaków Y łączy poszczególne wartości X za pomocą Y. mvjoin(address, ";") strcat_array Przykład KQL
now() Zwraca bieżący czas w formacie czasu Unix. now() now() now()

now(-2d)
null() Nie akceptuje argumentów i zwraca wartość NULL. null() Null null
nullif(X,Y) Przyjmuje dwa argumenty, X i Y, i zwraca X, jeśli argumenty są różne. W przeciwnym razie zwraca wartość NULL. nullif(fieldA, fieldB) iff iff(fieldA==fieldB, null, fieldA)
random() Zwraca liczbę pseudolosową z zakresu od 0 do 2147483647. random() rand() rand()
relative_ time(X,Y) Dla czasu epoki X i specyfikatora czasu względnego Y zwraca wartość czasu epoki dla Y zastosowanego do X. relative_time(now(),"-1d@d") czas unix Przykład KQL
replace(X,Y,Z) Zwraca ciąg utworzony przez zastąpienie każdego wystąpienia wyrażenia regularnego Z w ciągu Y ciągiem X. Zwraca datę z zamienionymi numerami miesiąca i dnia.
Na przykład dla 4/30/2015 danych wejściowych dane wyjściowe to 30/4/2009:

replace(date, "^(\d{1,2})/ (\d{1,2})/", "\2/\1/")
replace() Przykład KQL
round(X,Y) Zwraca X zaokrąglane do liczby miejsc dziesiętnych określonych przez Y. Domyślnie jest zaokrąglać do liczby całkowitej. round(3.5) round round(3.5)
rtrim(X,Y) Zwraca X, z obciętymi z prawej strony znakami z Y. Jeśli nie określono Y, spacje i tabulatory są usuwane. rtrim(" ZZZZabcZZ ", " Z") trim_end() trim_end(@"[ Z]+",A)
searchmatch(X) Zwraca TRUE, jeśli zdarzenie pasuje do ciągu wyszukiwania X. searchmatch("foo AND bar") iff() iff(field has "X","Yes","No")
split(X,"Y") Zwraca X jako pole wielowartościowe podzielone według ogranicznika Y. split(address, ";") split() split(address, ";")
sqrt(X) Zwraca pierwiastek kwadratowy elementu X. sqrt(9) sqrt() sqrt(9)
strftime(X,Y) Zwraca wartość X czasu epoki renderowaną przy użyciu formatu określonego przez Y. strftime(_time, "%H:%M") format_datetime() format_datetime(time,'HH:mm')
strptime(X,Y) Biorąc pod uwagę czas reprezentowany przez ciąg X, zwraca wartość przeanalizowaną z formatu Y. strptime(timeStr, "%H:%M") format_datetime() Przykład KQL
substr(X,Y,Z) Zwraca pole podciągu X od pozycji początkowej (liczonej od 1) Y na Z (opcjonalnie) znaków. substr("string", 1, 3) substring() substring("string", 0, 3)
time() Zwraca czas zegara ściennego z rozdzielczością mikrosekund. time() format_datetime() Przykład KQL
tonumber(X,Y) Konwertuje ciąg X wejściowy na liczbę, gdzie Y (opcjonalnie wartość domyślna to 10) definiuje podstawę liczby do przekonwertowania. tonumber("0A4",16) toint() toint("123")
tostring(X,Y) Opis Przykład SPL tostring() tostring(123)
typeof(X) Zwraca ciąg reprezentujący typ pola. typeof(12) gettype() gettype(12)
urldecode(X) Zwraca adres URL X zdekodowany. Przykład SPL url_decode Przykład KQL

case(X,"Y",…) Przykład SPL

Ten przykład SPL zwraca inny ciąg wiadomości na podstawie kodu błędu HTTP.

case(error == 404, "Not found",
error == 500,"Internal Server Error",
error == 200, "OK")

case(X,"Y",…) Przykład KQL

Ten przykład KQL służy case() do przypisania wiadomości na podstawie wartości kodu błędu.

T
| extend Message = case(error == 404, "Not found", 
error == 500,"Internal Server Error", "OK") 

if(X,Y,Z) Przykład KQL

Ten przykład KQL służy iif() do oznaczania, czy znacznik czasu przypada na bieżący dzień.

iif(floor(Timestamp, 1d)==floor(now(), 1d), 
"today", "anotherday")

isint(X) Przykład KQL

Ten przykład KQL sprawdza, czy X ma typ zgodny z liczbami całkowitoliczbowymi, używając gettype i .iif

iif(gettype(X) =="long","TRUE","FALSE")

isstr(X) Przykład KQL

Ten przykład KQL sprawdza, czy X jest wartością ciągu znaków, używając gettype i .iif

iif(gettype(X) =="string","TRUE","FALSE")

like(X,"y") Przykład

Przykłady KQL pokazują kilka operatorów dopasowania ciągów ciągów, których można użyć do odtworzenia dopasowania wzorców SPL like .

… | where field has "addr"

… | where field contains "addr"

… | where field startswith "addr"

… | where field matches regex "^addr.*"

min(X,…) Przykład KQL

Te przykłady KQL pokazują różne sposoby obliczania minimalnych wartości za pomocą min_of, min, oraz arg_min.

min_of (expr_1, expr_2 ...)

…|summarize min(expr)

…| summarize arg_min(Price,*) by Product

mvfilter(X) Przykład KQL

Ten przykład KQL służy mv-apply do filtrowania i redukcji zawartości wielowartościowej, podobnie jak funkcja SPL mvfilter .

T | mv-apply Metric to typeof(real) on 
(
 top 2 by Metric desc
)

mvjoin(X,Y) Przykład KQL

Ten przykład KQL służy strcat_array do łączenia elementów tablicy w jeden ciąg za pomocą niestandardowego separatora.

strcat_array(dynamic([1, 2, 3]), "->")

relative time(X,Y) Przykład KQL

Ten przykład KQL przekształca wartość czasu datowego na czas epoki Unix dla obliczeń w czasie względnym.

let toUnixTime = (dt:datetime)
{
(dt - datetime(1970-01-01))/1s 
};

replace(X,Y,Z) Przykład KQL

Ten przykład KQL wykorzystuje replace() wzór regex do zamiany części miesiąca i dnia w ciągu daty.

replace( @'^(\d{1,2})/(\d{1,2})/', @'\2/\1/',date)

strptime(X,Y) Przykład KQL

Ten przykład KQL używa format_datetime wyświetlania jedynie godzin i minut od wartości daty-godziny.

format_datetime(datetime('2017-08-16 11:25:10'),
'HH:mm')

time() Przykład KQL

Ten przykład KQL formatuje wartość datetime jako ciąg czasu pokazujący godziny, minuty i sekundy.

format_datetime(datetime(2015-12-14 02:03:04),
'h:m:s')

tostring(X,Y) Opis

Funkcja SPL tostring(X,Y) konwertuje wartości na ciągi znaków i obsługuje kilka opcji formatowania. Zwraca wartość pola jako X ciąg ciągów.

  • Jeśli wartość X jest liczbą, X jest ponownie sformatowana na wartość ciągu.
  • Jeśli X jest wartością logiczną, X jest formatowane jako TRUE lub FALSE.
  • Jeśli X jest liczbą, drugi argument Y jest opcjonalny i może mieć wartość hex (konwertuje X do postaci szesnastkowej), commas (formatuje X z przecinkami i dwoma miejscami po przecinku) lub duration (konwertuje X z formatu czasu w sekundach na czytelny format czasu: HH:MM:SS).
tostring(X,Y) Przykład SPL

Ten tostring przykład SPL zwraca:

foo=615 and foo2=00:10:15:

… | eval foo=615 | eval foo2 = tostring(
foo, "duration")

urldecode(X) Przykład SPL

Ten przykład SPL dekoduje ciąg zakodowany przez URL z powrotem do jego pierwotnej formy.

urldecode("http%3A%2F%2Fwww.splunk.com%2Fdownload%3Fr%3Dheader")

Porównaj typowe polecenia Splunk stats z odpowiednikami KQL

Ta tabela mapuje typowe funkcje agregacji SPL stats na ich odpowiedniki KQL w Microsoft Sentinel.

polecenie SPL Opis Polecenie KQL Przykład KQL
avg(X) Zwraca średnią wartości pola X. Avg() avg(X)
count(X) Zwraca liczbę wystąpień pola X. Aby wskazać określoną wartość pola do dopasowania, sformatuj X jako eval(field="value"). count() summarize count()
dc(X) Zwraca liczbę unikatowych wartości pola X. dcount() …\| summarize countries=dcount(country) by continent
earliest(X) Zwraca najwcześniejszą chronologicznie wartość elementu X. arg_min() … \| summarize arg_min(TimeGenerated, *) by X
latest(X) Zwraca ostatnią chronologicznie zaobserwowaną wartość X. arg_max() … \| summarize arg_max(TimeGenerated, *) by X
max(X) Zwraca maksymalną wartość pola X. Jeśli wartości X są nieliczbowe, wartość maksymalna jest odnaleziona za pośrednictwem kolejności alfabetycznej. Max() …\| summarize max(X)
median(X) Zwraca środkową wartość pola X. percentile() …\| summarize percentile(X, 50)
min(X) Zwraca wartość minimalną pola X. Jeśli wartości X są nieliczbowe, wartość minimalna jest odnaleziona za pośrednictwem kolejności alfabetycznej. Min() …\| summarize min(X)
mode(X) Zwraca najczęstszą wartość pola X. top-hitters() …\| top-hitters 1 of Y by X
perc(Y) Zwraca wartość percentyla X pola Y. Na przykład perc5(total) zwraca piątą wartość percentyla pola total. percentile() …\| summarize percentile(Y, 5)
range(X) Zwraca różnicę między wartościami maksymalnymi i minimalnymi pola X. range() range(1, 3)
stdev(X) Zwraca przykładowe odchylenie standardowe pola X. Stdev stdev()
stdevp(X) Zwraca odchylenie standardowe populacji pola X. stdevp() stdevp()
sum(X) Zwraca sumę wartości pola X. Sum() sum(X)
sumsq(X) Zwraca sumę kwadratów wartości pola X.
values(X) Zwraca listę wszystkich unikatowych wartości pola X jako wpis wielowartościowy. Kolejność wartości jest alfabetyczna. make_set() …\| summarize r = make_set(X)
var(X) Zwraca przykładową wariancję pola X. Wariancji variance(X)

Następne kroki

Nauczono się identyfikować, porównywać i mapować reguły wykrywania Splunk na reguły analityczne Microsoft Sentinel. Kontynuuj migrację automatyzacji SOAR.