Que fait Analyse médico-légale de navigateur avec Hindsight ?
Présentation
Hindsight est un outil open source d’analyse médico-légale de navigateur conçu pour analyser les artefacts de Google Chrome et d’autres navigateurs basés sur Chromium (Microsoft Edge, Brave, Opera, Vivaldi). Il extrait et corrèle des données provenant de plusieurs fichiers de base de données du navigateur pour créer une chronologie unifiée de l’activité Web. Hindsight peut analyser les URLs, l’historique des téléchargements, les enregistrements de cache, les favoris, les données de saisie automatique, les mots de passe enregistrés, les préférences, les extensions de navigateur, les cookies HTTP, le stockage local (cookies HTML5), les données de connexion et les informations de session/onglet. L’outil produit des chronologies chronologiques dans plusieurs formats de sortie (XLSX, JSON, SQLite) qui permettent aux enquêteurs de reconstruire l’activité Web d’un utilisateur pour la réponse aux incidents, les enquêtes sur les menaces internes et les affaires pénales.
Quand l’utiliser
- Lors d’enquêtes sur des incidents de sécurité nécessitant une analyse médico-légale de navigateur avec Hindsight
- Lors de l’élaboration de règles de détection ou de requêtes de chasse aux menaces pour ce domaine
- Lorsque les analystes SOC ont besoin de procédures structurées pour ce type d’analyse
- Lors de la validation de la couverture de la surveillance de sécurité pour les techniques d’attaque associées
Prérequis
- Python 3.8+ avec Hindsight installé (
pip install pyhindsight)
- Accès aux répertoires de profil du navigateur à partir d’une image médico-légale
- Données de profil du navigateur (non chiffrées avec le chiffrement au niveau du système d’exploitation)
- Timeline Explorer ou application de tableur pour l’analyse
Emplacements des profils de navigateur
| Navigateur | Chemin du profil Windows |
|---|
| Chrome | %LOCALAPPDATA%\Google\Chrome\User Data\Default\ |
| Edge | %LOCALAPPDATA%\Microsoft\Edge\User Data\Default\ |
| Brave | %LOCALAPPDATA%\BraveSoftware\Brave-Browser\User Data\Default\ |
| Opera | %APPDATA%\Opera Software\Opera Stable\ |
| Vivaldi | %LOCALAPPDATA%\Vivaldi\User Data\Default\ |
| Chrome (macOS) | ~/Library/Application Support/Google/Chrome/Default/ |
| Chrome (Linux) | ~/.config/google-chrome/Default/ |
Principaux fichiers d’artefacts
| Fichier | Contenu |
|---|
| History | Visites d’URL, téléchargements, recherches par mots-clés |
| Cookies | Cookies HTTP avec domaine, date d’expiration, valeurs |
| Web Data | Entrées de saisie automatique, cartes de crédit enregistrées |
| Login Data | Noms d’utilisateur/mots de passe enregistrés (chiffrés) |
| Bookmarks | Arborescence de favoris JSON |
| Preferences | Configuration du navigateur et extensions |
| Local Storage/ | Stockage local HTML5 par domaine |
| Session Storage/ | Stockage spécifique à la session par domaine |
| Network Action Predictor | URLs précédemment tapées |
| Shortcuts | Raccourcis et prédictions de la barre d’adresse |
| Top Sites | Sites fréquemment visités |
Exécution de Hindsight
Ligne de commande
hindsight.exe -i "C:\Evidence\Users\suspect\AppData\Local\Google\Chrome\User Data\Default" -o C:\Output\chrome_analysis
hindsight.exe -i "/chemin/vers/profil" -o /output/analysis -b Chrome
hindsight.exe -i "C:\Evidence\Chrome\Default" -o C:\Output\chrome --format jsonl
hindsight.exe -i "C:\Evidence\Chrome\Default" -o C:\Output\chrome --cache
Interface Web
hindsight_gui.exe
Détails de l’analyse des artefacts
Historique des URLs et visites
Historique des téléchargements
Analyse des cookies
Script d’analyse Python
import sqlite3
import os
import json
import sys
from datetime import datetime, timedelta
CHROME_EPOCH = datetime(1601, 1, 1)
def chrome_time_to_datetime(chrome_ts: int):
"""Convertir un horodatage Chrome en datetime."""
if chrome_ts == 0:
return None
try:
return CHROME_EPOCH + timedelta(microseconds=chrome_ts)
except (OverflowError, OSError):
return None
def analyze_chrome_history(profile_path: str, output_dir: str) -> dict:
"""Analyser la base de données Chrome History pour des preuves médico-légales."""
history_db = os.path.join(profile_path, "History")
if not os.path.exists(history_db):
return {"error": "Base de données History introuvable"}
os.makedirs(output_dir, exist_ok=True)
conn = sqlite3.connect(f"file:{history_db}?mode=ro", uri=True)
cursor = conn.cursor()
cursor.execute("""
SELECT u.url, u.title, v.visit_time, u.visit_count,
v.transition & 0xFF as transition_type
FROM visits v JOIN urls u ON v.url = u.id
ORDER BY v.visit_time DESC LIMIT 5000
""")
visits = [{
"url": r[0], "title": r[1],
"visit_time": str(chrome_time_to_datetime(r[2])),
"total_visits": r[3], "transition": r[4]
} for r in cursor.fetchall()]
cursor.execute("""
SELECT target_path, tab_url, start_time, end_time,
received_bytes, total_bytes, mime_type, state
FROM downloads ORDER BY start_time DESC LIMIT 1000
""")
downloads = [{
"path": r[0], "source_url": r[1],
"start_time": str(chrome_time_to_datetime(r[2])),
"end_time": str(chrome_time_to_datetime(r[3])),
"received_bytes": r[4], "total_bytes": r[5],
"mime_type": r[6], "state": r[7]
} for r in cursor.fetchall()]
cursor.execute("""
SELECT k.term, u.url, k.url_id
FROM keyword_search_terms k JOIN urls u ON k.url_id = u.id
ORDER BY u.last_visit_time DESC LIMIT 1000
""")
searches = [{"term": r[0], "url": r[1]} for r in cursor.fetchall()]
conn.close()
report = {
"analysis_timestamp": datetime.now().isoformat(),
"profile_path": profile_path,
"total_visits": len(visits),
"total_downloads": len(downloads),
"total_searches": len(searches),
"visits": visits,
"downloads": downloads,
"searches": searches
}
report_path = os.path.join(output_dir, "browser_forensics.json")
with open(report_path, "w") as f:
json.dump(report, f, indent=2)
return report
def main():
if len(sys.argv) < 3:
print("Usage: python process.py <chrome_profile_path> <output_dir>")
sys.exit(1)
analyze_chrome_history(sys.argv[1], sys.argv[2])
if __name__ == "__main__":
main()
Références
Exemple de sortie
$ python hindsight.py -i /evidence/chrome-profile -o /analysis/hindsight_output
Hindsight v2024.01 - Analyse médico-légale de navigateur Chrome/Chromium
================================================================
Profil : /evidence/chrome-profile (Chrome 120.0.6099.130)
OS : Windows 10
[+] Analyse de la base de données History...
Enregistrements d'URL : 12,456
Enregistrements de téléchargements : 234
Termes de recherche : 567
[+] Analyse de la base de données Cookies...
Enregistrements de cookies : 8,923
Cookies chiffrés : 6,712
[+] Analyse des données Web (Saisie automatique)...
Entrées de saisie automatique : 1,234
Entrées de carte de crédit : 2 (chiffrées)
[+] Analyse des données de connexion...
Identifiants enregistrés : 45 (chiffrés)
[+] Analyse des favoris...
Entrées de favoris : 189
--- Historique de navigation (10 dernières entrées) ---
Horodatage (UTC) | URL | Titre | Nombre de visites
2024-01-15 14:32:05.123 | https://mail.corporate.com/inbox | Courrier professionnel | 45
2024-01-15 14:33:12.456 | https://drive.google.com/file/d/1aBcDe... | Rapport_financier_Q4.xlsx | 1
2024-01-15 14:35:44.789 | https://mega.nz/folder/xYz123 | MEGA - Cloud sécurisé | 3
2024-01-15 14:36:01.234 | https://mega.nz/folder/xYz123#upload | MEGA - Téléversement | 8
2024-01-15 14:42:15.567 | https://pastebin.com/raw/kL9mN2pQ | Pastebin (brut) | 1
2024-01-15 15:01:33.890 | https://192.168.1.50:8443/admin | Panneau d'administration | 12
2024-01-15 15:15:22.111 | https://transfer.sh/upload | transfer.sh | 2
2024-01-15 15:30:45.222 | https://vpn-gateway.corporate.com | Connexion VPN | 5
2024-01-15 16:00:00.333 | https://whatismyipaddress.com | Quelle est mon IP | 1
2024-01-15 16:05:12.444 | https://protonmail.com/inbox | ProtonMail | 3
--- Téléchargements (suspects) ---
Horodatage (UTC) | Nom du fichier | Source URL | Taille
2024-01-15 14:33:15.000 | Q4_Financial_Report.xlsm | https://phish-domain.com/docs/report | 245 Ko
2024-01-15 14:34:02.000 | update_client.exe | https://cdn.evil-updates.com/client.exe | 1.2 Mo
--- Cookies (jetons de session) ---
Domaine | Nom | Expiration | Sécurisé | HttpOnly
.corporate.com | SESSION_ID | 2024-01-16 14:32 | Oui | Oui
.mega.nz | session | Session | Oui | Oui
.protonmail.com | AUTH-TOKEN | 2024-02-15 00:00 | Oui | Oui
Rapport enregistré dans : /analysis/hindsight_output/Hindsight_Report.xlsx