Fiche mémo
Sigma et YARA
Les deux formats de règles de détection à savoir lire et écrire : Sigma pour les journaux, YARA pour les fichiers et la mémoire. Pour les requêtes produites, voir Requêtes SIEM.
Structure d'une règle Sigma
| Champ | Rôle |
|---|---|
| title | Nom court de la règle |
| id | Identifiant unique (UUID) |
| status | Maturité : experimental, test ou stable |
| logsource | Source de données visée : product, category, service |
| detection | Sélections de champs et condition qui les combine |
| condition | Combinaison logique des sélections (and, or, not, 1 of selection*) |
| falsepositives | Cas légitimes connus qui déclenchent la règle |
| level | Gravité : informational, low, medium, high, critical |
| tags | Techniques ATT&CK associées (ex. attack.t1059.001) |
title: PowerShell lancé par Word
id: 6e3f4c1a-0000-4000-8000-000000000001
status: experimental
logsource:
product: windows
category: process_creation
detection:
selection:
ParentImage|endswith: '\WINWORD.EXE'
Image|endswith: '\powershell.exe'
condition: selection
falsepositives:
- Macros internes documentées
level: high
tags:
- attack.execution
- attack.t1204.002
Modificateurs de champ Sigma
| Modificateur | Effet |
|---|---|
| |contains | La valeur apparaît n'importe où dans le champ |
| |startswith | Le champ commence par la valeur |
| |endswith | Le champ se termine par la valeur |
| |all | Toutes les valeurs de la liste doivent être présentes |
| |re | Expression régulière |
| |base64offset | Cherche la valeur encodée en base64, quelle que soit sa position |
| |cidr | L'adresse IP appartient à une plage |
| |windash | Accepte - et / devant les options d'une ligne de commande |
# Convertir une règle vers la requête d'un SIEM (pySigma, sigma-cli) sigma convert -t splunk -p sysmon regle.yml sigma convert -t lucene regle.yml
Sigma ou requête directe ?Une règle Sigma se partage et se convertit vers n'importe quel SIEM : c'est le format des dépôts publics (SigmaHQ). Une requête KQL ou SPL ne vaut que pour son outil.
Éléments d'une règle YARA
| Élément | Signification |
|---|---|
| meta: | Métadonnées libres : auteur, description, date |
| strings: | Déclaration des motifs ($a, $b…) |
| condition: | Expression booléenne qui décide de la correspondance |
| nocase | Chaîne insensible à la casse |
| wide | Chaîne en UTF-16 (deux octets par caractère) |
| ascii | Chaîne en ASCII (par défaut ; à combiner avec wide) |
| { 4D 5A ?? 00 } | Motif hexadécimal ; ?? remplace n'importe quel octet |
| #a > 3 | Le motif $a apparaît plus de trois fois |
| $a at 0 | Le motif $a se trouve au tout début du fichier |
| filesize < 1MB | Le fichier fait moins de 1 Mo |
| 2 of ($s*) | Au moins deux des motifs dont le nom commence par $s |
| uint16(0) == 0x5A4D | Les deux premiers octets valent MZ : exécutable Windows (PE) |
rule Chargeur_suspect
{
meta:
description = "Exemple : exécutable qui télécharge et lance un script"
strings:
$s1 = "DownloadString" ascii wide nocase
$s2 = "powershell" ascii wide nocase
$s3 = "-enc" ascii wide
condition:
uint16(0) == 0x5A4D and filesize < 2MB and 2 of ($s*)
}
# Lancer : yara -r regle.yar dossier/ (-s affiche les motifs trouvés)
Piège classiqueLes chaînes des exécutables Windows sont souvent en UTF-16 : sans le mot-clé wide, la règle ne les trouve pas.