Un éditeur publie les indicateurs d’une nouvelle campagne de rançongiciel ; le CERT-FR diffuse une alerte avec des empreintes de fichiers ; votre EDR a mis en quarantaine un document douteux. Dans chaque cas, la même question se pose : ce fichier, ou un cousin de ce fichier, est-il présent ailleurs chez nous ? Les empreintes (hash) ne trouvent que des copies exactes. YARA permet de décrire une famille de fichiers par ses caractéristiques et de la rechercher partout. Voici comment écrire vos premières règles, les tester et les utiliser sans déclencher une avalanche de faux positifs.
L’essentiel en 30 secondes
- Une règle YARA combine des chaînes (texte, hexadécimal, expressions régulières) et une condition logique.
- La version de référence est désormais YARA-X, réécriture en Rust par VirusTotal, stable depuis juin 2025 et publiée chaque mois ; l’outil historique en C ne reçoit plus que de la maintenance.
- La plupart des règles existantes fonctionnent sans modification, ou presque, avec YARA-X.
- Une bonne règle est spécifique : testez-la toujours sur des fichiers sains avant de la déployer.
Installer YARA-X
YARA-X est distribué sous forme de binaires précompilés (Windows, Linux, macOS), via Cargo et en module Python (pip install yara-x). L’outil en ligne de commande s’appelle yr :
# Vérifier la syntaxe d'un fichier de règles
yr check regles/
# Analyser un dossier de façon récursive
yr scan regles/rancongiciel.yar /srv/partages/
# Mode rapide (correspondance des chaînes seulement) pour un premier tri
yr scan --fast-scan regles/ /srv/partages/
Le mode --fast-scan, ajouté en mai 2026, ignore l’évaluation des conditions : il est plus rapide mais produit davantage de faux positifs. Il sert au tri initial, pas au verdict.
Anatomie d’une règle
rule Script_Telechargement_Execution
{
meta:
auteur = "MPCSI"
description = "Script PowerShell qui télécharge et exécute du code en mémoire"
date = "2026-10-08"
reference = "Analyse interne"
strings:
$dl1 = "DownloadString" ascii wide nocase
$dl2 = "DownloadData" ascii wide nocase
$ex1 = "IEX" ascii wide
$ex2 = "Invoke-Expression" ascii wide nocase
$b64 = "FromBase64String" ascii wide nocase
condition:
filesize < 500KB and 1 of ($dl*) and 1 of ($ex*) and $b64
}
- meta : documentation (auteur, date, source). Indispensable pour maintenir un catalogue.
- strings : les motifs recherchés.
ascii widecouvre l’encodage simple et UTF-16 de Windows ;nocaseignore la casse. - condition : la logique. Ici, un fichier de moins de 500 Ko qui télécharge, exécute et décode du Base64.
Un exemple orienté rançongiciel
Avant de chiffrer, la plupart des rançongiciels suppriment les clichés instantanés et désactivent la récupération Windows. Une règle peut cibler un exécutable qui embarque plusieurs de ces commandes :
rule Rancongiciel_Preparation_Destruction_Sauvegardes
{
meta:
auteur = "MPCSI"
description = "Exécutable contenant plusieurs commandes de destruction des sauvegardes"
date = "2026-10-08"
strings:
$s1 = "vssadmin delete shadows" ascii wide nocase
$s2 = "wbadmin delete catalog" ascii wide nocase
$s3 = "recoveryenabled no" ascii wide nocase
$s4 = "shadowcopy delete" ascii wide nocase
condition:
uint16(0) == 0x5A4D and filesize < 10MB and 2 of ($s*)
}
uint16(0) == 0x5A4D vérifie la signature « MZ » des exécutables Windows. Le module pe permet d’aller plus loin (sections, imports, signature numérique).
Éviter les faux positifs
| Erreur fréquente | Correction |
|---|---|
| Chaîne trop courte ou trop banale (« http », « cmd ») | Choisir des chaînes rares, propres à la famille visée |
| Condition « any of them » | Exiger une combinaison : « 2 of », « all of », ou des groupes |
| Pas de limite de taille ni de type | Ajouter filesize et une vérification d’en-tête |
| Règle jamais testée sur du « bon » logiciel | Analyser un corpus sain (dossiers Windows, Program Files, logiciels métier) |
| Règle sans date ni source | Renseigner les métadonnées pour savoir quand la retirer |
Où utiliser YARA dans une PME
- Réponse à incident : rechercher sur les serveurs et partages les fichiers d’une même famille que celui découvert (voir le playbook des 60 premières minutes).
- Exploitation d’alertes : appliquer les règles publiées par des éditeurs et CERT avec les indicateurs de compromission.
- Surveillance continue : Wazuh peut déclencher une analyse YARA sur les fichiers nouvellement créés.
Des collections de règles publiques et maintenues existent, comme YARA Forge (qui agrège et teste des règles de nombreuses sources) ou la « signature-base » de Nextron Systems. Commencez par elles avant d’écrire les vôtres. Pour les journaux plutôt que les fichiers, l’équivalent est Sigma.
Questions fréquentes
YARA remplace-t-il un antivirus ?
Non. C’est un outil de recherche et de classification, utilisé par les analystes et intégré dans de nombreux produits. Il ne bloque rien par lui-même.
Mes règles YARA classiques fonctionneront-elles avec YARA-X ?
Dans la grande majorité des cas, oui. YARA-X est plus strict sur certaines constructions ambiguës et signale des erreurs que YARA tolérait ; un guide de migration est fourni.
Peut-on analyser la mémoire avec YARA ?
Oui, des outils d’investigation comme Velociraptor ou Volatility appliquent des règles YARA à la mémoire des processus, utile contre les maliciels qui n’écrivent rien sur le disque.
Faut-il partager ses règles ?
Partager des règles génériques aide la communauté ; évitez toutefois de publier des règles qui révèlent des détails de votre infrastructure.
Sources
- VirusTotal, documentation officielle de YARA-X.
- VirusTotal, notes de version de YARA-X (dont 1.17, mai 2026).
- Documentation de YARA (écriture de règles).
- YARA Forge, collections de règles publiques testées.
Besoin d’un accompagnement ?
MPCÂBLE Solutions Informatiques (MPCSI) accompagne particuliers, entreprises, associations et collectivités depuis Gaudiès, en Ariège : sur site en Occitanie, principalement dans un rayon de 40 km (Pamiers, Foix, Mirepoix, Saverdun, Castelnaudary), et à distance partout en France. Nous intervenons en audit et en accompagnement après incident. Demandez un devis gratuit ou appelez le 05 32 42 99 98.
