Détection et réponse aux incidents · Étape 02

Teste, règle et versionne une détection sans masquer les faux positifs

Utilise cas positifs et négatifs, conserve les raw alerts, applique des exclusions bornées et trace chaque changement de version.

Durée indicative · ~2 hNiveau avancéPrérequis conseillé · Leçon 9 — alertes réseau Suricata et contextePratique · TP
L’idée reçue

« 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.

Livrable

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.

Ta progression

Chargement de l’état… Se connecter pour synchroniser.