Aller au contenu

YARA-X vs YARA : différences et migration

YARA-X, la réécriture en Rust de YARA par VirusTotal : compatibilité, analyse plus stricte, nouveautés, différences de ligne de commande, migration et usage navigateur.

Publié le 4 min de lecture

YARA-X est le successeur de YARA, réécrit en Rust par VirusTotal. Il lit le même langage de règles : la transition est généralement indolore, mais il est volontairement plus strict là où YARA 4.x était permissif. Ce guide résume ce qui change et comment migrer un jeu de règles.

Historique et statut

YARA est né chez VirusTotal et s’est imposé comme le langage de référence pour décrire des fichiers malveillants. Après plus de dix ans de code C, VirusTotal a lancé YARA-X avec trois objectifs : de meilleurs messages d’erreur, de meilleures performances sur les jeux de règles complexes, et une base de code plus sûre. YARA-X tourne en production chez VirusTotal (Livehunt et Retrohunt) ; YARA 4.x reçoit surtout de la maintenance. Pour démarrer : documentation YARA-X.

Compatibilité

Le langage est le même : meta, strings, condition, motifs texte/hex/regex, modificateurs, quantificateurs, boucles et modules courants. Sur les milliers de règles de cette bibliothèque, l’immense majorité compile avec YARA-X 1.20 sans modification — chaque page de règle indique son statut, et les packs du scanner ne contiennent que des règles qui compilent.

Différences notables

  • Analyse plus stricte. Les échappements invalides dans les chaînes et regex (comme l’option --strict-escape de YARA 4.4, mais par défaut), les modificateurs invalides ou en double et certaines constructions ambiguës sont des erreurs au lieu d’être acceptés en silence.
  • Erreurs plus claires. Chaque diagnostic a un code, un message, la ligne et la colonne exactes, avec l’extrait de source. L’éditeur en ligne les affiche pendant la saisie.
  • Champs de modules inconnus = erreur. Un champ pe. mal orthographié échoue à la compilation au lieu de valoir « indéfini » au scan.
  • Modificateur base64. La chaîne doit faire au moins trois caractères.
  • Performance. Meilleur comportement avec les regex complexes et les grands jeux de règles ; avertissements à la compilation sur les motifs probablement lents.
  • Nouvelle syntaxe. L’instruction with définit des variables locales dans une condition (voir conditions). Les règles qui l’utilisent ne compilent pas avec YARA 4.
  • Modules. Noms et champs majoritairement partagés ; certains réorganisés, de nouveaux ajoutés (lnk, dex, crx…), et magic absent des versions sans libmagic, comme la version WebAssembly.
  • Includes et fonctionnalités obsolètes. La gestion d’include dépend de l’outil, et quelques fonctionnalités dépréciées depuis longtemps ont disparu.

Comparaison des lignes de commande

TâcheYARA 4.xYARA-X
Scanner un fichier ou un dossieryara rules.yar cibleyr scan rules.yar cible
Vérifier la syntaxeyarac rules.yar out.binyr check rules.yar
Compiler en binaireyaracyr compile
Formater une règle—yr fmt rules.yar
Afficher la sortie des modulesyara -Dyr dump fichier / yr dump -m pe fichier
Afficher les chaînes trouvéesyara -syr scan -s

Check-list de migration

  1. Lancez yr check sur tout le jeu et corrigez fichier par fichier. Les codes d’erreur sont stables : on peut les rechercher avec grep.
  2. Corrigez les échappements : dans une chaîne, seuls \" \\ \t \n \r \xNN sont valides ; dans une regex, échappez / et n’échappez pas les lettres ordinaires.
  3. Supprimez les modificateurs incompatibles (par exemple nocase avec xor, ou base64 avec fullword).
  4. Remplacez les identifiants dépréciés comme entrypoint par pe.entry_point ou elf.entry_point.
  5. Revérifiez les noms de champs avec yr dump -m <module> echantillon.
  6. Rejouez vos échantillons positifs et votre corpus de goodware (voir tests et CI) : les correspondances doivent être identiques.
  7. Examinez les nouveaux avertissements de performance ; le guide performance les explique pour la plupart.

Une règle qui doit compiler sur les deux moteurs doit éviter with et toute syntaxe propre à YARA-X.

Une règle qui illustre la rigueur de YARA-X

rule Escape_Example
{
    strings:
        $ok = "C:\\Windows\\Temp\\"
        $bad = "C:\Windows\Temp"   // does not compile: \W et \T ne sont pas des échappements valides
    condition:
        any of them
}

YARA-X rejette $bad en indiquant la colonne exacte ; la correction consiste à doubler chaque barre oblique inverse, comme dans $ok.

YARA-X dans le navigateur

YARA-X se compile en WebAssembly. Les outils de ce site utilisent la version officielle @virustotal/yara-x (1.20.0, licence BSD-3-Clause), servie par ce site et exécutée dans un Web Worker :

  • le scanner analyse fichiers et archives ZIP avec les packs de la bibliothèque ou vos règles ;
  • l’éditeur compile pendant la saisie et teste sur un fichier déposé ;
  • le linter ajoute des heuristiques de performance aux diagnostics YARA-X.

Rien n’est téléversé : les fichiers sont lus via l’API File du navigateur et scannés en mémoire. Détails officiels : Differences with YARA.

FAQ

Mes règles YARA existantes fonctionneront-elles avec YARA-X ?
La plupart compilent sans changement. Celles qui reposaient sur une analyse permissive — échappements invalides, regex douteuses, modificateurs en double ou incompatibles — demandent de petites corrections que YARA-X indique précisément.
YARA est-il toujours maintenu ?
YARA 4.x reçoit encore de la maintenance, mais le développement se concentre sur YARA-X, utilisé en production par VirusTotal.
YARA-X peut-il tourner dans un navigateur ?
Oui, YARA-X se compile en WebAssembly. Le scanner, l’éditeur et le linter de ce site l’exécutent dans un Web Worker : les fichiers sont analysés localement.