Timesketch - Feuille de triche analyse collaborative de frise chronologique judiciaire
Timesketch est un outil open-source (par Google) pour l”analyse collaborative de frise chronologique judiciaire. Les enquêteurs ingèrent des données horodatées — artefacts de disque/triage analysés par Plaso, journaux, CSV — dans un « sketch », puis recherchent, filtrent, marquent, commentent et étoilent les événements sur une frise chronologique partagée. Il est conçu pour le travail DFIR d”équipe : plusieurs analystes travaillent sur le même incident, partagent les recherches enregistrées et exécutent les analyseurs automatisés pour faire émerger l”activité suspecte. Il se marie naturellement avec les outils de collecte comme Velociraptor.
Déploiement
| Méthode | Commande / Note |
|---|
| Docker Compose (recommandé) | suivre le déploiement officiel docker-compose dans la documentation |
| Installation dev rapide | utiliser la configuration deploy/docker du projet |
| Créer un utilisateur | tsctl create-user <username> |
| Ajouter au groupe | tsctl add-user-to-group ... |
| Interface web | servie sur l”hôte/port configuré après le démarrage |
Timesketch est une application serveur (Elasticsearch/OpenSearch + PostgreSQL + interface web), pas un binaire unique. Déployer avec Docker Compose pour la configuration la plus fluide.
Ingestion de données
| Source | Comment |
|---|
| Fichier stockage Plaso | Charger un fichier .plaso produit par log2timeline.py |
| CSV / JSONL | Charger avec les colonnes obligatoires datetime, message, timestamp_desc |
| Importation CLI | timesketch_importer -u user -p pass --host URL data.csv |
| Importation API | Utiliser le client Python import_streamer |
Plaso → Timesketch
# Créer une super frise chronologique à partir d''une image/triage avec Plaso, puis importer
log2timeline.py --storage-file evidence.plaso /mnt/triage
timesketch_importer --host https://ts.example.com \
-u analyst evidence.plaso --sketch_id 1
Recherche sur la frise chronologique
Timesketch utilise une syntaxe de requête de style Elasticsearch/Lucene.
| Requête | Correspond |
|---|
powershell | Événements contenant le terme |
data_type:"windows:evtx:record" | Un type de données d”analyseur spécifique |
message:*mimikatz* | Wildcard dans le champ du message |
tag:bad | Événements que vous avez marqués « mauvais » |
datetime:[2026-06-01 TO 2026-06-02] | Une plage horaire |
event_identifier:4624 AND username:admin | Combinaisons booléennes |
Traiter les événements
| Action | Description |
|---|
| Star | Marquer les événements d”intérêt |
| Tag | Appliquer des étiquettes (par ex. bad, suspicious, lateral-movement) |
| Comment | Ajouter des notes d”enquêteur à un événement |
| Saved search | Stocker une requête pour réutilisation / partage |
| Story | Écrire un récit qui intègre les recherches enregistrées et les conclusions |
Analyseurs
Les analyseurs s”exécutent automatiquement sur une frise chronologique pour marquer les modèles.
| Analyseur | Fait émerger |
|---|
| Browser search / artifacts | Activité web d”intérêt |
| Login/Windows events | Anomalies d”authentification |
| Sigma | Correspond aux règles de détection Sigma par rapport aux événements |
| Yet, threat intel feeds | Indicateurs connus mauvais |
| Tagger | Marque automatiquement les événements par règles |
| Tâche | Comment |
|---|
| Exécuter un analyseur | Déclencher à partir de l”interface utilisateur ou de l”API sur une frise chronologique |
| Règles Sigma | Gérer les règles pour que l”analyseur Sigma puisse les faire correspondre |
| Agrégations | Construire des graphiques (par ex. événements au fil du temps, utilisateurs principaux) |
API / Automation
from timesketch_api_client import client
ts = client.TimesketchApi("https://ts.example.com", "analyst", "password")
sketch = ts.get_sketch(1)
for event in sketch.explore("tag:bad", as_pandas=True).itertuples():
print(event.message)
Workflows courants
# Construire une super frise chronologique à partir de la sortie de triage et la charger dans un sketch
log2timeline.py --storage-file case.plaso /evidence
timesketch_importer -u analyst case.plaso --sketch_id 5
# Dans l''interface utilisateur : rechercher l''activité suspecte, marquer les conclusions, écrire une Story
# message:*mimikatz* → tag "credential-access" → ajouter à Story
Timesketch vs autres outils de frise chronologique
| Aspect | Timesketch | Plaso (log2timeline) | Splunk |
|---|
| Rôle | Interface utilisateur d”analyse collaborative | Génération de frise chronologique | SIEM/analyse de journaux |
| Collaboration | De première classe (sketches, stories) | Aucune (CLI) | Tableaux de bord d”équipe |
| Entrée | Plaso, CSV, JSONL | Système de fichiers/artefacts | Forwarders/indexes |
| Meilleur pour | Examen de frise chronologique DFIR d”équipe | Production de la frise chronologique | Journalisation d”entreprise large |
Ressources