« Une bonne règle est une règle qui ne produit jamais de faux positif. »
Une règle trop silencieuse peut simplement manquer des événements. Le tuning doit être borné, traçable et testé.
01Commence par les tests
lab=/tmp/soria-ir-lot2-$USER
column -s, -t "$lab/source/rules/rule-tests.csv"
Les quatre règles possèdent chacune :
1 cas attendu ALERT
1 cas attendu NO_ALERT
Après exécution :
bash module2-detection-engineering.sh run "$lab"
column -s, -t "$lab/output/test-results.csv"
Les huit cas doivent être PASS.
02Compare raw et tuned
column -s, -t "$lab/output/raw-alerts.csv"
column -s, -t "$lab/output/tuned-alerts.csv"
Le corpus de référence produit :
5 raw alerts
4 tuned alerts
La différence est volontairement explicable.
03Inspecte le faux positif connu
cat "$lab/source/tuning/known-benign.csv"
grep 'ID-MAINT' "$lab/output/false-positive-review.csv"
L’exclusion est bornée à :
rule DET-AUTH-001
field identity_id
value ID-MAINT
reason approved-maintenance-auth-test
owner secops
Le lab refuse une suppression large par rule_id seul et refuse une entrée sans propriétaire.
04Préserve ce qui a vraiment matché
grep 'ID-MAINT' "$lab/output/raw-alerts.csv"
! grep 'ID-MAINT' "$lab/output/tuned-alerts.csv"
L’alerte brute reste la preuve que la logique de détection a matché les événements. La vue tuned représente seulement une décision d’exploitation.
05Ne confonds pas false positive et harmless event
Trois dispositions sont utilisées :
KEEP → l'alerte reste prioritaire
KNOWN_BENIGN → contexte approuvé et borné
NEEDS_CONTEXT → pas assez d'éléments pour supprimer ou confirmer
NEEDS_CONTEXT évite de forcer une décision binaire trop tôt.
06Versionne la règle, pas seulement le fichier
column -s, -t "$lab/source/versions/rule-history.csv"
column -s, -t "$lab/output/version-report.csv"
Pour DET-AUTH-001 :
v1 experimental → initial-threshold
v2 test → bounded-maintenance-context-review
L’ID reste stable, la version augmente et la raison du changement est conservée.
07Évite les trois anti-patterns
1. supprimer toutes les alertes d'une règle bruyante ;
2. modifier le seuil sans rejouer les cas négatifs ;
3. remplacer l'ancienne règle sans conserver version et raison.
Ces pratiques réduisent la capacité à expliquer ce qui a changé et pourquoi.
08Exécute la validation complète
bash module2-detection-engineering.sh validate "$lab"
Le contrat exige :
14 fixtures intactes
5 hypothèses dont 1 NOT_TESTABLE
4 règles valides
8 tests PASS
10 familles négatives BLOCKED
5 raw / 4 tuned alerts
versions cohérentes
DETECTION_ENGINEERING_READY_WITH_ACTIONS
La décision conserve WITH_ACTIONS à cause de la lacune endpoint-edr et parce que les preuves restent synthétiques.
09Limite la conclusion
Ce résultat ne mesure pas précision, rappel, faux-positive rate réel, couverture ATT&CK, performance SIEM ou efficacité Suricata/Wazuh en production.
Propose un tuning sûr
Choisis une alerte de référence, propose une exclusion bornée avec champ, valeur, raison, propriétaire et durée. Explique quels tests doivent être rejoués avant de changer la version de la règle.
✓À retenir
Tester, tuner et versionner forment une seule discipline. Un faux positif documenté peut être filtré; il ne doit jamais disparaître de la preuve brute.