Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Splunk-identifieringsregler är SIEM-komponenter (säkerhetsinformation och händelsehantering) som jämförs med analysregler i Microsoft Sentinel. Denna artikel beskriver de koncept som används för att identifiera, jämföra och migrera Splunk-detekteringsregler till Microsoft Sentinel. Det bästa sättet att migrera Splunk-identifieringsregler till Microsoft Sentinel är att börja med SIEM-migreringsupplevelsen, som identifierar OOTB-analysregler (out-of-the-box) för automatisk översättning.
Om du vill migrera Splunk Observability-distributionen kan du läsa mer om hur du migrerar från Splunk till Azure Monitor-loggar.
Granskningsregler
Microsoft Sentinel använder maskininlärningsanalys för att skapa incidenter med hög återgivning och åtgärd. Några av dina befintliga Splunk-detektioner kan vara redundanta i Microsoft Sentinel, så migrera inte alla Splunk-detektioner blint. Granska följande överväganden för regelgranskning när du identifierar dina befintliga identifieringsregler.
- Se till att välja användningsfall som motiverar regelmigrering, med hänsyn till affärsprioritet och effektivitet.
- Kontrollera att du förstår Microsoft Sentinel regeltyper.
- Kontrollera att du förstår regelterminologin.
- Granska inaktuella regler som inte har aviseringar under de senaste 6–12 månaderna och ta reda på om de fortfarande är relevanta.
- Eliminera hot eller aviseringar på låg nivå som du rutinmässigt ignorerar.
- Microsoft Sentinel Analytics kräver att datatypen finns på Log Analytics-arbetsytan innan en regel aktiveras. Bekräfta att dina datakällor som krävs är anslutna och granska dina dataanslutningsmetoder. Gå tillbaka till datainsamlingskonversationer för att säkerställa datadjup och bredd i de användningsfall som du planerar att identifiera. Använd sedan SIEM-migreringsupplevelsen för att se till att datakällorna mappas på rätt sätt.
Migrering av regler
När du har identifierat de Splunk-identifieringar som ska migreras läser du följande överväganden för migreringsprocessen:
- Jämför befintliga funktioner i Microsoft Sentinel OOTB-analysregler med dina aktuella användningsfall. Använd SIEM-migreringsfunktionen för att se vilka Splunk-identifieringar som automatiskt konverteras till OOTB-mallar.
- Översätt detekteringar som inte matchar OOTB-analysregler. Det bästa sättet att översätta Splunk-identifieringar automatiskt är med SIEM-migreringsupplevelsen.
- Upptäck fler algoritmer för dina användningsfall genom att utforska communityresurser som SOC Prime Threat Detection Marketplace.
- Översätt detekteringar manuellt om inbyggda regler saknas eller inte översätts automatiskt. Skapa de nya KQL-frågorna och granska regelmappningen.
Mer information finns i metodtips för migrering av identifieringsregler.
Steg för regelmigrering
Följ dessa steg för att verifiera, översätta och testa varje Splunk-identifieringsregel under migreringen till Microsoft Sentinel.
Kontrollera att du har ett testsystem för varje regel som du vill migrera.
Förbered en valideringsprocess för dina migrerade regler, inklusive fullständiga testscenarier och skript.
Se till att ditt team har användbara resurser för att testa dina migrerade regler.
Bekräfta att du har de datakällor som krävs anslutna och granska dina dataanslutningsmetoder.
Kontrollera om dina identifieringar är tillgängliga som OOTB-mallar i Microsoft Sentinel:
Använd SIEM-migreringsupplevelsen för att automatisera översättning och installation av OOTB-mallarna.
Mer information finns i Använda SIEM-migreringsmiljön.
Om du har användningsfall som inte återspeglas i identifieringarna skapar du regler för din egen arbetsyta med OOTB-regelmallar.
I Microsoft Sentinel går du till innehållshubben.
Filtrera Innehållstyp för mallar för analysregler.
Hitta och installera/uppdatera varje motsvarande innehållshubblösning eller fristående analysregelmall.
Mer information finns i Identifiera hot direkt.
Om du har identifieringar som inte omfattas av Microsoft Sentinel OOTB-regler kan du först prova SIEM-migrering för automatisk översättning.
Om varken OOTB-reglerna eller SIEM-migreringen helt översätter identifieringen skapar du regeln manuellt. Använd följande steg för att skapa regeln:
Identifiera de datakällor som du vill använda i regeln. Identifiera de Microsoft Sentinel tabeller som du vill köra frågor mot genom att skapa en mappningstabell mellan datakällor och datatabeller.
Identifiera eventuella attribut, fält eller entiteter i dina data som du vill använda i dina regler.
Identifiera dina regelkriterier och logik. När du identifierar dina regelkriterier och logik bör du överväga att använda regelmallar som exempel för hur du skapar dina KQL-frågor.
Överväg filter, korrelationsregler, aktiva listor, referensuppsättningar, visningslistor, identifieringsavvikelser, aggregeringar och så vidare. Du kan använda referenser från din äldre SIEM för att förstå hur du bäst mappar din frågesyntax.
Identifiera utlösarvillkoret och regelåtgärden och konstruera och granska sedan KQL-frågan. När du granskar din fråga kan du ta hjälp av vägledningsresurser för KQL-optimering.
Testa regeln med var och en av dina relevanta användningsfall. Om den inte ger förväntade resultat granskar du och redigerar KQL och testar den igen.
När du är nöjd kan du betrakta regeln som migrerad. Skapa en spelbok för regelåtgärden efter behov. Mer information finns i Automatisera hotsvar med spelböcker i Microsoft Sentinel.
Läs mer om analysregler:
- Skapa anpassade analysregler för att identifiera hot. Använd aviseringsgruppering för att minska aviseringströttheten genom att gruppera aviseringar som inträffar inom en viss tidsram.
- Mappa datafält till entiteter i Microsoft Sentinel så att SOC-tekniker kan definiera entiteter som en del av de bevis som ska spåras under en undersökning. Entitetsmappning gör det också möjligt för SOC-analytiker att dra nytta av ett intuitivt [undersökningsdiagram] (investigate-cases.md#use-the-investigation-graph-to-deep-dive) som kan bidra till att minska tid och arbete.
- Undersök incidenter med UEBA-data, som ett exempel på hur du använder bevis för att visa händelser, aviseringar och bokmärken som är associerade med en viss incident i fönstret incidentförhandsgranskning.
- Kusto-frågespråk (KQL) som du kan använda för att skicka skrivskyddade begäranden till Log Analytics-databasen för att bearbeta data och returnera resultat. KQL används också i andra Microsoft-tjänster, till exempel Microsoft Defender för Endpoint och Application Insights.
Jämför regelterminologi
I följande jämförelsetabell beskrivs hur en KQL-baserad regel i Microsoft Sentinel motsvarar en SPL-baserad identifiering i Splunk.
| Splunk | Microsoft Sentinel | |
|---|---|---|
| Regeltyp | •Planerad •Realtid |
• Schemalagd fråga • Fusion • Microsoft Security • Beteendeanalys för strojové učenie (ML) |
| Kriterier | Definiera i SPL | Definiera i KQL |
| Utlösarvillkor | • Antal resultat • Antal värdar • Antal källor • Anpassad |
Tröskelvärde: Antal frågeresultat |
| Åtgärd | • Lägg till i utlösta aviseringar • Logghändelse • Utdataresultat som ska slås upp • Och mer |
• Skapa avisering eller incident • Integrerar med Logic Apps |
Mappa och jämföra regelexempel
Använd SPL-till-KQL-exempeltabellerna och exemplen i detta avsnitt för att jämföra och kartlägga regler från Splunk till Microsoft Sentinel i olika scenarier.
Jämför vanliga Splunk-sökkommandon med KQL-exempel
Denna tabell mappar vanliga SPL-sökkommandon till deras KQL-motsvarigheter i Microsoft Sentinel.
| SPL-kommando | Beskrivning | KQL-operator | KQL-exempel |
|---|---|---|---|
chart/ timechart |
Returnerar resultat i tabellutdata för tidsseriediagram. | renderingsoperator | … | render timechart |
dedup |
Tar bort efterföljande resultat som matchar ett angivet villkor. | • distinkt • sammanfatta |
… | summarize by Computer, EventID |
eval |
Beräknar ett uttryck. Läs mer om vanliga eval kommandon. |
Utöka | T | extend duration = endTime - startTime |
fields |
Tar bort fält från sökresultat. | • projekt • projekt bort |
T | project cost=price*quantity, price |
head/tail |
Returnerar det första eller sista N resultatet. | Topp | T | top 5 by Name desc nulls last |
lookup |
Lägger till fältvärden från en extern källa. | • externdata • uppslagning |
Exempel på uppslagskommando KQL |
rename |
Byter namn på ett fält. Använd jokertecken för att ange flera fält. | project-rename | T | project-rename new_column_name = column_name |
rex |
Anger gruppnamn som använder reguljära uttryck för att extrahera fält. | matchar reguljärt uttryck | … | where field matches regex "^addr.*" |
search |
Filtrerar resultat till resultat som matchar sökuttrycket. | Sök | search "X" |
sort |
Sorterar sökresultaten efter de angivna fälten. | Sortera | T | sort by strlen(country) asc, price desc |
stats |
Innehåller statistik, om du vill gruppera efter fält. Läs mer om vanliga statistikkommandon. | Sammanfatta | Exempel på statskommando KQL |
mstats |
Liknar statistik som används för mått i stället för händelser. | Sammanfatta | Mstats-kommando KQL-exempel |
table |
Anger vilka fält som ska behållas i resultatuppsättningen och behåller data i tabellformat. | Projekt | T | project columnA, columnB |
top/rare |
Visar de vanligaste eller minst vanliga värdena för ett fält. | Topp | T | top 5 by Name desc nulls last |
transaction |
Grupperar sökresultat i transaktioner. Exempel på transaktionskommando SPL |
Exempel: row_window_session | Exempel på transaktionskommando KQL |
eventstats |
Genererar sammanfattningsstatistik från fält i dina händelser och sparar den statistiken i ett nytt fält. SPL-exempel |
Exempel: • Anslut • make_list • mv-expandera |
KQL-exempel |
streamstats |
Hitta den kumulativa summan av ett fält. SPL-exempel: ... | streamstats sum(bytes) as bytes _ total \| timechart |
row_cumsum | ...\| serialize cs=row_cumsum(bytes) |
anomalydetection |
Hitta avvikelser i det angivna fältet. SPL-exempel |
series_decompose_anomalies() | KQL-exempel |
where |
Filtrerar sökresultat med hjälp av eval uttryck. Används för att jämföra två olika fält. |
Där | T | where fruit=="apple" |
lookup kommando: KQL-exempel
Detta KQL-exempel använder externaldata det för att replikera SPL-mönstret lookup genom att filtrera användare mot en extern datakälla.
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 kommando: KQL-exempel
Detta KQL-exempel används summarize för att räkna transaktioner och summera totaler, grupperade efter frukt och månad.
Sales
| summarize NumTransactions=count(),
Total=sum(UnitPrice * NumUnits) by Fruit,
StartOfMonth=startofmonth(SellDateTime)
mstats kommando: KQL-exempel
Detta KQL-exempel placerar metriska värden i prisintervall och räknar posterna i varje intervall.
T | summarize count() by price_range=bin(price, 10.0)
transaction kommando: SPL-exempel
Detta SPL-exempel grupperar relaterade start- och stopphändelser i en enda transaktion efter aktivitets-ID.
sourcetype=MyLogTable type=Event
| transaction ActivityId startswith="Start" endswith="Stop"
| Rename timestamp as StartTime
| Table City, ActivityId, StartTime, Duration
transaction kommando: KQL-exempel
Detta KQL-exempel replikerar SPL-transaktionsgruppering genom att slå ihop start- och stopphändelser på ett delat aktivitets-ID och beräkna varaktigheten.
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
Använd row_window_session() för att beräkna sessionsstartvärden för en kolumn i en serialiserad raduppsättning.
...| extend SessionStarted = row_window_session(
Timestamp, 1h, 5m, ID != prev(ID))
eventstats kommando: SPL-exempel
Detta SPL-exempel beräknar händelseantal per kategori i en-minut-bins och lägger sedan till en totalsumma per tid-bin med hjälp av eventstats.
… | bin span=1m _time
|stats count AS count_i by _time, category
| eventstats sum(count_i) as count_total by _time
eventstats kommando: KQL-exempel
Här är ett exempel med satsen 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
Här är ett exempel med satsen 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 kommando: SPL-exempel
Detta SPL-exempel upptäcker avvikelser i historiska stängningskursdata under en tioårsperiod.
sourcetype=nasdaq earliest=-10y
| anomalydetection Close _ Price
anomalydetection kommando: KQL-exempel
Detta KQL-exempel använder tidsserieanalysfunktioner för att upptäcka avvikelser i trender för inloggning med inaktiverade konton under en sju dagars tillbakablicksperiod.
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)
Jämför vanliga Splunk-kommandon eval med KQL-ekvivalenter
Denna tabell mappar vanliga SPL-funktioner eval till deras KQL-motsvarigheter i Microsoft Sentinel.
| SPL-kommando | Beskrivning | SPL-exempel | KQL-kommando | KQL-exempel |
|---|---|---|---|---|
abs(X) |
Returnerar det absoluta värdet för X. | abs(number) |
abs() |
abs(X) |
case(X,"Y",…) |
Tar par med X argument och Y där argumenten X är booleska uttryck. När argumenten utvärderas till TRUEreturneras motsvarande Y argument. |
SPL-exempel | case |
KQL-exempel |
ceil(X) |
Tak för ett tal X. | ceil(1.9) |
ceiling() |
ceiling(1.9) |
cidrmatch("X",Y) |
Identifierar IP-adresser som tillhör ett visst undernät. | 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,…) |
Returnerar det första värdet som inte är null. | coalesce(null(), "Returned val", null()) |
coalesce() |
coalesce(tolong("not a number"),tolong("42"), 33) == 42 |
cos(X) |
Beräknar cosiné för X. | n=cos(0) |
cos() | cos(X) |
exact(X) |
Utvärderar ett uttryck X med flyttalsaritmetik med dubbel precision. | exact(3.14*num) |
todecimal() |
todecimal(3.14*2) |
exp(X) |
Returnerar eX. | exp(3) |
exp() | exp(3) |
if(X,Y,Z) |
Om X utvärderas till TRUEär resultatet det andra argumentet Y. Om X utvärderas till FALSEutvärderas resultatet till det tredje argumentet Z. |
if(error==200,"OK", "Error") |
iff() |
KQL-exempel |
isbool(X) |
Returnerar TRUE om X är booleskt. |
isbool(field) |
• iff()• gettype |
iff(gettype(X) =="bool","TRUE","FALSE") |
isint(X) |
Returnerar TRUE om X är ett heltal. |
isint(field) |
• iff()• gettype |
KQL-exempel |
isnull(X) |
Returnerar TRUE om X är null. |
isnull(field) |
isnull() |
isnull(field) |
isstr(X) |
Returnerar TRUE om X är en sträng. |
isstr(field) |
• iff()• gettype |
KQL-exempel |
len(X) |
Den här funktionen returnerar teckenlängden för en sträng X. |
len(field) |
strlen() |
strlen(field) |
like(X,"y") |
Returnerar TRUE om och endast om X är som SQLite-mönstret i Y. |
like(field, "addr%") |
• has• contains• startswith• matchar reguljärt uttryck |
KQL-exempel |
log(X,Y) |
Returnerar loggen för det första argumentet X med det andra argumentet Y som bas. Standardvärdet Y för är 10. |
log(number,2) |
• log• log2• log10 |
log(X)log2(X)log10(X) |
lower(X) |
Returnerar värdet i gemener för X. |
lower(username) |
tolower | tolower(username) |
ltrim(X,Y) |
Returnerar X med tecknen i parametern Y borttagna från vänster. Standardutmatningen för Y består av blanksteg och tabbar. |
ltrim(" ZZZabcZZ ", " Z") |
trim_start() |
trim_start(“ ZZZabcZZ”,” ZZZ”) |
match(X,Y) |
Returnerar om X matchar regexmönstret Y. | match(field, "^\d{1,3}.\d$") |
matches regex |
… | where field matches regex @"^\d{1,3}.\d$") |
max(X,…) |
Returnerar det maximala värdet i en kolumn. | max(delay, mydelay) |
• max()• arg_max() |
… | summarize max(field) |
md5(X) |
Returnerar MD5-hashen för ett strängvärde X. |
md5(field) |
hash_md5 |
hash_md5("X") |
min(X,…) |
Returnerar minimivärdet i en kolumn. | min(delay, mydelay) |
• min_of()• min() • arg_min |
KQL-exempel |
mvcount(X) |
Returnerar antalet (totalt) X värden. |
mvcount(multifield) |
dcount |
…| summarize dcount(X) by Y |
mvfilter(X) |
Filtrerar ett flervärdesfält baserat på det booleska X uttrycket. |
mvfilter(match(email, "net$")) |
mv-apply |
KQL-exempel |
mvindex(X,Y,Z) |
Returnerar en delmängd av flervärdesargumentet X från en startposition (nollbaserad) Y till Z (valfritt). |
mvindex( multifield, 2) |
array_slice |
array_slice(arr, 1, 2) |
mvjoin(X,Y) |
Givet ett flervärdesfält X och strängavgränsaren Y sammanfogas de enskilda värdena i X med Y. |
mvjoin(address, ";") |
strcat_array |
KQL-exempel |
now() |
Returnerar aktuell tid, representerad i Unix-tid. | now() |
now() |
now()now(-2d) |
null() |
Accepterar inte argument och returnerar NULL. |
null() |
Null | null |
nullif(X,Y) |
Innehåller två argument och XY, och returnerar X om argumenten är olika. Annars visas NULL. |
nullif(fieldA, fieldB) |
iff |
iff(fieldA==fieldB, null, fieldA) |
random() |
Returnerar ett pseudo-slumptal mellan 0 till 2147483647. |
random() |
rand() |
rand() |
relative_ time(X,Y) |
Givet en epoktid X och en relativ tidsangivelse Y returneras epoktidsvärdet när Y tillämpas på X. |
relative_time(now(),"-1d@d") |
unix-tid | KQL-exempel |
replace(X,Y,Z) |
Returnerar en sträng som bildas genom att ersätta strängen Z för varje förekomst av reguljär uttryckssträng Y i strängen X. |
Returnerar datum med månads- och dagnummer växlade. För exempelindata 4/30/2015 är utdata 30/4/2009:replace(date, "^(\d{1,2})/ (\d{1,2})/", "\2/\1/") |
replace() |
KQL-exempel |
round(X,Y) |
Returnerar X avrundat till antalet decimaler som anges av Y. Standardvärdet är att avrunda till ett heltal. |
round(3.5) |
round |
round(3.5) |
rtrim(X,Y) |
Returnerar X med tecknen i Y borttagna från höger sida. Om Y inte anges trimmas blanksteg och flikar. |
rtrim(" ZZZZabcZZ ", " Z") |
trim_end() |
trim_end(@"[ Z]+",A) |
searchmatch(X) |
Returnerar TRUE om händelsen matchar söksträngen X. |
searchmatch("foo AND bar") |
iff() | iff(field has "X","Yes","No") |
split(X,"Y") |
Returnerar X som ett flervärdesfält, delat med avgränsare Y. |
split(address, ";") |
split() |
split(address, ";") |
sqrt(X) |
Returnerar kvadratroten för X. |
sqrt(9) |
sqrt() |
sqrt(9) |
strftime(X,Y) |
Returnerar epoktidsvärdet X som återges med formatet som anges av Y. |
strftime(_time, "%H:%M") |
format_datetime() |
format_datetime(time,'HH:mm') |
strptime(X,Y) |
Givet en tid som representeras av en sträng Xreturneras värdet parsat från formatet Y. |
strptime(timeStr, "%H:%M") |
format_datetime() | KQL-exempel |
substr(X,Y,Z) |
Returnerar ett delsträngsfält X från startpositionen (enbaserad) Y för Z (valfria) tecken. |
substr("string", 1, 3) |
substring() |
substring("string", 0, 3) |
time() |
Returnerar wall-clock-tiden med mikrosekundersupplösning. | time() |
format_datetime() |
KQL-exempel |
tonumber(X,Y) |
Konverterar indatasträngen X till ett tal, där Y (valfritt, standardvärde är 10) definierar basen för talet som ska konverteras till. |
tonumber("0A4",16) |
toint() |
toint("123") |
tostring(X,Y) |
Beskrivning | SPL-exempel | tostring() |
tostring(123) |
typeof(X) |
Returnerar en strängrepresentation av fälttypen. | typeof(12) |
gettype() |
gettype(12) |
urldecode(X) |
Returnerar url-avkodad X . |
SPL-exempel | url_decode |
KQL-exempel |
case(X,"Y",…) SPL-exempel
Detta SPL-exempel returnerar en annan meddelandesträng baserat på HTTP-felkoden.
case(error == 404, "Not found",
error == 500,"Internal Server Error",
error == 200, "OK")
case(X,"Y",…) KQL-exempel
Detta KQL-exempel använder case() för att tilldela ett meddelande baserat på felkodens värde.
T
| extend Message = case(error == 404, "Not found",
error == 500,"Internal Server Error", "OK")
if(X,Y,Z) KQL-exempel
Detta KQL-exempel används iif() för att ange om en tidsstämpel är aktuell på den aktuella dagen.
iif(floor(Timestamp, 1d)==floor(now(), 1d),
"today", "anotherday")
isint(X) KQL-exempel
Detta KQL-exempel kontrollerar om X har en heltalskompatibel typ genom att använda gettype och iif.
iif(gettype(X) =="long","TRUE","FALSE")
isstr(X) KQL-exempel
Detta KQL-exempel kontrollerar om X är ett strängvärde genom att använda gettype och iif.
iif(gettype(X) =="string","TRUE","FALSE")
like(X,"y") Exempel
Dessa KQL-exempel visar flera strängmatchningsoperatorer som du kan använda för att replikera SPL-mönstermatchning like .
… | where field has "addr"
… | where field contains "addr"
… | where field startswith "addr"
… | where field matches regex "^addr.*"
min(X,…) KQL-exempel
Dessa KQL-exempel visar olika sätt att beräkna minimivärden med hjälp av min_of, min, och arg_min.
min_of (expr_1, expr_2 ...)
…|summarize min(expr)
…| summarize arg_min(Price,*) by Product
mvfilter(X) KQL-exempel
Detta KQL-exempel använder mv-apply det för att filtrera och minska innehåll med flera värden, liknande SPL-funktionen mvfilter .
T | mv-apply Metric to typeof(real) on
(
top 2 by Metric desc
)
mvjoin(X,Y) KQL-exempel
Detta KQL-exempel använder strcat_array att sammanfoga arrayelement till en enda sträng med en anpassad separator.
strcat_array(dynamic([1, 2, 3]), "->")
relative time(X,Y) KQL-exempel
Detta KQL-exempel konverterar ett datetime-värde till Unix-epoktid för relativa tidsberäkningar.
let toUnixTime = (dt:datetime)
{
(dt - datetime(1970-01-01))/1s
};
replace(X,Y,Z) KQL-exempel
Detta KQL-exempel använder replace() med ett regex-mönster för att byta ut månads- och dagdelarna av en datumsträng.
replace( @'^(\d{1,2})/(\d{1,2})/', @'\2/\1/',date)
strptime(X,Y) KQL-exempel
Detta KQL-exempel använder format_datetime endast att visa timmar och minuter från ett datumtidsvärde.
format_datetime(datetime('2017-08-16 11:25:10'),
'HH:mm')
time() KQL-exempel
Detta KQL-exempel formaterar ett datumtidsvärde som en tidssträng som visar timmar, minuter och sekunder.
format_datetime(datetime(2015-12-14 02:03:04),
'h:m:s')
tostring(X,Y) Beskrivning
SPL-funktionen tostring(X,Y) konverterar värden till strängar och stöder flera formateringsalternativ. Den returnerar ett fältvärde av X som en sträng.
- Om värdet
Xför är ett talXformateras det om till ett strängvärde. - Om
Xär ett booleskt värdeXformateras om tillTRUEellerFALSE. - Om
Xär ett tal är det andra argumentetYvalfritt och kan antingen varahex(konverterarXtill ett hexadecimalt),commas(format med kommatecken och två decimaler) ellerX(konverterar från ett tidsformatdurationi sekunder till ett läsbart tidsformatX:HH:MM:SS).
tostring(X,Y) SPL-exempel
Detta tostring SPL-exempel ger:
foo=615 and foo2=00:10:15:
… | eval foo=615 | eval foo2 = tostring(
foo, "duration")
urldecode(X) SPL-exempel
Detta SPL-exempel avkodar en URL-kodad sträng tillbaka till dess ursprungliga form.
urldecode("http%3A%2F%2Fwww.splunk.com%2Fdownload%3Fr%3Dheader")
Jämför vanliga Splunk-kommandon stats med KQL-ekvivalenter
Denna tabell mappar vanliga SPL-aggregeringsfunktioner stats till deras KQL-motsvarigheter i Microsoft Sentinel.
| SPL-kommando | Beskrivning | KQL-kommando | KQL-exempel |
|---|---|---|---|
avg(X) |
Returnerar medelvärdet av värdena i fältet X. |
avg() | avg(X) |
count(X) |
Returnerar antalet förekomster av fältet X. Om du vill ange ett specifikt fältvärde som ska matchas formaterar du X som eval(field="value"). |
count() | summarize count() |
dc(X) |
Returnerar antalet distinkta värden i fältet X. |
dcount() | …\| summarize countries=dcount(country) by continent |
earliest(X) |
Returnerar det kronologiskt tidigaste värdet för X. |
arg_min() | … \| summarize arg_min(TimeGenerated, *) by X |
latest(X) |
Returnerar det kronologiskt senast sedda värdet för X. |
arg_max() | … \| summarize arg_max(TimeGenerated, *) by X |
max(X) |
Returnerar det maximala värdet för fältet X. Om värdena X för är icke-numeriska hittas det maximala värdet via alfabetisk ordning. |
max() | …\| summarize max(X) |
median(X) |
Returnerar det mittersta värdet för fältet X. |
percentile() | …\| summarize percentile(X, 50) |
min(X) |
Returnerar minimivärdet för fältet X. Om värdena X för är icke-numeriska, hittas det minsta värdet via alfabetisk ordning. |
min() | …\| summarize min(X) |
mode(X) |
Returnerar det vanligaste värdet för fältet X. |
top-hitters() | …\| top-hitters 1 of Y by X |
perc(Y) |
Returnerar percentilvärdet X för fältet Y. Returnerar till exempel perc5(total) det femte percentilvärdet för ett fält total. |
percentile() | …\| summarize percentile(Y, 5) |
range(X) |
Returnerar skillnaden mellan det högsta och lägsta värdet för fältet X. |
range() | range(1, 3) |
stdev(X) |
Returnerar exempelstandardavvikelsen för fältet X. |
Stdav | stdev() |
stdevp(X) |
Returnerar populationens standardavvikelse för fältet X. |
stdevp() | stdevp() |
sum(X) |
Returnerar summan av värdena i fältet X. |
sum() | sum(X) |
sumsq(X) |
Returnerar summan av kvadraterna för värdena i fältet X. |
||
values(X) |
Returnerar listan över alla distinkta värden i fältet X som en post med flera värden. Värdenas ordning är alfabetisk. |
make_set() | …\| summarize r = make_set(X) |
var(X) |
Returnerar exempelavvikelsen för fältet X. |
varians | variance(X) |
Nästa steg
Du har lärt dig att identifiera, jämföra och mappa Splunk-identifieringsregler till Microsoft Sentinel analysregler. Fortsätt att migrera din SOAR-automatisering.