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.
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-escapede 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
withdé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…), etmagicabsent des versions sans libmagic, comme la version WebAssembly. - Includes et fonctionnalités obsolètes. La gestion d’
includedépend de l’outil, et quelques fonctionnalités dépréciées depuis longtemps ont disparu.
Comparaison des lignes de commande
| Tâche | YARA 4.x | YARA-X |
|---|---|---|
| Scanner un fichier ou un dossier | yara rules.yar cible | yr scan rules.yar cible |
| Vérifier la syntaxe | yarac rules.yar out.bin | yr check rules.yar |
| Compiler en binaire | yarac | yr compile |
| Formater une règle | — | yr fmt rules.yar |
| Afficher la sortie des modules | yara -D | yr dump fichier / yr dump -m pe fichier |
| Afficher les chaînes trouvées | yara -s | yr scan -s |
Check-list de migration
- Lancez
yr checksur tout le jeu et corrigez fichier par fichier. Les codes d’erreur sont stables : on peut les rechercher avec grep. - Corrigez les échappements : dans une chaîne, seuls
\" \\ \t \n \r \xNNsont valides ; dans une regex, échappez/et n’échappez pas les lettres ordinaires. - Supprimez les modificateurs incompatibles (par exemple
nocaseavecxor, oubase64avecfullword). - Remplacez les identifiants dépréciés comme
entrypointparpe.entry_pointouelf.entry_point. - Revérifiez les noms de champs avec
yr dump -m <module> echantillon. - Rejouez vos échantillons positifs et votre corpus de goodware (voir tests et CI) : les correspondances doivent être identiques.
- 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.