Aller au contenu

Aide-mémoire YARA : syntaxe, modificateurs

Une référence YARA et YARA-X sur une page : squelette de règle, types de chaînes et modificateurs, syntaxe hex, opérateurs, quantificateurs, boucles, magic bytes et CLI.

Publié le 3 min de lecture

Une référence dense pour écrire des règles. Chaque règle complète ci-dessous compile avec YARA-X ; testez les vôtres dans l’éditeur.

Squelette de règle

import "pe"

rule PREFIX_Family_Detail : tag1 tag2
{
    meta:
        description = "Ce que détecte la règle"
        author = "vous"
        date = "2026-09-29"
        reference = "https://example.org/rapport"
    strings:
        $x1 = "very specific string" ascii wide
        $s1 = { 8B 45 ?? 33 C9 [2-4] E8 }
        $s2 = /config_[a-f0-9]{8}/
    condition:
        uint16(0) == 0x5A4D and filesize < 5MB and
        (1 of ($x*) or all of ($s*)) and
        pe.number_of_sections > 2
}

Seule condition est obligatoire. Ordre : meta, strings, condition. Modificateurs : private rule (non rapportée, utilisable par d’autres règles), global rule (doit être vraie pour que toute règle de l’espace de noms corresponde).

Chaînes

TypeSyntaxeExemple
Texte"…"$a = "cmd.exe /c"
Hexadécimal{ … }$h = { 4D 5A ?? 00 }
Regex/…/is$r = /evil[0-9]{2}\.exe/

Échappements texte : \" \\ \t \n \r \xNN.

Modificateurs

ModificateurTexteHexRegexRôle
asciioui–ouiOctets bruts (par défaut)
wideoui–ouiUTF-16LE
nocaseoui–ouiInsensible à la casse
fullwordoui–ouiDélimité par des non-alphanumériques
xor / xor(a-b)oui––Clés XOR d’un octet
base64 / base64wideoui––Dans des données base64 (3 octets min. avec YARA-X)
privateouiouiouiMasqué dans les résultats

Syntaxe hexadécimale

SyntaxeSignification
??Octet quelconque
A? / ?AJoker sur un quartet
[4] / [2-6] / [8-]Sauts
( 01 02 | 03 )Alternatives
~00Tout octet sauf 00

Opérateurs de condition

CatégorieOpérateurs
Booléensand or not
Comparaison== != < <= > >=
Arithmétique+ - * \ (division entière) %
Bit à bit& | ^ ~ << >>
Chaînes (valeurs de modules)contains icontains startswith istartswith endswith iendswith iequals matches
Motifs$a #a @a[i] !a[i] $a at N $a in (A..B)
Fichierfilesize uint8/16/32(off) int8/16/32(off) + variantes be
Définitiondefined expr

Quantificateurs et boucles

ExpressionSignification
any of them / all of them / none of themSur tous les motifs
2 of ($s*) / 50% of themNombre ou pourcentage
any of ($a, $b)Ensemble explicite
for any i in (1..#a) : ( @a[i] < 100 )Boucle sur les occurrences
for all of ($x*) : ( # > 2 )Boucle sur les motifs ($, #, @ = courant)
for any s in pe.sections : ( s.name == ".text" )Boucle sur un tableau de module
with x = uint32(0x3C) : ( … )Variable locale (YARA-X uniquement)

Magic bytes

FormatContrôle
PE (MZ)uint16(0) == 0x5A4D
ELFuint32(0) == 0x464C457F
Mach-O 64uint32(0) == 0xFEEDFACF
PDF %PDFuint32(0) == 0x46445025
ZIP / OOXML PK\x03\x04uint32(0) == 0x04034B50
OLE D0 CF 11 E0uint32(0) == 0xE011CFD0
Gzipuint16(0) == 0x8B1F
Shebang #!uint16(0) == 0x2123

Extraits de modules

import "pe"
import "math"
import "hash"

rule Module_Snippets
{
    condition:
        pe.is_pe and (
            pe.imports("kernel32.dll", "VirtualAlloc") or
            pe.exports("DllRegisterServer") or
            pe.imphash() == "00000000000000000000000000000000" or
            math.entropy(0, 4096) > 7.0 or
            hash.md5(0, 64) == "00000000000000000000000000000000"
        )
}

Ligne de commande YARA-X

CommandeRôle
yr scan rules.yar cibleScanner un fichier ou un dossier
yr scan -s rules.yar cibleAfficher aussi les motifs trouvés
yr check rules.yarCompiler et signaler erreurs/avertissements
yr fmt rules.yarFormater les règles
yr compile rules.yar -o rules.yarcEnregistrer les règles compilées
yr dump -m pe fichier.exeVoir ce qu’extrait un module

Performance : à faire, à éviter

À faireÀ éviter
4 octets fixes consécutifs ou plus par motifChaînes de moins de 4 octets
Magic bytes et filesize en premierAppels de modules avant les garde-fous
Jokers seulement sur les opérandes variablesHex fait de ?? et de 00
Littéraux d’ancrage dans les regex.* initial, + non borné
Boucle sur 1..#aBoucle sur 0..filesize
nocase/xor sur des chaînes longuesxor/base64 sur des chaînes courtes

Pour les explications, lisez les guides syntaxe, chaînes, conditions, modules et performance ; vérifiez une règle avec le linter.

FAQ

Existe-t-il un aide-mémoire YARA imprimable ?
Cette page est conçue comme une référence d’une page ; imprimez-la depuis votre navigateur. Chaque règle complète qu’elle contient compile avec YARA-X 1.20.
Quel est l’opérateur de division entière en YARA ?
YARA utilise la barre oblique inverse pour la division entière, par exemple filesize \ 2, et % pour le reste.