Splunk-detectieregels migreren naar Microsoft Sentinel

Splunk-detectieregels zijn SIEM-onderdelen (Security Information and Event Management) die vergelijkbaar zijn met analyseregels in Microsoft Sentinel. Dit artikel beschrijft de concepten die worden gebruikt om Splunk-detectieregels te identificeren, te vergelijken en te migreren naar Microsoft Sentinel. De beste manier om Splunk-detectieregels te migreren naar Microsoft Sentinel is om te beginnen met de SIEM-migratie-ervaring, die kant-en-klare analyseregels (OOTB) identificeert voor automatische vertaling.

Als u uw Splunk Observability-implementatie wilt migreren, vindt u meer informatie over het migreren van Splunk naar Azure Monitor-logboeken.

Controleregels

Microsoft Sentinel maakt gebruik van machine learning-analyse om incidenten met hoge kwaliteit en actie mogelijk te maken. Sommige van je bestaande Splunk-detecties kunnen overbodig zijn in Microsoft Sentinel, dus migreer niet alle Splunk-detecties blind. Bekijk de volgende overwegingen bij het controleren van regels wanneer u uw bestaande detectieregels identificeert.

  • Zorg ervoor dat u use cases selecteert die regelmigratie rechtvaardigen, rekening houdend met bedrijfsprioriteit en efficiëntie.
  • Controleer of u Microsoft Sentinel regeltypen begrijpt.
  • Controleer of u de terminologie van de regel begrijpt.
  • Bekijk verouderde regels die geen waarschuwingen bevatten voor de afgelopen 6-12 maanden en bepaal of ze nog steeds relevant zijn.
  • Elimineer bedreigingen op laag niveau of waarschuwingen die u regelmatig negeert.
  • Microsoft Sentinel Analytics vereisen dat het gegevenstype aanwezig is in de Log Analytics-werkruimte voordat een regel wordt ingeschakeld. Controleer of de vereiste gegevensbronnen zijn verbonden en controleer uw gegevensverbindingsmethoden. Bekijk de gesprekken over gegevensverzameling opnieuw om ervoor te zorgen dat de data voldoende diepgang en breedte hebben voor de gebruiksscenario’s die u wilt kunnen detecteren. Gebruik vervolgens de SIEM-migratie-ervaring om ervoor te zorgen dat de gegevensbronnen op de juiste manier worden toegewezen.

Regels migreren

Nadat u de Splunk-detecties hebt geïdentificeerd die moeten worden gemigreerd, bekijkt u de volgende overwegingen voor het migratieproces:

  • Vergelijk de bestaande functionaliteit van de OOTB-analyseregels van Microsoft Sentinel met uw huidige use cases. Gebruik de SIEM-migratie-ervaring om te zien welke Splunk-detecties automatisch worden geconverteerd naar OOTB-sjablonen.
  • Detecties vertalen die niet zijn afgestemd op OOTB-analyseregels. De beste manier om Splunk-detecties automatisch te vertalen, is met de SIEM-migratie-ervaring.
  • Ontdek meer algoritmen voor uw use cases door communitybronnen te verkennen, zoals de SOC Prime Threat Detection Marketplace.
  • Detecties handmatig vertalen als ingebouwde regels niet beschikbaar zijn of niet automatisch worden vertaald. Stel de nieuwe KQL-query's op en controleer de regeltoewijzing.

Zie aanbevolen procedures voor het migreren van detectieregels voor meer informatie.

Stappen voor het migreren van regels

