Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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.
Controleer of u een testsysteem hebt voor elke regel die u wilt migreren.
Bereid een validatieproces voor voor uw gemigreerde regels, inclusief volledige testscenario's en scripts.
Zorg ervoor dat uw team nuttige bronnen heeft om uw gemigreerde regels te testen.
Controleer of de vereiste gegevensbronnen zijn verbonden en controleer de methoden voor gegevensverbinding.
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:
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.
Identificeer kenmerken, velden of entiteiten in uw gegevens die u in uw regels wilt gebruiken.
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.
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.
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.
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:
- Aangepaste analyseregels maken om bedreigingen te detecteren. Gebruik waarschuwingsgroepering om de vermoeidheid van waarschuwingen te verminderen door waarschuwingen te groeperen die binnen een bepaald tijdsbestek optreden.
- Wijs gegevensvelden toe aan entiteiten in Microsoft Sentinel zodat SOC-technici entiteiten kunnen definiëren als onderdeel van het bewijs dat tijdens een onderzoek moet worden bijgehouden. Entiteitstoewijzing maakt het ook mogelijk voor SOC-analisten om te profiteren van een intuïtieve [onderzoeksgrafiek] (investigate-cases.md#use-the-investigation-graph-to-deep-dive) die tijd en moeite kan helpen verminderen.
- Onderzoek incidenten met UEBA-gegevens, als voorbeeld van hoe u bewijs kunt gebruiken om gebeurtenissen, waarschuwingen en bladwijzers die aan een bepaald incident zijn gekoppeld, weer te geven in het voorbeeldvenster van incidenten.
- Kusto-querytaal (KQL), waarmee u alleen-lezenaanvragen kunt verzenden naar uw Log Analytics-database om gegevens te verwerken en resultaten te retourneren. KQL wordt ook gebruikt in andere Microsoft-services, zoals Microsoft Defender voor Eindpunt en Application Insights.
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
Xeen getal is,Xwordt opnieuw opgemaakt naar een tekenreekswaarde. - Als
Xeen booleaanse waarde is,Xwordt opnieuw opgemaakt inTRUEofFALSE. - Als
Xeen getal is, is het tweede argumentYoptioneel en kan dithexzijn (converteertXnaar een hexadecimale waarde),commas(formatteertXmet komma's en twee decimalen) ofduration(converteertXvan 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.