Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Les règles de détection Splunk sont des composants SIEM (Security Information and Event Management) qui se comparent aux règles d’analyse dans Microsoft Sentinel. Cet article décrit les concepts utilisés pour identifier, comparer et migrer les règles de détection Splunk vers Microsoft Sentinel. La meilleure façon de migrer des règles de détection Splunk vers Microsoft Sentinel consiste à commencer par l’expérience de migration SIEM, qui identifie les règles d’analytique prêtes à l’emploi (OOTB) pour la traduction automatique.
Si vous souhaitez migrer votre déploiement d’observabilité Splunk, découvrez comment migrer de Splunk vers Azure Monitor Logs.
Règles d’audit
Microsoft Sentinel utilise l’analytique machine learning pour créer des incidents haute fidélité et actionnables. Certaines de vos détections Splunk existantes peuvent être redondantes dans Microsoft Sentinel, donc ne migrez pas toutes les détections Splunk à l'aveugle. Passez en revue les considérations d’audit des règles suivantes lorsque vous identifiez vos règles de détection existantes.
- Veillez à sélectionner des cas d’usage qui justifient la migration des règles, en tenant compte de la priorité métier et de l’efficacité.
- Vérifiez que vous comprenez Microsoft Sentinel types de règles.
- Vérifiez que vous comprenez la terminologie de la règle.
- Passez en revue les règles obsolètes qui n’ont pas d’alertes pour les 6 à 12 derniers mois et déterminez si elles sont toujours pertinentes.
- Éliminez les menaces ou les alertes de bas niveau que vous ignorez régulièrement.
- Microsoft Sentinel Analytics exigent que le type de données soit présent dans l’espace de travail Log Analytics avant qu’une règle soit activée. Vérifiez que vos sources de données requises sont connectées et passez en revue vos méthodes de connexion de données. Revisitez les conversations de collecte de données pour garantir la profondeur et l’étendue des données dans les cas d’usage que vous prévoyez de détecter. Utilisez ensuite l’expérience de migration SIEM pour vous assurer que les sources de données sont mappées de manière appropriée.
Migrer les règles
Une fois que vous avez identifié les détections Splunk à migrer, prenez connaissance des points suivants concernant le processus de migration :
- Comparez les fonctionnalités existantes des règles d’analyse OOTB de Microsoft Sentinel avec vos cas d’usage actuels. Utilisez l’expérience de migration SIEM pour voir quelles détections Splunk sont automatiquement converties en modèles OOTB.
- Traduisez les détections qui ne s’alignent pas sur les règles d’analyse OOTB. La meilleure façon de traduire automatiquement les détections Splunk est d’utiliser l’expérience de migration SIEM.
- Découvrez d’autres algorithmes pour vos cas d’usage en explorant les ressources de la communauté, telles que la Place de marché SOC Prime Threat Detection.
- Traduire manuellement les détections si les règles intégrées ne sont pas disponibles ou ne sont pas traduites automatiquement. Créez les nouvelles requêtes KQL et passez en revue le mappage de règles.
Pour plus d’informations, consultez bonnes pratiques pour la migration des règles de détection.
Étapes de migration des règles
Suivez ces étapes pour valider, traduire et tester chaque règle de détection Splunk pendant la migration vers Microsoft Sentinel.
Vérifiez qu’un système de test est en place pour chaque règle que vous souhaitez migrer.
Préparez un processus de validation pour vos règles migrées, y compris les scénarios de test complets et les scripts.
Vérifiez que votre équipe dispose de ressources utiles pour tester vos règles migrées.
Vérifiez que les sources de données requises sont connectées et passez en revue vos méthodes de connexion de données.
Vérifiez si vos détections sont disponibles en tant que modèles OOTB dans Microsoft Sentinel :
Utilisez l’expérience de migration SIEM pour automatiser la traduction et l’installation des modèles OOTB.
Pour plus d’informations, consultez Utiliser l’expérience de migration SIEM.
Si les cas d’usage ne sont pas reflétés dans les détections, créez des règles pour votre propre espace de travail avec des modèles de règles OOTB.
Dans Microsoft Sentinel, accédez au hub de contenu.
Filtrer Type de contenu pour modèles de règle d’analytique.
Recherchez et installez/mettez à jour chaque solution de hub de contenu ou modèle de règle d’analyse autonome correspondant.
Pour plus d’informations, consultez Détection des menaces prête à l’emploi.
Si vous avez des détections qui ne sont pas couvertes par les règles OOTB de Microsoft Sentinel, essayez d’abordl’expérience de migration SIEM pour la traduction automatique.
Si ni les règles OOTB ni la migration SIEM ne traduisent complètement la détection, créez la règle manuellement. Pour créer votre règle, procédez comme suit :
Identifiez les sources de données que vous souhaitez utiliser dans votre règle. Identifiez les tables Microsoft Sentinel que vous souhaitez interroger en créant une table de mappage entre les sources de données et les tables de données.
Identifiez les attributs, champs ou entités de vos données que vous souhaitez utiliser dans vos règles.
Identifiez vos critères et votre logique de règle. Lorsque vous identifiez vos critères de règle et votre logique, envisagez d’utiliser des modèles de règle comme exemples pour construire vos requêtes KQL.
Considérez les filtres, les règles de corrélation, les listes actives, les ensembles de références, les watchlists, les anomalies de détection, les agrégations, etc. Vous pouvez utiliser des références fournies par votre siem hérité pour comprendre comment mapper au mieux la syntaxe de votre requête.
Identifiez la condition de déclencheur et l’action de règle, puis construisez et examinez votre requête KQL. Lorsque vous examinez votre requête, tenez compte des ressources de conseils d’optimisation KQL.
Testez la règle avec chacun de vos cas d’usage pertinents. S’il ne fournit pas les résultats attendus, examinez et modifiez le KQL et testez-le à nouveau.
Lorsque vous êtes satisfait, considérez que la règle est migrée. Créez un playbook pour votre action de règle le cas échéant. Pour plus d’informations, consultez Automatiser la réponse aux menaces avec des playbooks dans Microsoft Sentinel.
En savoir plus sur les règles d’analyse :
- Créez des règles d’analyse personnalisées pour détecter les menaces. Utilisez le regroupement d’alertes pour réduire la fatigue des alertes en regroupant les alertes qui se produisent dans une période donnée.
- Mapper des champs de données à des entités dans Microsoft Sentinel pour permettre aux ingénieurs SOC de définir des entités dans le cadre de la preuve à suivre pendant une enquête. Le mappage d’entités permet également aux analystes SOC de tirer parti d’un [graphe d’investigation] intuitif (investigate-cases.md#use-the-investigation-graph-to-deep-dive) qui peut aider à réduire le temps et les efforts.
- Examinez les incidents avec des données UEBA, comme exemple d’utilisation des preuves pour faire apparaître des événements, des alertes et des signets associés à un incident particulier dans le volet d’aperçu de l’incident.
- Langage de requête Kusto (KQL), que vous pouvez utiliser pour envoyer des requêtes en lecture seule à votre Analyse des journaux base de données pour traiter les données et renvoyer des résultats. KQL est également utilisé dans d’autres services Microsoft, tels que Microsoft Defender pour point de terminaison et Application Insights.
Comparer la terminologie des règles
Le tableau de comparaison suivant précise comment une règle basée sur KQL dans Microsoft Sentinel correspond à une détection basée sur SPL dans Splunk.
| Splunk | Microsoft Sentinel | |
|---|---|---|
| Type de règle | • Prévue • Temps réel |
• Requête planifiée •Fusion • Sécurité Microsoft • Analyse comportementale par apprentissage automatique (ML) |
| Critères | Définir dans SPL | Définir dans KQL |
| Condition de déclencheur | • Nombre de résultats • Nombre d’hôtes • Nombre de sources •Personnalisé |
Seuil : nombre de résultats de la requête |
| Action | • Ajouter aux alertes déclenchées • Événement de journalisation • Envoyer les résultats pour consultation • Et plus encore |
• Créer une alerte ou un incident • S’intègre à Logic Apps |
Mettre en correspondance et comparer des exemples de règles
Utilisez les tables d’exemple SPL-à-KQL et les exemples de cette section pour comparer et mapper les règles de Splunk vers Microsoft Sentinel dans divers scénarios.
Comparez les commandes de recherche Splunk courantes avec des exemples KQL
Ce tableau associe les commandes de recherche SPL courantes à leurs équivalents KQL dans Microsoft Sentinel.
| Commande SPL | Description | Opérateur KQL | Exemple KQL |
|---|---|---|---|
chart/ timechart |
Retourne les résultats dans une sortie tabulaire pour la création de graphiques de séries chronologiques. | opérateur de rendu | … | render timechart |
dedup |
Supprime les résultats suivants qui correspondent à un critère spécifié. | • distinct • résumer |
… | summarize by Computer, EventID |
eval |
Calcule une expression. Découvrez les commandes couranteseval. |
Étendre | T | extend duration = endTime - startTime |
fields |
Supprime les champs des résultats de recherche. | • projet • projet à l’extérieur |
T | project cost=price*quantity, price |
head/tail |
Retourne les N premiers ou derniers résultats. | top | T | top 5 by Name desc nulls last |
lookup |
Ajoute des valeurs de champ à partir d’une source externe. | • Données externes • recherche |
Exemple de commande de recherche KQL |
rename |
Renomme un champ. Utilisez des caractères génériques pour spécifier plusieurs champs. | renommage du projet | T | project-rename new_column_name = column_name |
rex |
Spécifie des noms de groupe à l’aide d’expressions régulières pour extraire des champs. | correspond à regex | … | where field matches regex "^addr.*" |
search |
Filtre les résultats sur les résultats qui correspondent à l’expression de recherche. | Recherche | search "X" |
sort |
Trie les résultats de la recherche en fonction des champs spécifiés. | sort | T | sort by strlen(country) asc, price desc |
stats |
Fournit des statistiques, éventuellement regroupées par champs. En savoir plus sur les commandes de statistiques courantes. | Résumer | Exemple de commandement de stats KQL |
mstats |
Similaire aux statistiques, utilisées sur les métriques au lieu d’événements. | Résumer | Exemple de commande KQL Mstats |
table |
Spécifie les champs à conserver dans le jeu de résultats et conserve les données au format tabulaire. | Projet | T | project columnA, columnB |
top/rare |
Affiche les valeurs les plus ou les moins courantes d’un champ. | top | T | top 5 by Name desc nulls last |
transaction |
Regroupe les résultats de la recherche dans les transactions. Exemple de commande de transaction SPL |
Exemple : row_window_session | Exemple de commande de transaction KQL |
eventstats |
Génère des statistiques récapitulatives à partir des champs de vos événements et enregistre ces statistiques dans un nouveau champ. Exemple SPL |
Exemples : • joindre • make_list • mv-expansion |
Exemple KQL |
streamstats |
Recherchez la somme cumulée d’un champ. Exemple SPL : ... | streamstats sum(bytes) as bytes _ total \| timechart |
row_cumsum | ...\| serialize cs=row_cumsum(bytes) |
anomalydetection |
Recherchez les anomalies dans le champ spécifié. Exemple SPL |
series_decompose_anomalies() | Exemple KQL |
where |
Filtre les résultats de la recherche à l’aide d’expressions eval . Utilisé pour comparer deux champs différents. |
Où | T | where fruit=="apple" |
lookup commande : exemple de KQL
Cet exemple KQL sert externaldata à reproduire le motif SPL lookup en filtrant les utilisateurs à partir d’une source de données externe.
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 commande : exemple de KQL
Cet exemple de KQL sert summarize à compter les transactions et à sommer les totaux, regroupés par fruit et mois.
Sales
| summarize NumTransactions=count(),
Total=sum(UnitPrice * NumUnits) by Fruit,
StartOfMonth=startofmonth(SellDateTime)
mstats commande : exemple de KQL
Cet exemple KQL regroupe les valeurs métriques dans des fourchettes de prix et compte les enregistrements dans chaque fourchette.
T | summarize count() by price_range=bin(price, 10.0)
transaction command : exemple SPL
Cet exemple SPL regroupe les événements de démarrage et d’arrêt liés en une seule transaction par identifiant d’activité.
sourcetype=MyLogTable type=Event
| transaction ActivityId startswith="Start" endswith="Stop"
| Rename timestamp as StartTime
| Table City, ActivityId, StartTime, Duration
transaction commande : exemple de KQL
Cet exemple KQL reproduit le regroupement des transactions SPL en associant les événements de début et d’arrêt sur un identifiant d’activité partagé et en calculant la durée.
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
Utilisez row_window_session() pour calculer les valeurs de début de session pour une colonne dans un jeu de lignes sérialisé.
...| extend SessionStarted = row_window_session(
Timestamp, 1h, 5m, ID != prev(ID))
eventstats command : exemple SPL
Cet exemple SPL calcule les comptes d’événements par catégorie dans des bins d’une minute puis ajoute un total par bin temporel en utilisant eventstats.
… | bin span=1m _time
|stats count AS count_i by _time, category
| eventstats sum(count_i) as count_total by _time
eventstats commande : exemple de KQL
Voici un exemple avec l’instruction 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
Voici un exemple avec l’instruction 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 command : exemple SPL
Cet exemple SPL détecte des anomalies dans les données historiques de cours de clôture sur une période de 10 ans.
sourcetype=nasdaq earliest=-10y
| anomalydetection Close _ Price
anomalydetection commande : exemple de KQL
Cet exemple KQL utilise des fonctions d’analyse de séries temporelles pour détecter des anomalies dans les tendances de connexion des comptes désactivés sur une période de rétrospection de sept jours.
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)
Comparez les commandes Splunk eval courantes avec les équivalents KQL
Ce tableau associe les fonctions SPL eval courantes à leurs équivalents KQL dans Microsoft Sentinel.
| Commande SPL | Description | Exemple SPL | Commande KQL | Exemple KQL |
|---|---|---|---|---|
abs(X) |
Retourne la valeur absolue de X. | abs(number) |
abs() |
abs(X) |
case(X,"Y",…) |
Accepte des paires d’arguments X et Y , où les X arguments sont des expressions booléennes. Lorsqu’ils sont évalués à TRUE, les arguments retournent l’argument correspondant Y . |
Exemple SPL | case |
Exemple KQL |
ceil(X) |
Arrondi vers le haut d’un nombre X. | ceil(1.9) |
ceiling() |
ceiling(1.9) |
cidrmatch("X",Y) |
Identifie les adresses IP qui appartiennent à un sous-réseau particulier. | 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,…) |
Retourne la première valeur qui n’est pas null. | coalesce(null(), "Returned val", null()) |
coalesce() |
coalesce(tolong("not a number"),tolong("42"), 33) == 42 |
cos(X) |
Calcule le cosinus de X. | n=cos(0) |
cos() | cos(X) |
exact(X) |
Évalue une expression X à l’aide de l’arithmétique à virgule flottante double précision. | exact(3.14*num) |
todecimal() |
todecimal(3.14*2) |
exp(X) |
Retourne eX. | exp(3) |
exp() | exp(3) |
if(X,Y,Z) |
Si X prend la TRUEvaleur , le résultat est le deuxième argument Y. Si X s’évalue à FALSE, le résultat s’évalue au troisième argument Z. |
if(error==200,"OK", "Error") |
iff() |
Exemple KQL |
isbool(X) |
Retourne TRUE si X est booléen. |
isbool(field) |
• iff()• gettype |
iff(gettype(X) =="bool","TRUE","FALSE") |
isint(X) |
Retourne TRUE si X est un entier. |
isint(field) |
• iff()• gettype |
Exemple KQL |
isnull(X) |
Retourne TRUE si X a la valeur null. |
isnull(field) |
isnull() |
isnull(field) |
isstr(X) |
Retourne TRUE si X est une chaîne. |
isstr(field) |
• iff()• gettype |
Exemple KQL |
len(X) |
Cette fonction retourne la longueur de caractères d’une chaîne X. |
len(field) |
strlen() |
strlen(field) |
like(X,"y") |
Retourne TRUE si et uniquement si X est comme le modèle SQLite dans Y. |
like(field, "addr%") |
• has• contains• startswith• correspond à la regex |
Exemple KQL |
log(X,Y) |
Retourne le journal du premier argument X en utilisant le deuxième argument Y comme base. La valeur par défaut de Y est 10. |
log(number,2) |
• log• log2• log10 |
log(X)log2(X)log10(X) |
lower(X) |
Retourne la valeur minuscule de X. |
lower(username) |
tolower | tolower(username) |
ltrim(X,Y) |
Retourne X avec les caractères du paramètre Y supprimés du côté gauche. La sortie par défaut de Y est constituée d’espaces et de tabulations. |
ltrim(" ZZZabcZZ ", " Z") |
trim_start() |
trim_start(“ ZZZabcZZ”,” ZZZ”) |
match(X,Y) |
Retourne si X correspond au modèle d’expression régulière Y. | match(field, "^\d{1,3}.\d$") |
matches regex |
… | where field matches regex @"^\d{1,3}.\d$") |
max(X,…) |
Retourne la valeur maximale dans une colonne. | max(delay, mydelay) |
• max()• arg_max() |
… | summarize max(field) |
md5(X) |
Retourne le hachage MD5 d’une valeur de chaîne X. |
md5(field) |
hash_md5 |
hash_md5("X") |
min(X,…) |
Retourne la valeur minimale dans une colonne. | min(delay, mydelay) |
• min_of()• min() • arg_min |
Exemple KQL |
mvcount(X) |
Retourne le nombre (total) de X valeurs. |
mvcount(multifield) |
dcount |
…| summarize dcount(X) by Y |
mvfilter(X) |
Filtre un champ à valeurs multiples en fonction de l’expression booléenne X . |
mvfilter(match(email, "net$")) |
mv-apply |
Exemple KQL |
mvindex(X,Y,Z) |
Retourne un sous-ensemble de l’argument à valeurs multiples X à partir d’une position de début (base zéro) Y vers Z (facultatif). |
mvindex( multifield, 2) |
array_slice |
array_slice(arr, 1, 2) |
mvjoin(X,Y) |
Étant donné un champ à valeurs multiples X et un délimiteur de chaîne Y, concatène les différentes valeurs de X à l’aide de Y. |
mvjoin(address, ";") |
strcat_array |
Exemple KQL |
now() |
Retourne l’heure actuelle, représentée en heure Unix. | now() |
now() |
now()now(-2d) |
null() |
N’accepte pas les arguments et retourne NULL. |
null() |
null | null |
nullif(X,Y) |
Inclut deux arguments, X et Y, et retourne X si les arguments sont différents. Sinon, retourne NULL. |
nullif(fieldA, fieldB) |
iff |
iff(fieldA==fieldB, null, fieldA) |
random() |
Retourne un nombre pseudo-aléatoire compris entre 0 et 2147483647. |
random() |
rand() |
rand() |
relative_ time(X,Y) |
Étant donné une heure Epoch X et un spécificateur d’heure relative Y, retourne la valeur de l’heure Epoch de Y appliquée à X. |
relative_time(now(),"-1d@d") |
temps Unix | Exemple KQL |
replace(X,Y,Z) |
Retourne une chaîne formée en remplaçant string Z pour chaque occurrence de chaîne Y d’expression régulière dans la chaîne X. |
Renvoie la date avec le numéro du mois et celui du jour inversés. Par exemple, pour l’entrée 4/30/2015 , la sortie est 30/4/2009:replace(date, "^(\d{1,2})/ (\d{1,2})/", "\2/\1/") |
replace() |
Exemple KQL |
round(X,Y) |
Retourne X arrondi au nombre de décimales spécifié par Y. La valeur par défaut consiste à arrondir à un entier. |
round(3.5) |
round |
round(3.5) |
rtrim(X,Y) |
Retourne X avec les caractères de Y supprimés à partir du côté droit. Si Y n’est pas spécifié, les espaces et les onglets sont supprimés. |
rtrim(" ZZZZabcZZ ", " Z") |
trim_end() |
trim_end(@"[ Z]+",A) |
searchmatch(X) |
Retourne TRUE si l’événement correspond à la chaîne Xde recherche . |
searchmatch("foo AND bar") |
iff() | iff(field has "X","Yes","No") |
split(X,"Y") |
Retourne X en tant que champ à valeurs multiples, divisé par délimiteur Y. |
split(address, ";") |
split() |
split(address, ";") |
sqrt(X) |
Retourne la racine carrée de X. |
sqrt(9) |
sqrt() |
sqrt(9) |
strftime(X,Y) |
Retourne la valeur X d’heure d’époque rendue à l’aide du format spécifié par Y. |
strftime(_time, "%H:%M") |
format_datetime() |
format_datetime(time,'HH:mm') |
strptime(X,Y) |
Étant donnée une heure représentée par une chaîne X, renvoie la valeur analysée selon le format Y. |
strptime(timeStr, "%H:%M") |
format_datetime() | Exemple KQL |
substr(X,Y,Z) |
Retourne un champ de sous-chaîne X à partir de la position de début (commençant à 1) Y pour Z caractères (facultatif). |
substr("string", 1, 3) |
substring() |
substring("string", 0, 3) |
time() |
Retourne l’heure de l’horloge murale avec une résolution de microseconde. | time() |
format_datetime() |
Exemple KQL |
tonumber(X,Y) |
Convertit la chaîne X d’entrée en nombre, où Y (facultatif, la valeur par défaut est 10) définit la base du nombre vers lequel effectuer la conversion. |
tonumber("0A4",16) |
toint() |
toint("123") |
tostring(X,Y) |
Description | Exemple SPL | tostring() |
tostring(123) |
typeof(X) |
Retourne une représentation sous forme de chaîne du type de champ. | typeof(12) |
gettype() |
gettype(12) |
urldecode(X) |
Retourne l’URL X décodée. |
Exemple SPL | url_decode |
Exemple KQL |
case(X,"Y",…) Exemple SPL
Cet exemple SPL renvoie une chaîne de messages différente basée sur le code d’erreur HTTP.
case(error == 404, "Not found",
error == 500,"Internal Server Error",
error == 200, "OK")
case(X,"Y",…) Exemple KQL
Cet exemple KQL sert case() à assigner un message basé sur la valeur du code d’erreur.
T
| extend Message = case(error == 404, "Not found",
error == 500,"Internal Server Error", "OK")
if(X,Y,Z) Exemple KQL
Cet exemple KQL sert iif() à indiquer si un horodatage correspond au jour en cours.
iif(floor(Timestamp, 1d)==floor(now(), 1d),
"today", "anotherday")
isint(X) Exemple KQL
Cet exemple KQL vérifie si X possède un type entier compatible en utilisant gettype et iif.
iif(gettype(X) =="long","TRUE","FALSE")
isstr(X) Exemple KQL
Cet exemple KQL vérifie si X est une valeur de chaîne en utilisant gettype et iif.
iif(gettype(X) =="string","TRUE","FALSE")
like(X,"y") Exemple
Ces exemples KQL montrent plusieurs opérateurs de correspondance de chaînes que vous pouvez utiliser pour reproduire le schéma SPL like .
… | where field has "addr"
… | where field contains "addr"
… | where field startswith "addr"
… | where field matches regex "^addr.*"
min(X,…) Exemple KQL
Ces exemples KQL montrent différentes façons de calculer des valeurs minimales en utilisant min_of, min, et arg_min.
min_of (expr_1, expr_2 ...)
…|summarize min(expr)
…| summarize arg_min(Price,*) by Product
mvfilter(X) Exemple KQL
Cet exemple KQL sert mv-apply à filtrer et réduire le contenu multi-valeur, similaire à la fonction SPL mvfilter .
T | mv-apply Metric to typeof(real) on
(
top 2 by Metric desc
)
mvjoin(X,Y) Exemple KQL
Cet exemple KQL sert strcat_array à joindre des éléments de tableau en une seule chaîne avec un séparateur personnalisé.
strcat_array(dynamic([1, 2, 3]), "->")
relative time(X,Y) Exemple KQL
Cet exemple KQL convertit une valeur datetime-time en temps d’époque Unix pour des calculs en temps relatif.
let toUnixTime = (dt:datetime)
{
(dt - datetime(1970-01-01))/1s
};
replace(X,Y,Z) Exemple KQL
Cet exemple KQL utilise replace() un motif régulier pour échanger les parties mois et jour d’une chaîne de dates.
replace( @'^(\d{1,2})/(\d{1,2})/', @'\2/\1/',date)
strptime(X,Y) Exemple KQL
Cet exemple KQL sert format_datetime uniquement à afficher les heures et les minutes à partir d’une valeur datetime.
format_datetime(datetime('2017-08-16 11:25:10'),
'HH:mm')
time() Exemple KQL
Cet exemple KQL forme une valeur de date-heure comme une chaîne d’heures montrant les heures, minutes et secondes.
format_datetime(datetime(2015-12-14 02:03:04),
'h:m:s')
tostring(X,Y) Description
La fonction SPL tostring(X,Y) convertit les valeurs en chaînes de caractères et prend en charge plusieurs options de formatage. Il retourne une valeur de champ de X sous forme de chaîne.
- Si la valeur de
Xest un nombre,Xest reformatée en valeur de chaîne. - Si
Xest une valeur booléenne,Xest reformaté enTRUEouFALSE. - Si
Xest un nombre, le deuxième argumentYest facultatif et peut êtrehex(convertitXen hexadécimal),commas(formatsXavec virgules et deux décimales) ouduration(convertit à partir d’un format d’heure en secondesXen format d’heure lisible :HH:MM:SS).
tostring(X,Y) Exemple SPL
Cet tostring exemple SPL donne :
foo=615 and foo2=00:10:15:
… | eval foo=615 | eval foo2 = tostring(
foo, "duration")
urldecode(X) Exemple SPL
Cet exemple SPL décode une chaîne encodée par URL pour revenir à sa forme d’origine.
urldecode("http%3A%2F%2Fwww.splunk.com%2Fdownload%3Fr%3Dheader")
Comparez les commandes Splunk stats courantes avec les équivalents KQL
Ce tableau associe les fonctions d’agrégation SPL stats courantes à leurs équivalents KQL dans Microsoft Sentinel.
| Commande SPL | Description | Commande KQL | Exemple KQL |
|---|---|---|---|
avg(X) |
Retourne la moyenne des valeurs du champ X. |
avg() | avg(X) |
count(X) |
Retourne le nombre d’occurrences du champ X. Pour indiquer une valeur de champ spécifique à mettre en correspondance, mettez en forme X .eval(field="value") |
count() | summarize count() |
dc(X) |
Retourne le nombre de valeurs distinctes du champ X. |
dcount() | …\| summarize countries=dcount(country) by continent |
earliest(X) |
Retourne la valeur chronologique la plus ancienne vue de X. |
arg_min() | … \| summarize arg_min(TimeGenerated, *) by X |
latest(X) |
Retourne la dernière valeur observée chronologiquement de X. |
arg_max() | … \| summarize arg_max(TimeGenerated, *) by X |
max(X) |
Retourne la valeur maximale du champ X. Si les valeurs de X sont non numériques, la valeur maximale est trouvée par ordre alphabétique. |
max() | …\| summarize max(X) |
median(X) |
Retourne la valeur centrale du champ X. |
percentile() | …\| summarize percentile(X, 50) |
min(X) |
Retourne la valeur minimale du champ X. Si les valeurs de X sont non numériques, la valeur minimale est trouvée par ordre alphabétique. |
min() | …\| summarize min(X) |
mode(X) |
Retourne la valeur la plus fréquente du champ X. |
top-hitters() | …\| top-hitters 1 of Y by X |
perc(Y) |
Retourne la valeur de centile X du champ Y. Par exemple, perc5(total) retourne la valeur du cinquième centile d’un champ total. |
percentile() | …\| summarize percentile(Y, 5) |
range(X) |
Retourne la différence entre les valeurs maximale et minimale du champ X. |
range() | range(1, 3) |
stdev(X) |
Renvoie l’écart type de l’échantillon du champ X. |
stdev | stdev() |
stdevp(X) |
Retourne l’écart type de population du champ X. |
stdevp() | stdevp() |
sum(X) |
Retourne la somme des valeurs du champ X. |
sum() | sum(X) |
sumsq(X) |
Retourne la somme des carrés des valeurs du champ X. |
||
values(X) |
Retourne la liste de toutes les valeurs distinctes du champ X sous la forme d’une entrée à valeurs multiples. L’ordre des valeurs est alphabétique. |
make_set() | …\| summarize r = make_set(X) |
var(X) |
Retourne l’exemple de variance du champ X. |
variance | variance(X) |
Étapes suivantes
Vous avez appris à identifier, comparer et mapper des règles de détection Splunk à des règles d’analyse Microsoft Sentinel. Poursuivez la migration de votre automatisation SOAR.