Volg deze stappen om elke Splunk-detectieregel tijdens de migratie naar Microsoft Sentinel te valideren, te vertalen en te testen.

  1. Controleer of u een testsysteem hebt voor elke regel die u wilt migreren.

    1. Bereid een validatieproces voor voor uw gemigreerde regels, inclusief volledige testscenario's en scripts.

    2. Zorg ervoor dat uw team nuttige bronnen heeft om uw gemigreerde regels te testen.

    3. Controleer of de vereiste gegevensbronnen zijn verbonden en controleer de methoden voor gegevensverbinding.

  2. Controleer of uw detecties beschikbaar zijn als OOTB-sjablonen in Microsoft Sentinel:

    • Gebruik de SIEM-migratie-ervaring om de vertaling en installatie van de OOTB-sjablonen te automatiseren.

      Zie De SIEM-migratie-ervaring gebruiken voor meer informatie.

    • Als u use cases hebt die niet worden weergegeven in de detecties, maakt u regels voor uw eigen werkruimte met OOTB-regelsjablonen.

      Ga in Microsoft Sentinel naar de Content hub.

      Filter op Inhoudstype voor sjablonen voor analyseregels.

      Zoek en installeer/werk elke bijbehorende Content Hub-oplossing of zelfstandige analyseregelsjabloon bij.

      Zie Bedreigingen standaard detecteren voor meer informatie.

    • Als u detecties hebt die niet worden gedekt door de OOTB-regels van Microsoft Sentinel, probeert u eerst de SIEM-migratie-ervaring voor automatische vertaling.

    • Als de OOTB-regels en de SIEM-migratie de detectie niet volledig vertalen, maakt u de regel handmatig. Gebruik de volgende stappen om uw regel te maken:

      1. Identificeer de gegevensbronnen die u in uw regel wilt gebruiken. Identificeer de Microsoft Sentinel tabellen die u wilt opvragen door een toewijzingstabel te maken tussen gegevensbronnen en gegevenstabellen.

      2. Identificeer kenmerken, velden of entiteiten in uw gegevens die u in uw regels wilt gebruiken.

      3. Bepaal de criteria en logica voor uw regel. Wanneer u uw regelcriteria en logica identificeert, kunt u regelsjablonen gebruiken als voorbeelden voor het maken van uw KQL-query's.

        Denk aan filters, correlatieregels, actieve lijsten, verwijzingssets, volglijsten, detectieafwijkingen, aggregaties, enzovoort. U kunt referenties van uw legacy-SIEM gebruiken om inzicht te krijgen in hoe u uw querysyntaxis het best kunt toewijzen.

      4. Identificeer de triggervoorwaarde en regelactie en stel vervolgens uw KQL-query samen en controleer deze. Wanneer u uw query bekijkt, kunt u rekening houden met hulpmiddelen voor KQL-optimalisatie.

  3. Test de regel met elk van uw relevante use cases. Als er geen verwachte resultaten worden weergegeven, controleert en bewerkt u de KQL en test u deze opnieuw.

  4. Wanneer u tevreden bent, kunt u de regel als gemigreerd beschouwen. Maak zo nodig een playbook voor uw regelactie. Zie Reactie op bedreigingen automatiseren met playbooks in Microsoft Sentinel voor meer informatie.

Meer informatie over analyseregels:

Regelterminologie vergelijken

In de volgende vergelijkingstabel wordt uitgelegd hoe een op KQL gebaseerde regel in Microsoft Sentinel overeenkomt met een SPL-detectie in Splunk.

Splunk Microsoft Sentinel
Regeltype • Gepland
•Real-time
• Geplande zoekopdracht
•Fusion
• Microsoft-beveiliging
• Machine Learning (ML) Gedragsanalyse
Criteria Definiëren in SPL Definiëren in KQL
Triggervoorwaarde • Aantal resultaten
• Aantal hosts
• Aantal bronnen
• Aangepast
Drempelwaarde: aantal queryresultaten
Actie • Toevoegen aan geactiveerde waarschuwingen
• Logboek gebeurtenis
• Uitvoerresultaten om op te zoeken
• En meer
• Waarschuwing of incident maken
• Integreert met Logic Apps

Regelvoorbeelden koppelen en vergelijken

Gebruik de SPL-naar-KQL voorbeeldtabellen en voorbeelden in deze sectie om regels van Splunk naar Microsoft Sentinel in verschillende scenario's te vergelijken en toe te wijzen.

