1 Introduction
Chaque SIEM a son propre langage de requête : SPL pour Splunk, KQL pour Microsoft Sentinel et Defender, Lucene ou ES|QL pour Elastic, etc. Une détection écrite pour l'un ne fonctionne pas sur l'autre, ce qui rend le partage entre équipes laborieux. Sigma règle ce problème : c'est un format ouvert et indépendant des éditeurs pour écrire des règles de détection sur les logs, en YAML, qu'un convertisseur traduit ensuite dans le langage de votre SIEM.
Créé en 2017 par Florian Roth et Thomas Patzke, Sigma est aux logs ce que YARA est aux fichiers et Snort/Suricata au trafic réseau. Là où un IOC expire en quelques jours, une bonne règle Sigma décrit un comportement (un document Word qui lance PowerShell, un outil système détourné pour télécharger un fichier) : le sommet de la pyramide de la douleur.
1 règle
convertie pour Splunk, Elastic, Sentinel, QRadar et bien d'autres
3 000+
règles communautaires dans le dépôt SigmaHQ
YAML
du texte brut, facile à relire, versionner et partager
Le principe
1. Vous écrivez une règle générique
Avec des noms de champs génériques (Image, CommandLine, ParentImage…) et une catégorie de logs générique (process_creation).
2. Un pipeline l'adapte à vos données
Un processing pipeline renomme les champs et ajoute l'index ou la table adaptés à votre environnement (par exemple, Image devient process.executable dans Elastic ECS).
3. Un backend écrit la requête
Le backend produit du SPL, du KQL, du Lucene, de l'ES|QL… à coller dans une recherche ou à déployer comme alerte planifiée.
2 Anatomie d'une règle
Cette règle détecte certutil.exe, un outil Windows légitime de gestion des certificats, détourné pour télécharger un fichier (MITRE ATT&CK T1105, Ingress Tool Transfer). Les commentaires expliquent chaque champ.
proc_creation_win_certutil_download.yml
title: File Download via Certutil # nom court et lisible
id: 3f2a8c1e-5b7d-4e9a-9c61-2d8f0a7b4c13 # UUIDv4 aléatoire, jamais réutilisé
status: experimental # experimental -> test -> stable
description: Detects certutil.exe used with the urlcache option to fetch a remote file, a classic living-off-the-land download technique.
references:
- https://attack.mitre.org/techniques/T1105/
author: mlab Academy
date: 2026-10-21 # AAAA-MM-JJ
tags: # tactique + technique MITRE ATT&CK
- attack.command-and-control
- attack.t1105
logsource: # SUR QUELS journaux la règle s'applique
category: process_creation
product: windows
detection: # CE QUE l'on cherche
selection_img: # une liste = OU entre ses éléments
- Image|endswith: '\certutil.exe'
- OriginalFileName: 'CertUtil.exe'
selection_cli: # les clés d'une map = ET
CommandLine|contains|all: # |all = toutes les valeurs doivent être présentes
- 'urlcache'
- 'http'
condition: all of selection_* # comment combiner les blocs nommés
falsepositives:
- Administrators manually retrieving certificates or CRLs over HTTP
level: high # informational, low, medium, high, critical
Les champs de métadonnées
| Champ | Contenu attendu |
|---|---|
| title | Ce qui est détecté, en quelques mots. Obligatoire. |
| id | Un UUID aléatoire (générez-le avec uuidgen). Il identifie la règle pour toujours, même si son titre change. |
| status | Maturité : experimental (nouvelle), test (testée, peu de faux positifs connus), stable (prête pour l'alerting), plus deprecated et unsupported. |
| description / references | Pourquoi l'activité est suspecte et où elle a été documentée (blog, rapport CTI, page ATT&CK). |
| author / date / modified | Qui l'a écrite et quand, au format AAAA-MM-JJ. |
| tags | Tactiques et techniques MITRE ATT&CK (attack.execution, attack.t1059.001), CVE (cve.2021-44228), TLP… |
| falsepositives | Les causes légitimes connues. Précieux pour l'analyste qui traite l'alerte. |
| level | Sévérité : informational, low, medium, high, critical. |
logsource : quels journaux ?
logsource combine jusqu'à trois clés : product (windows, linux, aws, azure…), service (security, sysmon, powershell, cloudtrail…) et category (un type générique comme process_creation, network_connection, dns_query, file_event). Les catégories sont très pratiques : sous Windows, process_creation peut être alimentée par l'événement Sysmon 1, l'événement de sécurité 4688 ou un EDR. C'est le pipeline qui choisit la source interrogée.
detection : sélections, modificateurs et condition
Le bloc detection contient des identifiants de recherche nommés librement (selection, filter_admin…) et une condition qui les combine. Deux règles suffisent pour les lire toutes :
Clés d'une map = ET
Dans un bloc comme selection_cli, chaque champ listé doit correspondre.
Éléments d'une liste = OU
Une liste de valeurs (ou de maps, comme dans selection_img) correspond dès qu'un élément correspond.
Les valeurs sont insensibles à la casse par défaut, et * / ? servent de jokers. Les modificateurs de champ, chaînés avec |, changent la façon de comparer :
| Modificateur | Effet |
|---|---|
| |contains / |startswith / |endswith | Contient, commence par, se termine par (les jokers sont ajoutés pour vous). |
| |all | Transforme le OU d'une liste de valeurs en ET : toutes doivent être présentes. |
| |re | Expression régulière (sensible à la casse, sauf avec |re|i). Lente sur la plupart des SIEM : avec parcimonie. |
| |windash | Quand vous écrivez -option, couvre aussi /option et les tirets Unicode : les outils Windows acceptent tout cela. |
| |base64offset|contains | Retrouve une chaîne cachée dans des données base64, quel que soit son alignement. |
| |cidr | Plages d'adresses IP comme 10.0.0.0/8. |
| |gt / |gte / |lt / |lte | Comparaisons numériques. |
| |exists | Le champ est présent (true) ou absent (false). |
| |cased | Rend la comparaison sensible à la casse. |
La ligne condition accepte :
| selection and not filter | Logique booléenne avec and, or, not et des parenthèses. |
| 1 of selection_* | Au moins un identifiant dont le nom correspond au motif. |
| all of selection_* | Tous les identifiants correspondant au motif. |
| 1 of them / all of them | Idem, sur tous les identifiants de la règle. |
3 Exemples guidés
Étape 1 : un événement, un champ
La règle la plus simple possible : tous les échecs de connexion Windows (événement de sécurité 4625). Bien trop bruyante pour déclencher une alerte à elle seule, d'où le level: low, mais c'est une brique parfaite pour l'étape 4.
win_security_failed_logon.yml
title: Windows Failed Logon
id: 0c7a1f2e-3b4d-4e5f-8a6b-7c8d9e0f1a2b
status: test
description: Demo rule - matches every failed logon on a Windows host.
author: mlab Academy
date: 2026-10-21
logsource:
product: windows
service: security
detection:
selection:
EventID: 4625
condition: selection
level: low
Étape 2 : deux sélections combinées
C'est la règle certutil de la section 2. selection_img identifie le binaire de deux façons, par son chemin et par OriginalFileName (lu dans l'en-tête PE, donc toujours valable si l'attaquant renomme certutil.exe en notepad.exe). selection_cli exige les deux mots-clés.
Étape 3 : comportement parent/enfant avec filtre
Un grand classique des documents piégés par macro : une application Office lance PowerShell avec une commande encodée. On ajoute un filtre pour un complément (fictif) approuvé : les filtres permettent d'adapter une règle à votre environnement sans l'affaiblir partout ailleurs.
proc_creation_win_office_spawn_encoded_powershell.yml
title: Encoded PowerShell Spawned by an Office Application
id: 9b1e4d27-6c3a-4f8e-b2d5-1a7c0e9f3b64
status: experimental
description: Detects Word, Excel or PowerPoint launching PowerShell with an encoded command, typical of malicious macro documents.
references:
- https://attack.mitre.org/techniques/T1059/001/
- https://attack.mitre.org/techniques/T1204/002/
author: mlab Academy
date: 2026-10-21
modified: 2026-10-21
tags:
- attack.execution
- attack.t1059.001
- attack.t1204.002
logsource:
category: process_creation
product: windows
detection:
selection_parent:
ParentImage|endswith:
- '\winword.exe'
- '\excel.exe'
- '\powerpnt.exe'
selection_child:
Image|endswith:
- '\powershell.exe'
- '\pwsh.exe'
selection_cli:
CommandLine|contains|windash:
- ' -enc '
- ' -encodedcommand '
filter_main_approved_addin:
CommandLine|contains: 'C:\Program Files\Contoso\ApprovedAddin\'
condition: all of selection_* and not 1 of filter_main_*
falsepositives:
- Rare internal add-ins that legitimately call encoded PowerShell (add them to a filter)
level: high
Exercice : PowerShell accepte n'importe quel préfixe non ambigu d'un paramètre, donc -e, -ec ou -enco fonctionnent aussi. Comment étendre selection_cli sans détecter toutes les lignes de commande contenant « -e » ? (Indice : regardez comment les règles SigmaHQ s'y prennent.)
Étape 4 : une règle de corrélation (force brute)
Depuis la version 2.0 de la spécification, Sigma prend en charge les règles de corrélation, qui comptent ou relient les événements d'autres règles. On réutilise ici la règle de l'étape 1 (référencée par son name) pour alerter sur dix échecs depuis la même IP en cinq minutes. Les deux documents cohabitent dans le même fichier, séparés par ---.
win_security_failed_logon_bruteforce.yml
title: Windows Failed Logon
id: 0c7a1f2e-3b4d-4e5f-8a6b-7c8d9e0f1a2b
name: windows_failed_logon
status: test
description: Demo rule - matches every failed logon on a Windows host.
author: mlab Academy
date: 2026-10-21
logsource:
product: windows
service: security
detection:
selection:
EventID: 4625
condition: selection
level: low
---
title: Many Failed Logons From One Source
id: 5e2d8b1a-7f4c-4a3e-9d6b-0c1f2a3b4c5d
status: experimental
description: Ten or more failed logons from the same source IP within five minutes.
author: mlab Academy
date: 2026-10-21
correlation:
type: event_count
rules:
- windows_failed_logon
group-by:
- IpAddress
timespan: 5m
condition:
gte: 10
level: medium
$ sigma convert -t splunk -p splunk_windows win_security_failed_logon_bruteforce.yml
source="WinEventLog:Security" EventCode=4625
| bin _time span=5m
| stats count as event_count by _time IpAddress
| search event_count >= 10
Autres types de corrélation : value_count (une même source qui essaie beaucoup de noms d'utilisateur différents, par exemple), temporal et temporal_ordered (plusieurs règles qui se déclenchent ensemble, ou dans un ordre donné). Tous les backends ne les gèrent pas encore.
4 Convertir les règles
La chaîne d'outils de référence est pySigma (une bibliothèque Python) et son interface en ligne de commande sigma-cli. L'ancien convertisseur sigmac est obsolète : un tutoriel qui l'utilise n'est plus à jour.
# Installer la CLI et les backends dont vous avez besoin
$ pip install sigma-cli
$ sigma plugin install splunk
$ sigma plugin install elasticsearch
$ sigma plugin install kusto
# Contrôler vos règles (syntaxe + bonnes pratiques)
$ sigma check rules/
# Voir les cibles et pipelines disponibles
$ sigma list targets
$ sigma list pipelines splunk
Une conversion nécessite toujours une cible (-t, le langage de requête) et le plus souvent un pipeline (-p, la correspondance des champs avec vos données). Voici la règle certutil convertie pour trois SIEM, sortie réelle de sigma-cli :
$ sigma convert -t splunk -p splunk_windows proc_creation_win_certutil_download.yml
Image="*\\certutil.exe" OR OriginalFileName="CertUtil.exe" CommandLine="*urlcache*" CommandLine="*http*"
$ sigma convert -t lucene -p ecs_windows proc_creation_win_certutil_download.yml
(process.executable.caseless:*\\certutil.exe OR process.pe.original_file_name:CertUtil.exe) AND (process.command_line:*urlcache* AND process.command_line:*http*)
$ sigma convert -t kusto -p microsoft_xdr proc_creation_win_certutil_download.yml
DeviceProcessEvents
| where (FolderPath endswith "\\certutil.exe" or ProcessVersionInfoOriginalFileName =~ "CertUtil.exe") and (ProcessCommandLine contains "urlcache" and ProcessCommandLine contains "http")
| SIEM | Cible | Pipelines courants |
|---|---|---|
| Splunk | splunk | splunk_windows, splunk_cim |
| Elastic | lucene, eql, esql | ecs_windows, ecs_zeek_beats |
| Microsoft Defender XDR | kusto | microsoft_xdr |
| Microsoft Sentinel | kusto | sentinel_asim, azure_monitor, microsoft_xdr |
Le pipeline microsoft_xdr vise les tables d'advanced hunting (DeviceProcessEvents…), également disponibles dans Sentinel quand le connecteur Defender XDR est activé ; sentinel_asim vise plutôt les tables normalisées ASIM de Sentinel. Pour la règle de l'étape 3, le KQL ressemble à ceci. Remarquez comment |windash a décliné chaque option en cinq variantes :
DeviceProcessEvents
| where ((InitiatingProcessFolderPath endswith "\\winword.exe" or InitiatingProcessFolderPath endswith "\\excel.exe" or InitiatingProcessFolderPath endswith "\\powerpnt.exe") and (FolderPath endswith "\\powershell.exe" or FolderPath endswith "\\pwsh.exe") and (ProcessCommandLine contains " -enc " or ProcessCommandLine contains " /enc " or ProcessCommandLine contains " –enc " or ProcessCommandLine contains " —enc " or ProcessCommandLine contains " ―enc " or ProcessCommandLine contains " -encodedcommand " or ProcessCommandLine contains " /encodedcommand " or ProcessCommandLine contains " –encodedcommand " or ProcessCommandLine contains " —encodedcommand " or ProcessCommandLine contains " ―encodedcommand ")) and (not(ProcessCommandLine contains "C:\\Program Files\\Contoso\\ApprovedAddin\\"))
Relisez la requête générée
Ne déployez jamais une conversion les yeux fermés. Dans la sortie Splunk ci-dessus, les OR n'ont pas de parenthèses : c'est correct, car en SPL OR est prioritaire sur le AND implicite, mais tout le monde est surpris la première fois. Vérifiez aussi les noms de champs et l'index, puis lancez la requête sur les 30 derniers jours pour voir combien de résultats elle remonte avant d'en faire une alerte.
Pas de SIEM ? Appliquez Sigma directement aux journaux
Plusieurs outils gratuits appliquent des règles Sigma directement aux journaux d'événements Windows (.evtx), parfaits pour s'entraîner ou pour une réponse à incident sur une seule machine : Hayabusa (Yamato Security), Chainsaw (WithSecure) et Zircolite. Le convertisseur web sigconverter.io, basé sur pySigma, permet d'essayer des conversions sans rien installer.
D'un rapport à des détections
Collez un rapport de menace ou un extrait de logs dans l'extracteur d'IOC de mlab.sh pour isoler les domaines, IP et hash à rechercher dans votre SIEM.
Extraire des IOC sur mlab.sh5 Pièges courants
Les logs n'existent pas
Une règle process_creation ne sert à rien si vous ne collectez ni Sysmon ni l'événement 4688, et ce dernier ne contient la ligne de commande que si l'option « Include command line in process creation events » est activée par GPO. Vérifiez les données avant d'accuser la règle.
Mauvais pipeline, échec silencieux
Si la requête générée utilise Image alors que votre index l'appelle process_path, la recherche s'exécute sans erreur et ne trouve jamais rien. Testez chaque règle convertie sur un événement positif connu.
Des antislashs entre guillemets doubles
En YAML, "\certutil.exe" entre guillemets doubles est interprété comme une séquence d'échappement et casse le fichier. Utilisez des guillemets simples pour les chemins Windows : '\certutil.exe'.
Décrire un outil plutôt qu'un comportement
« powershell.exe a démarré » se déclenche des milliers de fois par jour. Ajoutez ce qui rend l'événement suspect : le processus parent, une option, un chemin, un utilisateur. La fatigue d'alerte tue un SOC plus sûrement que les détections manquées.
Des filtres trop larges
Exclure CommandLine|contains: 'update' pour faire taire un outil bavard offre aussi un contournement gratuit aux attaquants. Filtrez sur des chemins complets, des images signées ou des processus parents précis.
Croire que les règles communautaires sont prêtes à l'emploi
Une règle experimental de SigmaHQ a été écrite pour l'environnement de quelqu'un d'autre. Faites tourner les nouvelles règles en mode « chasse » (sans alerte) pendant une semaine, ajustez-les, puis promouvez-les.
Conseils de performance
Préférez endswith et les valeurs exactes à contains
Un joker en tête (*urlcache*) empêche la plupart des SIEM d'utiliser leur index. Réservez-le au champ qui en a vraiment besoin.
Gardez un logsource précis
Le logsource indique au pipeline quel index ou quelle table interroger. Sans lui, une règle risque de parcourir toutes vos données.
Évitez |re quand un modificateur suffit
Les expressions régulières coûtent cher et leur dialecte varie d'un backend à l'autre. |contains|all, |windash ou une liste de valeurs sont plus rapides et plus portables.
6 Aller plus loin
Où trouver des règles
SigmaHQ/sigma
Le dépôt officiel. rules/ regroupe les détections génériques, rules-emerging-threats/ les règles liées à une campagne ou une CVE précise, rules-threat-hunting/ des règles plus larges, destinées à la chasse plutôt qu'à l'alerting. Des paquets prêts à l'emploi sont publiés sur GitHub.
La spécification SigmaHQ
Le dépôt sigma-specification documente chaque champ, modificateur, nom de taxonomie ainsi que le format des corrélations. À garder dans ses favoris.
Dépôts d'éditeurs et de chercheurs
De nombreux rapports de menace publient désormais des règles Sigma en annexe, et les flux de threat intel ou les événements MISP peuvent aussi en transporter.
Detection-as-code
Rangez vos règles dans Git, lancez sigma check et les conversions en CI, et déployez automatiquement vers votre SIEM. Chaque modification est relue comme du code.
Relier les points
Les tags Sigma rattachent chaque règle à MITRE ATT&CK, ce qui permet de dessiner une carte de couverture et de repérer les techniques que vous ne voyez pas. Le comportement observé dans une sandbox (arbre de processus, lignes de commande) est la meilleure matière première pour de nouvelles règles. Pour les indicateurs qui changent tous les jours, continuez à vous appuyer sur les IOC et les flux STIX/TAXII ; pour les fichiers, sur YARA ; pour le trafic réseau, sur Suricata et Snort.
Modules connexes
Écrire des règles YARA
Apprenez à écrire des règles YARA qui détectent des familles de malwares entières : chaînes, conditions, modules, tests avec yara et YARA-X.
Comprendre MITRE ATT&CK
Tactiques, techniques et identifiants expliqués, et comment mapper un incident ou un rapport CTI sur ATT&CK avec le Navigator.
Détection réseau avec Suricata et Snort
Comprendre les signatures IDS : en-tête, content, flow, sticky buffers et seuils, puis tester ses règles Suricata sur une capture pcap.
Source : mlab Academy — Plateforme de sensibilisation à la cybersécurité
URL : https://academy.mlab.sh/fr-FR/page/regles-sigma
Module : Les règles Sigma pour détecter dans les logs — Ingénierie de détection
Avertissement : Ce contenu est à des fins de sensibilisation uniquement.