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.

CDSACDEPDétection

Structure d'une règle Sigma

ChampRôle
titleNom court de la règle
idIdentifiant unique (UUID)
statusMaturité : experimental, test ou stable
logsourceSource de données visée : product, category, service
detectionSélections de champs et condition qui les combine
conditionCombinaison logique des sélections (and, or, not, 1 of selection*)
falsepositivesCas légitimes connus qui déclenchent la règle
levelGravité : informational, low, medium, high, critical
tagsTechniques 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

ModificateurEffet
|containsLa valeur apparaît n'importe où dans le champ
|startswithLe champ commence par la valeur
|endswithLe champ se termine par la valeur
|allToutes les valeurs de la liste doivent être présentes
|reExpression régulière
|base64offsetCherche la valeur encodée en base64, quelle que soit sa position
|cidrL'adresse IP appartient à une plage
|windashAccepte - 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émentSignification
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
nocaseChaîne insensible à la casse
wideChaîne en UTF-16 (deux octets par caractère)
asciiChaîne en ASCII (par défaut ; à combiner avec wide)
{ 4D 5A ?? 00 }Motif hexadécimal ; ?? remplace n'importe quel octet
#a > 3Le motif $a apparaît plus de trois fois
$a at 0Le motif $a se trouve au tout début du fichier
filesize < 1MBLe fichier fait moins de 1 Mo
2 of ($s*)Au moins deux des motifs dont le nom commence par $s
uint16(0) == 0x5A4DLes 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.