Vergelijk veelvoorkomende Splunk-zoekcommando's met KQL-voorbeelden

Deze tabel koppelt veelvoorkomende SPL-zoekcommando's aan hun KQL-equivalenten in Microsoft Sentinel.

SPL-opdracht Beschrijving KQL-operator KQL-voorbeeld
chart/ timechart Retourneert resultaten in een tabellaire uitvoer voor tijdreeksgrafieken. renderoperator … | render timechart
dedup Hiermee verwijdert u volgende resultaten die overeenkomen met een opgegeven criterium. uniek
samenvatten
… | summarize by Computer, EventID
eval Berekent een expressie. Meer informatie over algemene eval opdrachten. Uitbreiden T | extend duration = endTime - startTime
fields Hiermee verwijdert u velden uit zoekresultaten. project
project-afwezig
T | project cost=price*quantity, price
head/tail Retourneert de eerste of laatste N-resultaten. bovenaan T | top 5 by Name desc nulls last
lookup Hiermee worden veldwaarden uit een externe bron toegevoegd. externe gegevens
opzoeken
Voorbeeld van het opzoekcommando KQL
rename Hiermee wijzigt u de naam van een veld. Gebruik jokertekens om meerdere velden op te geven. projectnaam wijzigen T | project-rename new_column_name = column_name
rex Hiermee geeft u groepsnamen op met behulp van reguliere expressies om velden te extraheren. komt overeen met regex … | where field matches regex "^addr.*"
search Hiermee worden resultaten gefilterd op resultaten die overeenkomen met de zoekexpressie. Zoek search "X"
sort Hiermee sorteert u de zoekresultaten op de opgegeven velden. Sorteren T | sort by strlen(country) asc, price desc
stats Biedt statistieken, optioneel gegroepeerd op velden. Meer informatie over algemene opdrachten voor statistieken. samenvatten Stats command KQL voorbeeld
mstats Vergelijkbaar met statistieken, gebruikt voor metrische gegevens in plaats van gebeurtenissen. samenvatten Mstats-commando KQL-voorbeeld
table Hiermee geeft u op welke velden in de resultatenset behouden blijven, en de gegevens blijven in tabelvorm behouden. Project T | project columnA, columnB
top/rare Geeft de meest of minst voorkomende waarden van een veld weer. bovenaan T | top 5 by Name desc nulls last
transaction De zoekresultaten worden gegroepeerd in transacties.

Voorbeeld van een transactiecommando SPL
Voorbeeld: row_window_session Voorbeeld van het transactiecommando KQL
eventstats Genereert samenvattingsstatistieken van velden in uw gebeurtenissen en slaat deze statistieken op in een nieuw veld.

SPL-voorbeeld
Voorbeelden:
deelnemen
make_list
mv-expand
KQL-voorbeeld
streamstats Zoek de cumulatieve som van een veld.

SPL-voorbeeld:
... | streamstats sum(bytes) as bytes _ total \| timechart
row_cumsum ...\| serialize cs=row_cumsum(bytes)
anomalydetection Zoek afwijkingen in het opgegeven veld.

SPL-voorbeeld
series_decompose_anomalies() KQL-voorbeeld
where Hiermee worden zoekresultaten gefilterd met behulp van eval expressies. Wordt gebruikt om twee verschillende velden te vergelijken. Waar T | where fruit=="apple"

lookup opdracht: KQL-voorbeeld

Dit KQL-voorbeeld wordt gebruikt externaldata om het SPL-patroon lookup te repliceren door gebruikers te filteren op een externe databron.

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 opdracht: KQL-voorbeeld

Dit KQL-voorbeeld gebruikt summarize het om transacties te tellen en totalen op te tellen, gegroepeerd op fruit en maand.

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

mstats opdracht: KQL-voorbeeld

Dit KQL-voorbeeld sorteert metrische waarden in prijsklassen en telt de records in elk bereik.

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

transaction opdracht: SPL-voorbeeld

Dit SPL-voorbeeld groepeert gerelateerde start- en stopgebeurtenissen in één transactie op basis van activiteits-ID.

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

