ES|QL
ES|QL en conditions réelles
ES|QL en conditions réelles : du log brut à la décision. Ici, pas un catalogue de fonctions, mais des requêtes qu'un ingénieur garde sous la main — détection SOC (beaconing, exfiltration DNS, impossible travel), observabilité statistique (MAD, z-score, SLO) et capacity planning prédictif. Le résultat affiché EST l'insight, avec les fonctions récentes (INLINESTATS, CATEGORIZE, ST_DISTANCE) quasi introuvables ailleurs en français.
21 snippets phares
- Latence moyenne pondérée par le volume de requêtesWEIGHTED_AVG pondère chaque mesure par son poids réel (nombre d'appels), contrairement à une moyenne simple qui sur-représente les instances peu sollicitées.
- Parser un access log Apache brut avec GROKExtraction à la volée des champs d'un combined log (IP, méthode, chemin, statut, octets) avec typage :int directement dans le motif GROK.
- Password spraying : beaucoup de comptes, peu d'essaisSignature inverse du brute force : une IP teste de nombreux comptes avec 1-3 tentatives chacun pour passer sous les seuils de verrouillage.
- Exfiltration DNS : sous-domaines nombreux et longsDeux marqueurs du tunneling DNS combinés : forte cardinalité de sous-domaines uniques sous un même domaine et longueur moyenne anormale des requêtes.
- Compte créé puis promu admin en moins d'une heureMIN(CASE(...)) capture les deux jalons (création, élévation) par compte cible, puis DATE_DIFF mesure le délai — un délai court est un marqueur de persistance d'attaquant.
- Seuil d'anomalie robuste : médiane + 5×MADMEDIAN_ABSOLUTE_DEVIATION résiste aux outliers contrairement à l'écart-type — le seuil médiane + 5×MAD produit des bornes d'alerte fiables par service.
- Disponibilité 30 jours et budget d'erreur SLO restantDisponibilité mesurée sur les réponses non-5xx puis position par rapport à un SLO 99,9 % — le budget restant en pourcentage guide le gel des déploiements.
- LOOKUP JOIN : confronter le trafic aux IOCs threat intelJointure du trafic réseau sortant avec un index d'indicateurs de compromission — seules les destinations matchées conservent les champs threat.*.
- Tester des fonctions sans index avec ROWROW fabrique une ligne en mémoire : idéal pour valider un motif DISSECT, une conversion ou un CIDR_MATCH avant de l'appliquer à des millions de documents.
- INLINESTATS : écart de chaque requête à la moyenne de son serviceINLINESTATS ajoute l'agrégat comme colonne sans réduire les lignes — chaque transaction est comparée à la moyenne de son propre service au sein de la même requête.
- Hôtes hors-norme via z-score (STD_DEV)STD_DEV mesure la dispersion de la charge CPU par hôte ; le z-score du pic ((max − moyenne) / écart-type) distingue un pic réellement anormal d'une charge habituellement volatile.
- Regrouper les erreurs par motif avec CATEGORIZECATEGORIZE regroupe automatiquement les messages similaires en motifs — des milliers de lignes d'erreurs se résument en une poignée de familles, sans regex à écrire.
- Connexions éloignées du siège avec ST_DISTANCEST_DISTANCE calcule la distance en mètres entre la géolocalisation de connexion et un point de référence — ici le siège parisien — pour faire émerger les accès géographiquement improbables.
- Top 3 des scores CVSS par hôte avec MV_SORT et MV_SLICEMV_SORT ordonne le champ multi-valeur en décroissant, MV_SLICE en garde les trois premières valeurs et MV_FIRST extrait la pire — le tout sans éclater les lignes.
- Estimation des jours restants avant saturation disqueDeux agrégations filtrées dans le temps (il y a 14 jours vs aujourd'hui) donnent la croissance journalière, extrapolée ensuite en nombre de jours avant 100 % d'occupation.
- Succès de connexion après rafale d'échecsAgrégations filtrées par outcome : si le premier succès du couple IP/compte survient après le dernier échec d'une rafale, le brute force a probablement abouti.
- Timeline de triage d'un hôte compromisReconstruction chronologique multi-catégories (auth, process, réseau, fichiers) sur une fenêtre d'incident, avec un champ detail unifié via COALESCE pour lire l'attaque de bout en bout.
- Beaconing C2 : connexions régulières à volume constantUn implant qui « bat » vers son serveur de commande produit beaucoup de connexions vers la même destination avec des tailles quasi identiques : STD_DEV des octets proche de zéro sur une longue durée.
- Kerberoasting : rafale de tickets TGS en RC4Le combo event 4769 + chiffrement 0x17 (RC4) demandé en masse vers de nombreux SPN distincts en quelques minutes est la signature classique d'un kerberoasting.
- Web shell : POST récurrents vers des URI raresUn web shell se trahit par des POST répétés vers un script précis, depuis très peu d'IPs, presque toujours en 200 — l'inverse exact d'un formulaire public.
- Découper un Distinguished Name LDAP en unités d'organisationSPLIT sur la virgule puis MV_SLICE extrait l'OU principale d'un DN, agrégeant les comptes par branche organisationnelle sans champ dédié dans l'annuaire.