« Si une ligne existe dans un fichier de logs, elle est forcément exploitable. »
Un événement sans source fiable, temps cohérent ou identité traçable peut conduire à une chronologie fausse et à une mauvaise décision.
01Observe avant d’interpréter
Après setup, lis quatre sources:
head "$lab/source/events/windows-security.csv"
head "$lab/source/events/linux-auth.csv"
head "$lab/source/events/network-sensor.csv"
head "$lab/source/events/application.csv"
Toutes utilisent dans ce lot un schéma d’entrée volontairement simple. Cette homogénéité de fixture ne prétend pas que Windows, Linux, Suricata et une application émettent réellement le même format.
Le but est d’étudier les propriétés nécessaires avant normalisation.
02Vérifie les champs qui changent la conclusion
Pour un événement d’authentification, vérifie au minimum:
event_id
horodatage
source_id
asset_id
identity_id
type d'événement
résultat
identity_id peut être absent d’une observation réseau qui n’identifie pas une personne. Il ne peut pas être supprimé d’un événement Windows déclaré par la politique comme porteur d’identité.
La qualité dépend donc du type de source, pas d’une checklist aveugle.
03Teste le temps comme donnée de sécurité
column -s, -t "$lab/source/quality/clock-policy.csv"
column -s, -t "$lab/output/quality-report.csv"
Le lab fixe une tolérance synthétique de 120 secondes. Ce nombre n’est pas une recommandation universelle: c’est une règle du scénario permettant de démontrer un contrôle déterministe.
Pourquoi le temps compte:
09:04 verrouillage du compte
09:05 alerte réseau
Si une source dérive de plusieurs minutes, l’ordre apparent peut être faux. Une investigation doit connaître la qualité de l’horloge, pas seulement afficher un timestamp.
04Vérifie l’original par empreinte
setup calcule un manifeste SHA-256 des douze fichiers copiés:
cat "$lab/.source-manifest.sha256"
run ne remplace pas ce corpus. Il produit des dérivés sous output/.
Le huitième test négatif modifie une copie de travail et vérifie que le manifeste ne correspond plus. Il ne touche jamais aux originaux.
column -s, -t "$lab/output/negative-results.csv"
La ligne attendue est:
provenance-sha256-mismatch BLOCKED
Une empreinte prouve l’égalité des octets avec une référence connue dans cet exercice. Elle ne prouve ni l’origine juridique du fichier ni une chaîne de custody réelle.
05Refuse les huit défauts au lieu de les réparer
Le Lot 1 bloque exactement:
- timestamp absent;
- timestamp mal formé;
- dérive d’horloge au-delà de la règle;
- source inconnue;
- actif inconnu;
- identité obligatoire absente;
- identifiant d’événement dupliqué;
- provenance SHA-256 altérée.
Le comportement important est le refus. Le lab ne remplit jamais identity_id=unknown-user pour faire passer un contrôle.
06Distingue inconnu et invalide
Trois situations ne signifient pas la même chose:
identity_id = -
source réseau qui ne promet pas d'identité → acceptable
identity_id vide
source Windows qui exige une identité → invalide
identity_id = ID-NOT-FOUND
valeur présente mais non reliée au référentiel → invalide
Cette distinction évite de transformer l’absence de preuve en une fausse précision.
07Contrôle sans déclarer le réel
bash module1-telemetry-timeline-qualification.sh validate "$lab"
Le résultat prouve la cohérence du corpus local. Il ne démontre pas la configuration d’audit Windows/Linux, NTP, rétention, Wazuh, Suricata ou un utilisateur réel.
Diagnostique quatre événements incomplets
Pour chacun, indique s’il faut le rejeter, le conserver avec une limite ou demander une source complémentaire. Ne fabrique jamais un champ absent.
✓À retenir
Une chronologie fiable exige des événements traçables, temporellement cohérents et contextualisés. La qualité précède la corrélation.