transaction opdracht: KQL-voorbeeld

Dit KQL-voorbeeld repliceert SPL-transactiegroepering door start- en stopgebeurtenissen te joinen op een gedeelde activiteits-ID en de duur te berekenen.

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

Gebruik row_window_session() deze optie om sessiestartwaarden te berekenen voor een kolom in een geserialiseerde rijenset.

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

eventstats opdracht: SPL-voorbeeld

Dit SPL-voorbeeld berekent het aantal gebeurtenissen per categorie in één-minuut bins en voegt vervolgens een totaal per tijd-bin toe met behulp van eventstats.

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

eventstats opdracht: KQL-voorbeeld

Hier is een voorbeeld met de join-statement:

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

Hier is een voorbeeld met de make_list-statement:

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 opdracht: SPL-voorbeeld

Dit SPL-voorbeeld detecteert afwijkingen in historische sluitingsprijsgegevens over een periode van 10 jaar.

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

anomalydetection opdracht: KQL-voorbeeld

Dit KQL-voorbeeld gebruikt tijdreeksanalysefuncties om afwijkingen in inlogtrends van uitgeschakelde accounts te detecteren over een terugblikperiode van zeven dagen.

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)

Vergelijk veelvoorkomende Splunk-commando's eval met KQL-equivalenten

Deze tabel beeldt veelvoorkomende SPL-functies eval toe aan hun KQL-equivalenten in Microsoft Sentinel.

SPL-opdracht Beschrijving SPL-voorbeeld KQL-opdracht KQL-voorbeeld
abs(X) Retourneert de absolute waarde van X. abs(number) abs() abs(X)
case(X,"Y",…) Neemt paren van X- en Y-argumenten, waarbij de X-argumenten Booleaanse expressies zijn. Wanneer de waarde wordt geëvalueerd op TRUE, retourneren de argumenten het bijbehorende Y argument. SPL-voorbeeld case KQL-voorbeeld
ceil(X) Bovenwaarde van een getal X. ceil(1.9) ceiling() ceiling(1.9)
cidrmatch("X",Y) Hiermee worden IP-adressen geïdentificeerd die deel uitmaken van een bepaald subnet. 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,…) Retourneert de eerste waarde die niet null is. coalesce(null(), "Returned val", null()) coalesce() coalesce(tolong("not a number"),
tolong("42"), 33) == 42
cos(X) Berekent de cosinus van X. n=cos(0) cos() cos(X)
exact(X) Evalueert expressie X met drijvendekommaberekeningen in dubbele precisie. exact(3.14*num) todecimal() todecimal(3.14*2)
exp(X) Retourneert eX. exp(3) exp() exp(3)
if(X,Y,Z) Als X wordt geëvalueerd naar TRUE, is het resultaat het tweede argument Y. Als X resulteert in FALSE, dan is het resultaat het derde argument Z. if(error==200,
"OK", "Error")
iff() KQL-voorbeeld
isbool(X) Retourneert TRUE als X een Booleaanse waarde is. isbool(field) iff()
gettype
iff(gettype(X) =="bool","TRUE","FALSE")
isint(X) Retourneert TRUE als X een geheel getal is. isint(field) iff()
gettype
KQL-voorbeeld
isnull(X) Retourneert TRUE als X null is. isnull(field) isnull() isnull(field)
isstr(X) Retourneert TRUE als X een tekenreeks is. isstr(field) iff()
gettype
KQL-voorbeeld
len(X) Deze functie retourneert de tekenlengte van een tekenreeks X. len(field) strlen() strlen(field)
like(X,"y") Retourneert TRUE als en alleen als X is zoals het SQLite-patroon in Y. like(field, "addr%") has
contains
startswith
komt overeen met regex
KQL-voorbeeld
log(X,Y) Retourneert het logboek van het eerste argument X met het tweede argument Y als basis. De standaardwaarde van Y is 10. log(number,2) log
log2
log10
log(X)

