Aller au contenu

Conventions de nommage et de style YARA

Les conventions des jeux de règles YARA publics : préfixes de noms (MAL_, HKTL_…), champs meta, nommage des chaînes ($x, $s, $fp), formatage yr fmt et versionnage.

Publié le 3 min de lecture

Le style ne change pas ce qu’une règle détecte, mais il décide si le prochain analyste pourra la comprendre, lui faire confiance et la maintenir. Les conventions ci-dessous sont celles des grands jeux publics comme Signature Base ou les paquets YARA Forge ; les adopter rend vos règles familières à tous. Référence : le YARA Style Guide.

Noms de règles

Un format courant est PREFIXE_Famille_Detail_Date, du générique au spécifique, segments séparés par _ :

PréfixeSignificationExemple
MAL_MalwareMAL_Emotet_Loader_Mar24
APT_Outillage d’un acteur de la menaceAPT_UNC0000_Backdoor_Config
HKTL_Outil offensif / frameworkHKTL_CobaltStrike_Beacon_Strings
SUSP_Trait suspect, pas malveillant en soiSUSP_PE_Overlay_Base64_Script
EXPL_Exploit ou document piégéEXPL_CVE_2023_23397_Outlook
WEBSHELL_Web shellWEBSHELL_PHP_Generic_Eval
PUA_Application potentiellement indésirablePUA_Miner_XMRig_Config

Certains jeux ajoutent la plateforme (MAL_Win_, MAL_Linux_) ou une technique. YARA Forge préfixe en plus chaque règle par sa source (SIGNATURE_BASE_…), d’où les deux noms affichés sur les pages de la bibliothèque. Vous pouvez parcourir la bibliothèque par catégorie : malwares, outils offensifs, web shells.

Champs meta

ChampRôle
descriptionUne phrase : ce que la règle détecte
authorL’auteur (à conserver dans les résultats sous DRL 1.1)
referenceRapport, article ou dossier à l’origine de la règle
date / modifiedCréation et dernière modification, AAAA-MM-JJ
idUUID stable, qui survit aux renommages
hashHashes des échantillons utilisés (clé répétée)
scoreConfiance 0–100 qu’une correspondance soit malveillante
licenseLicence de la règle, si elle diffère de celle du dépôt
rule MAL_Example_Conventions_Sep26
{
    meta:
        description = "Chargeur d'exemple montrant les champs meta usuels"
        author = "yararules.org"
        reference = "https://yararules.org/fr/learn/style-conventions"
        date = "2026-09-29"
        modified = "2026-09-29"
        id = "5b0f7a58-1f35-4c1c-9d3e-6b2f4b1b8a10"
        hash = "0000000000000000000000000000000000000000000000000000000000000000"
        score = 75
        license = "DRL-1.1"
    strings:
        $x1 = "ExampleLoader_v3_config" ascii
        $s1 = "Stage2Url" wide
        $s2 = "InjectInto" ascii
        $fp1 = "Copyright (c) Example Software GmbH" wide
    condition:
        uint16(0) == 0x5A4D and filesize < 2MB and
        not 1 of ($fp*) and
        (1 of ($x*) or all of ($s*))
}

Nommage des chaînes

  • $x* — indicateurs forts (mutex, C2 unique), chacun suffisant seul ;
  • $s* — indicateurs moyens, qui ne comptent qu’en combinaison ;
  • $a*, $op* — groupes thématiques, par exemple $op* pour des séquences d’opcodes, ou $a* pour une présélection (magic, garde-fous) ;
  • $fp* — exclusions de faux positifs, utilisées avec not.

Les ensembles se lisent alors naturellement : 1 of ($x*) or 3 of ($s*).

Formatage

Une mise en page cohérente rend les diffs lisibles. yr fmt (YARA-X) réécrit les règles au format canonique. Le linter de ce site inclut un formateur prudent qui ne modifie que les espaces : il réindente les sections, aligne les = et laisse intactes les règles qui contiennent des commentaires.

  • Quatre espaces (ou une tabulation) pour les mots-clés de section, huit pour leur contenu.
  • Un motif par ligne ; les longues chaînes hexadécimales peuvent être coupées.
  • Une ligne vide entre les règles.

Commentaires

Utilisez les commentaires pour le raisonnement qui n’a pas sa place dans meta — pourquoi tel octet est en joker, de quelle compilation vient un motif — et restez concis. Tout ce qu’un consommateur doit voir dans les résultats va dans meta.

Versionnage

  • Ne réutilisez jamais un nom de règle pour une logique différente : créez une nouvelle règle et retirez l’ancienne.
  • Gardez l’id stable lors des renommages et mettez à jour modified à chaque changement de logique.
  • Consignez les faux positifs et leurs corrections (voir tests et CI).
  • Indiquez une licence : sans elle, personne ne peut légalement réutiliser votre règle (voir jeux de règles publics).

Comparez les pratiques de différentes sources dans la bibliothèque et vérifiez vos règles avec le linter.

FAQ

Que signifient les préfixes MAL_ ou HKTL_ dans les noms de règles ?
Ils classent la règle : MAL_ pour un malware, HKTL_ pour un outil offensif, SUSP_ pour un trait suspect, APT_ pour l’outillage d’un acteur, EXPL_ pour un exploit, WEBSHELL_ pour un web shell et PUA_ pour une application potentiellement indésirable.
Quels champs meta chaque règle devrait-elle avoir ?
Au minimum description, author, date et reference. Beaucoup de jeux ajoutent id, modified, score, hash et license.
Existe-t-il un formateur officiel ?
YARA-X fournit yr fmt, qui réécrit les règles dans une mise en page canonique. Le linter de ce site propose aussi un formateur prudent qui ne modifie que les espaces.