Splunk – Filtrer ses logs avec un Lookup… efficacement !

Splunk Logo

Bonjour à tous, aujourd’hui je voudrais qu’on se penche sur un truc assez simple d’apparence qu’on a tous voulus faire avec Splunk : Filtrer ses logs avec un Lookup. Le use case que j’ai eu aujourd’hui au taf est assez simple. On avait une liste de domaine malveillant dans un petit CSV et on voulait croiser ça avec nos logs proxy (plusieurs dizaines de Go par jours) sur une semaine.

Filtrer ses logs avec un Lookup… sur des petits volumes de log !

Du coup le collègue qui a essayé en premier est parti avec la première méthode qu’on trouve sur Google (normal jusque-là). Faire une sous-recherche (subsearch) qui prend le lookup, « table » la colonne avec le nom qui match celui du champ dans les logs et cherches.

index=proxy [| inputlookup malwaredomainslist.csv | table site ]

Bilan : 1h après on avait pas fait 25% des logs et la recherche a même finis par planter en « Dag Execution Exception: Search has been cancelled. Search auto-canceled« . A ce stade il m’appelle, et je gratte un peu dans mes souvenirs. Il me semblait qu’on pouvait forger le texte de la recherche depuis une subsearch. Et je retombe … Lire la suite

Docker et Portainer part 9 – Monitoring des performances docker avec Splunk

Docker et Portainer

Salut à tous, ça fait longtemps qu’on a pas parlé de docker, non. ? Et je vous avais promis de parler du Monitoring des performances docker avec Splunk. Ça fait quelques mois que j’ai mis en place un truc sur le serveur mais que je n’ai pas eu le temps de vous mettre sur le blog.

On va attaquer le problème crescendo, du plus basique au plus compliqué.
Rappel des articles de la série « Docker et Portainer » :

V1, dans le doute : script…

Ma première tentative a été d’écrire le petit … Lire la suite

Changer le sourcetype après un Universal Forwarder

Splunk Logo

Bonjour à tous, aujourd’hui, je veux vous parler d’une configuration possible dans une infra Splunk pour changer le sourcetype après un Universal Forwarder. En effet dans une infra Splunk, lorsque vous utilisez un UFW (Universal Forwarder), dans votre fichier Inputs.conf vous devez définir le sourcetype des logs.

Par exemple :

[monitor:///splunk-inputs-dir/PROXY/*/*.log]
disabled = 0
index = proxy
host_segment = 3
sourcetype = editor:proxy

Comme on le voit le sourcetype est affecté pour le dossier surveillé. Et il n’est pas possible de placer des règles pour définir des sourcetypes custom en fonction du host ou du format de la ligne de log par exemple. En lisant sur les forums Splunk, la plupart des postes que j’ai vu disent qu’il faut remplacer l’UFW par un heavy forwarder, sauf… qu’en regardant bien la doc, on a une option pour faire faire le travail à nos indexeur.

En effet, il est possible de jouer avec les fichiers props.conf (et transforms.conf) pour lui faire appliquer un TRANSFORMS sur les logs. Par exemple, le props.conf qui défini vos extractions du champs pour votre sourcetype devrait ressembler à quelques chose comme :

[editor:proxy]
EVAL-bytes = bytes_out+bytes_in
EXTRACT-proxy = ^une méchante regex
TIME_FORMAT = %s%3N
TIME_PREFIX
Lire la suite

CTFd et Splunk : utilisez SQL pour du SPL !

Bonjour à tous, Il y quelques temps (environ :-)) on m’a demandé d’organiser un CTF en interne au taf. Je pourrais vous parler un moment du projet, des contributions au challenges, de l’organisation ou de la com’ mais bon, c’est pas trop le but du blog de vous parler des trucs chiant…^^ Je voulais juste pour partager quelques requêtes SQL et SPL pour CTFd et Splunk que j’ai faites en fin de CTF pour générer des graphiques et quelques stats sur le déroulement du challenge.

Alors je l’ai pas indiqué mais on a utilisé un CTFd customisé (un peu, merci Keny) pour l’occasion. Derrière la plateforme on trouve donc une base MariaDB (ex-mysql) tout bête qu’on peut requêter avec du SQL tout ce qu’il y a de plus classique.

SQL over CTFd

Par exemple la liste des utilisateurs inscrit au CTF vers un CSV :

Select u.id as user_id, u.name as username, u.email as user_email, u.type as user_type, u.team_id as team_id, t.name as team_name, captain_id, u.created as user_created 
INTO OUTFILE '/tmp/ctfd_users.csv' 
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n' 
FROM users as u 
LEFT JOIN teams as t ON t.id=u.team_id ORDER BY team_name;

Ça vous sort … Lire la suite