log2(X)

log10(X)
lower(X) Geeft de waarde van X in kleine letters terug. lower(username) tolower tolower(username)
ltrim(X,Y) Geeft X terug waarbij de tekens die zijn opgegeven in parameter Y aan de linkerkant zijn verwijderd. De standaarduitvoer van Y is spaties en tabbladen. ltrim(" ZZZabcZZ ", " Z") trim_start() trim_start(“ ZZZabcZZ”,” ZZZ”)
match(X,Y) Retourneert als X overeenkomt met het regex-patroon Y. match(field, "^\d{1,3}.\d$") matches regex … | where field matches regex @"^\d{1,3}.\d$")
max(X,…) Retourneert de maximumwaarde in een kolom. max(delay, mydelay) max()
arg_max()
… | summarize max(field)
md5(X) Retourneert de MD5-hash van een tekenreekswaarde X. md5(field) hash_md5 hash_md5("X")
min(X,…) Retourneert de minimumwaarde in een kolom. min(delay, mydelay) min_of()
min()
arg_min
KQL-voorbeeld
mvcount(X) Retourneert het aantal (totaal) X waarden. mvcount(multifield) dcount …| summarize dcount(X) by Y
mvfilter(X) Filtert een veld met meerdere waarden op basis van de Booleaanse X expressie. mvfilter(match(email, "net$")) mv-apply KQL-voorbeeld
mvindex(X,Y,Z) Retourneert een subset van het argument met meerdere waarden X van een beginpositie (op basis van nul) Y tot Z (optioneel). mvindex( multifield, 2) array_slice array_slice(arr, 1, 2)
mvjoin(X,Y) Gegeven een veld X met meerdere waarden en het scheidingsteken Y, worden de afzonderlijke waarden van X samengevoegd met behulp van Y. mvjoin(address, ";") strcat_array KQL-voorbeeld
now() Retourneert de huidige tijd, weergegeven in Unix-tijd. now() now() now()

now(-2d)
null() Accepteert geen argumenten en retourneert NULL. null() null null
nullif(X,Y) Bevat twee argumenten en XY, en retourneert X als de argumenten verschillen. Anders wordt NULL geretourneerd. nullif(fieldA, fieldB) iff iff(fieldA==fieldB, null, fieldA)
random() Retourneert een pseudo-willekeurig getal tussen 0 tot 2147483647. random() rand() rand()
relative_ time(X,Y) Gegeven een epochtijd X en een relatieve tijdsaanduiding Y, retourneert dit de epochtijdwaarde van Y toegepast op X. relative_time(now(),"-1d@d") Unix-tijd KQL-voorbeeld
replace(X,Y,Z) Retourneert een tekenreeks die wordt gevormd door tekenreeks Z te vervangen voor elk exemplaar van een reguliere expressietekenreeks Y in tekenreeks X. Retourneert de datum waarbij de maand- en dagnummers zijn gewisseld.
Bijvoorbeeld is voor de 4/30/2015 invoer de uitvoer 30/4/2009:

