[Splunk] SPL Introduction Le SPL est le langage de requête propriétaire à Splunk. Il est extrêmement puissant mais utilise une syntaxe peu triviale. Cheat-sheet Index Pour chercher dans un index : index="main" Opérateurs Opérateurs = != > >= < <= Supprimer un champ de l'affichage index="main" sourcetype="WinEventLog:Sysmon" EventCode=1 | fields - User Créer un tableau index="main" sourcetype="WinEventLog:Sysmon" EventCode=1 | table _time, host, Image Ici un tableau sera affiché avec trois colonnes : _time, host et Image. Renommer un champ index="main" sourcetype="WinEventLog:Sysmon" EventCode=1 | rename Image as Process Supprimer les doublons Vous pouvez supprimer les doublons en vous basant sur un champ : index="main" sourcetype="WinEventLog:Sysmon" EventCode=1 | dedup Image Ici, si un même process apparaît plusieurs fois dans les logs, il n'y aura quand même qu'un seul résultat affiché. Trier Par exemple pour trier dans le temps : index="main" sourcetype="WinEventLog:Sysmon" EventCode=1 | sort - _time Statistiques Pour avoir des statistiques, par exemple le count : index="main" sourcetype="WinEventLog:Sysmon" EventCode=3 | stats count by _time, Image Graphiques Vous pouvez faire une visualisation avec le mot clé chart : index="main" sourcetype="WinEventLog:Sysmon" EventCode=3 | chart count by _time, Image Eval Pour effectuer des opérations basiques comme mettre en minuscule un champ : index="main" sourcetype="WinEventLog:Sysmon" EventCode=1 | eval Process_Path=lower(Image) Regex Pour effectuer une regex : index="main" EventCode=4662 | rex max_match=0 "[^%](?{.*})" | table guid Lookup table Après avoir importé votre CSV dans Splunk, vous pouvez effectuer des vérifications pour ajouter un champ : index="main" sourcetype="WinEventLog:Sysmon" EventCode=1 | rex field=Image "(?P[^\\\]+)$" | eval filename=lower(filename) | lookup malware_lookup.csv filename OUTPUTNEW is_malware | table filename, is_malware Time range index="main" earliest=-7d latest=-1d EventCode!=1 Transaction Permet de regrouper plusieurs events qui partagent un champ commun : index="main" sourcetype="WinEventLog:Sysmon" (EventCode=1 OR EventCode=3) | transaction Image startswith=eval(EventCode=1) endswith=eval(EventCode=3) maxspan=1m | table Image | dedup Image Le maxspan sert à spécifier une fenêtre de temps maximale entre les deux events. Subsearches Permet de faire une sous-recherche comme filtre dans sa requête : index="main" sourcetype="WinEventLog:Sysmon" EventCode=1 NOT [ search index="main" sourcetype="WinEventLog:Sysmon" EventCode=1 | top limit=100 Image | fields Image ] | table _time, Image, CommandLine, User, ComputerName Eventcount Pour obtenir le nombre d'events de votre query : | eventcount summarize=false index=* | table index Metadata | metadata type=sourcetypes Sourcetype Filtrer par sourcetype permet d'augmenter les performances de la query : sourcetype="WinEventLog:Security" | table _raw Fieldsummary Pour avoir un récapitulatif de statistiques : sourcetype="WinEventLog:Security" | fieldsummary