Tester des règles YARA : échantillons, goodware, CI
Tester une règle YARA avant de la déployer : échantillons positifs, corpus de goodware contre les faux positifs, yr check, tests unitaires et pipeline CI GitHub Actions.
Une règle jamais testée est une supposition. Tester répond à trois questions : compile-t-elle, détecte-t-elle ce qu’elle doit détecter, et reste-t-elle muette sur tout le reste ? Ce guide met en place une routine simple, manuelle comme en intégration continue.
Pourquoi tester
- Dérive de syntaxe : une règle écrite pour YARA 4 peut ne pas compiler avec YARA-X, et inversement.
- Détections manquées : une coquille dans une chaîne hexadécimale ou une condition trop stricte rend une règle silencieusement inutile.
- Faux positifs : des chaînes génériques touchent installeurs, navigateurs et DLL système. En production, cela signifie fatigue d’alertes et perte de confiance.
- Régressions de performance : un seul motif lent pénalise tous les scans (voir performance).
Constituer un petit corpus de test
Gardez deux répertoires à côté de vos règles :
tests/positive/— les échantillons que la règle doit détecter. Pour des malwares, stockez-les chiffrés (archive protégée par mot de passe) ou référencez-les par hash et récupérez-les dans un environnement maîtrisé.tests/goodware/— des fichiers sains que la règle ne doit pas toucher : binaires système de plusieurs versions, installeurs courants, documents bureautiques, scripts. Plus il est gros, mieux c’est ; vos propres images « golden » sont idéales.
Pour tester une logique sans vrai malware, fabriquez de minuscules fichiers synthétiques contenant seulement vos marqueurs au bon endroit.
# Un positif synthétique : en-tête MZ + les deux chaînes attendues
printf 'MZ' > tests/positive/synthetic.bin
head -c 200 /dev/zero >> tests/positive/synthetic.bin
printf 'LoaderInit\0GetProcAddress\0' >> tests/positive/synthetic.bin
Vérifications de compilation et de format
La ligne de commande YARA-X yr fournit ce qu’il faut :
yr check rules/ # compile tout, signale erreurs et avertissements
yr fmt rules/example.yar # réécrit le fichier au format canonique
yr scan rules/example.yar tests/positive/ # doit lister chaque échantillon positif
yr scan rules/example.yar tests/goodware/ # ne doit rien afficher
Avec YARA 4.x, yarac compile et yara -r scanne récursivement.
Une règle de test pour démarrer
rule MAL_Test_Target
{
meta:
= "Règle cible du guide de tests"
= "yararules.org"
= "2026-09-29"
strings:
$a = "LoaderInit" ascii
$b = "GetProcAddress" ascii
condition:
uint16(0) == 0x5A4D and filesize < 1MB and all of them
}
Le fichier synthétique ci-dessus la déclenche ; un exécutable sain sans LoaderInit non. Essayez les deux dans l’éditeur en ligne : collez la règle, déposez le fichier dans le panneau de test et voyez les chaînes trouvées avec leurs offsets.
Intégration continue
Exécutez les mêmes contrôles à chaque modification. Un workflow GitHub Actions minimal :
name: yara
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install YARA-X
run: cargo install yara-x-cli
- name: Compile
run: yr check rules/
- name: Positive samples must match
run: |
for f in tests/positive/*; do
yr scan rules/ "$f" | grep -q . || { echo "no match: $f"; exit 1; }
done
- name: Goodware must not match
run: |
out=$(yr scan rules/ tests/goodware/ || true)
if [ -n "$out" ]; then echo "$out"; exit 1; fi
L’installation depuis crates.io compile YARA-X depuis les sources ; un binaire précompilé téléchargé depuis les releases YARA-X accélère le job. Pour les dépôts GitHub, YARA-CI teste aussi les règles contre un corpus de goodware.
Suivre les faux positifs dans le temps
- Consignez chaque faux positif avec le hash du fichier, la règle et la correction, puis ajoutez le fichier au corpus de goodware pour éviter toute régression.
- Préférez une exclusion
$fp*ou un contrôle structurel plus strict à la suppression d’une chaîne utile. - Un champ meta
score(0–100) permet aux consommateurs de pondérer les règles faibles différemment des règles de haute confiance.
Versionner ses règles
Gardez des métadonnées qui rendent les règles maintenables : un id stable (UUID), la date de création, la date modified, author, reference et les hash d’échantillons. Les conventions listent les pratiques courantes. Quand la logique change, mettez à jour modified pour que les utilisateurs sachent qu’il faut retester.
Check-list rapide
yr checkpasse sans erreur (et les avertissements sont examinés).- Chaque échantillon positif est détecté.
- Le corpus de goodware ne produit aucune correspondance.
- Le linter n’affiche aucun avertissement de performance, ou chacun est justifié.
- Les métadonnées sont complètes et
modifiedest à jour.
FAQ
- Comment tester une règle YARA en ligne ?
- Collez la règle dans l’éditeur de ce site et déposez un fichier d’exemple dans le panneau de test. YARA-X s’exécute dans votre navigateur en WebAssembly : le fichier n’est jamais envoyé.
- Qu’est-ce qu’un corpus de goodware ?
- Une collection de fichiers réputés sains (binaires système, installeurs courants, documents) servant à mesurer la fréquence à laquelle une règle touche des fichiers légitimes.
- Quelle commande vérifie la syntaxe de règles YARA-X ?
- yr check rules.yar compile les règles et rapporte erreurs et avertissements, sans rien scanner.