replace(date, "^(\d{1,2})/ (\d{1,2})/", "\2/\1/")
replace() KQL-voorbeeld
round(X,Y) Geeft X terug, afgerond op het aantal decimalen dat is opgegeven door Y. De standaardinstelling is om af te ronden op een geheel getal. round(3.5) round round(3.5)
rtrim(X,Y) Geeft X terug met de tekens van Y die aan de rechterkant zijn verwijderd. Als Y niet is opgegeven, worden spaties en tabbladen ingekort. rtrim(" ZZZZabcZZ ", " Z") trim_end() trim_end(@"[ Z]+",A)
searchmatch(X) Retourneert TRUE als de gebeurtenis overeenkomt met de zoektekenreeks X. searchmatch("foo AND bar") iff() iff(field has "X","Yes","No")
split(X,"Y") Retourneert X als een veld met meerdere waarden, gesplitst op scheidingsteken Y. split(address, ";") split() split(address, ";")
sqrt(X) Retourneert de vierkantswortel van X. sqrt(9) sqrt() sqrt(9)
strftime(X,Y) Geeft de epoch-tijdwaarde X terug, weergegeven met de indeling die is opgegeven in Y. strftime(_time, "%H:%M") format_datetime() format_datetime(time,'HH:mm')
strptime(X,Y) Gegeven een tijd die wordt vertegenwoordigd door een tekenreeks X, retourneert de waarde die is geparseerd vanuit de indeling Y. strptime(timeStr, "%H:%M") format_datetime() KQL-voorbeeld
substr(X,Y,Z) Retourneert een subtekenreeksveld X vanaf de beginpositie (op basis van één) Y voor Z (optioneel) tekens. substr("string", 1, 3) substring() substring("string", 0, 3)
time() Retourneert de kloktijd van de wand met een resolutie van microseconden. time() format_datetime() KQL-voorbeeld
tonumber(X,Y) Converteert invoertekenreeks X naar een getal, waarbij Y (optioneel, standaardwaarde is 10) de basis definieert van het getal waarnaar moet worden geconverteerd. tonumber("0A4",16) toint() toint("123")
tostring(X,Y) Beschrijving SPL-voorbeeld tostring() tostring(123)
typeof(X) Retourneert een tekenreeksweergave van het veldtype. typeof(12) gettype() gettype(12)
urldecode(X) Retourneert de URL X die is gedecodeerd. SPL-voorbeeld url_decode KQL-voorbeeld

case(X,"Y",…) SPL-voorbeeld

Dit SPL-voorbeeld geeft een andere berichtreeks terug op basis van de HTTP-foutcode.

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

case(X,"Y",…) KQL-voorbeeld

Dit KQL-voorbeeld gebruikt case() om een bericht toe te wijzen op basis van de foutcodewaarde.

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

if(X,Y,Z) KQL-voorbeeld

Dit KQL-voorbeeld wordt gebruikt iif() om aan te geven of een tijdstempel op de huidige dag valt.

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

isint(X) KQL-voorbeeld

Dit KQL-voorbeeld controleert of X een geheel getal-compatibel type is door gebruik te maken van gettype en iif.

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

isstr(X) KQL-voorbeeld

Dit KQL-voorbeeld controleert of X een stringwaarde is door gebruik te maken van gettype en iif.

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

like(X,"y") Voorbeeld

Deze KQL-voorbeelden tonen verschillende string-matching operatoren die je kunt gebruiken om SPL-patroonmatching like na te bootsen.

… | where field has "addr"

… | where field contains "addr"

… | where field startswith "addr"

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

min(X,…) KQL-voorbeeld

Deze KQL-voorbeelden tonen verschillende manieren om minimumwaarden te berekenen met behulp van min_of, min, en arg_min.

min_of (expr_1, expr_2 ...)

…|summarize min(expr)

…| summarize arg_min(Price,*) by Product

mvfilter(X) KQL-voorbeeld

Dit KQL-voorbeeld gebruikt mv-apply het filteren en reduceren van meerwaardige inhoud, vergelijkbaar met de SPL-functie mvfilter .

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

mvjoin(X,Y) KQL-voorbeeld

Dit KQL-voorbeeld gebruikt strcat_array het samenvoegen van array-elementen tot één string met een aangepaste separator.

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

relative time(X,Y) KQL-voorbeeld

Dit KQL-voorbeeld zet een datetimewaarde om naar Unix-epochtijd voor relatieve tijdberekeningen.

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

replace(X,Y,Z) KQL-voorbeeld

Dit KQL-voorbeeld gebruikt replace() samen met een regex-patroon de maand- en dagdelen van een datumreeks om te wisselen.

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

strptime(X,Y) KQL-voorbeeld

Dit KQL-voorbeeld gebruikt format_datetime alleen het weergeven van de uren en minuten van een datum-tijdwaarde.

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

time() KQL-voorbeeld

Dit KQL-voorbeeld formateert een datum-tijdwaarde als een tijdstring die uren, minuten en seconden toont.

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

tostring(X,Y) Beschrijving

De SPL-functie tostring(X,Y) zet waarden om in strings en ondersteunt verschillende opmaakopties. Het geeft een veldwaarde van als string terug X .

  • Als de waarde van X een getal is, X wordt opnieuw opgemaakt naar een tekenreekswaarde.
  • Als X een booleaanse waarde is, X wordt opnieuw opgemaakt in TRUE of FALSE.
  • Als X een getal is, is het tweede argument Y optioneel en kan dit hex zijn (converteert X naar een hexadecimale waarde), commas (formatteert X met komma's en twee decimalen) of duration (converteert X van een tijdnotatie in seconden naar een leesbare tijdnotatie: HH:MM:SS).
tostring(X,Y) SPL-voorbeeld

Dit tostring SPL-voorbeeld geeft het volgende op:

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

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

urldecode(X) SPL-voorbeeld

Dit SPL-voorbeeld decodeert een URL-gecodeerde string terug naar zijn oorspronkelijke vorm.

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

Vergelijk veelvoorkomende Splunk-commando's stats met KQL-equivalenten

Deze tabel beeldt gangbare SPL-aggregatiefuncties stats af aan hun KQL-equivalenten in Microsoft Sentinel.

SPL-opdracht Beschrijving KQL-opdracht KQL-voorbeeld
avg(X) Retourneert het gemiddelde van de waarden van het veld X. avg() avg(X)
count(X) Retourneert het aantal exemplaren van het veld X. Om aan te geven met welke specifieke veldwaarde moet worden vergeleken, formatteert u X als eval(field="value"). count() summarize count()
dc(X) Retourneert het aantal afzonderlijke waarden van het veld X. dcount() …\| summarize countries=dcount(country) by continent
earliest(X) Retourneert de chronologische vroegst geziene waarde van X. arg_min() … \| summarize arg_min(TimeGenerated, *) by X
latest(X) Retourneert de chronologische meest recente geziene waarde van X. arg_max() … \| summarize arg_max(TimeGenerated, *) by X
max(X) Retourneert de maximumwaarde van het veld X. Als de waarden van X niet-numeriek zijn, wordt de maximumwaarde gevonden via alfabetische volgorde. max() …\| summarize max(X)
median(X) Retourneert de middelste waarde van het veld X. percentiel() …\| summarize percentile(X, 50)
min(X) Retourneert de minimumwaarde van het veld X. Als de waarden van X niet-numeriek zijn, wordt de minimumwaarde gevonden via alfabetische volgorde. min() …\| summarize min(X)
mode(X) Retourneert de meest voorkomende waarde van het veld X. top-hitters() …\| top-hitters 1 of Y by X
perc(Y) Retourneert de percentielwaarde X van het veld Y. Retourneert bijvoorbeeld perc5(total) de vijfde percentielwaarde van een veld total. percentiel() …\| summarize percentile(Y, 5)
range(X) Retourneert het verschil tussen de maximum- en minimumwaarden van het veld X. range() range(1, 3)
stdev(X) Retourneert de steekproefstandaarddeviatie van het veld X. Stdev stdev()
stdevp(X) Retourneert de standaarddeviatie voor de populatie van het veld X. stdevp() stdevp()
sum(X) Retourneert de som van de waarden van het veld X. sum() sum(X)
sumsq(X) Retourneert de som van de kwadraten van de waarden van het veld X.
values(X) Retourneert de lijst met alle afzonderlijke waarden van het veld X als een vermelding met meerdere waarden. De volgorde van de waarden is alfabetisch. make_set() …\| summarize r = make_set(X)
var(X) Retourneert de variantie van het voorbeeld van het veld X. Variantie variance(X)

Volgende stappen

U hebt geleerd hoe u Splunk-detectieregels kunt identificeren, vergelijken en toewijzen aan Microsoft Sentinel analyseregels. Ga door met het migreren van uw SOAR-automatisering.