Synapse Consulting
Home SynapseRM / TPRM Services Pricing About BlogCareersLabsContact
EN · FR
Test access Book a demo

Forensic · SQLite · Historique navigateur · MITRE T1070

Ce qu'ils ont effacé : récupérer l'historique dans SQLite

Les navigateurs gardent leur historique dans une base SQLite, et une ligne supprimée est rarement perdue. Quand SQLite libère une cellule, il ne l'efface pas : les octets subsistent dans le fichier jusqu'à réutilisation. Lisez l'historique live, puis récupérez l'entrée que l'utilisateur a effacée sur NORTHSEA-DEV.

~45 minDurée estimée
sqlite3 · strings · xxdOutils
T1070 · T1204 · T1552MITRE ATT&CK
★★☆☆ IntermédiaireSQLiteRécupération

L'échantillon

FichierHistory (SQLite 3)
SHA-256eba54746bb0e640402bc449b8b70743e57c07640368bb26b8f31a3830642f27e
Formeurls / visits / downloads type Chrome
ContexteProfil de NORTHSEA-DEV (alex)

Le .zip contient la base, un README disclaimer et le logo Synapse. Tout est synthétique (.example / .invalid). Analyse en VM isolée.

1. Scénario

Les navigateurs stockent historique, téléchargements et cookies dans des fichiers SQLite. Quand un utilisateur efface une entrée, la ligne est déliée mais, sauf si secure_delete est actif ou qu'un VACUUM tourne, les octets bruts restent dans l'espace libre. C'est un cadeau pour l'analyste.

Vous recevez la base History du profil du suspect. Lisez le live, puis récupérez ce qui a été supprimé.

⚠️ Disclaimer : base 'History' type Chrome entièrement synthétique. Toutes les URLs, titres et dates sont fictifs (.example / .invalid). Aucune personne ni navigation réelle.

2. Objectifs

3. Analyse pas à pas

1

Ouvrir la base et lire le schéma

sqlite3

Travaillez sur une copie. Confirmez que c'est du SQLite, puis listez les tables. Chrome utilise urls, visits et downloads.

bash
file History
sqlite3 History '.tables'
sqlite3 History '.schema urls'
output
History: SQLite 3.x database
urls  visits  downloads
CREATE TABLE urls(id INTEGER PRIMARY KEY, url, title, visit_count,
  typed_count, last_visit_time, hidden);

💡 last_visit_time n'est pas une date normale : Chrome compte les microsecondes depuis le 1601-01-01 (epoch WebKit). Vous la convertissez à l'étape suivante.

2

Lire l'historique live

SQL + conversion de temps

Listez les URLs avec une date lisible en convertissant l'epoch WebKit, et regardez les téléchargements.

bash
sqlite3 History "SELECT datetime(last_visit_time/1000000-11644473600,'unixepoch') t,
  url, title FROM urls ORDER BY last_visit_time;"
sqlite3 History "SELECT target_path, tab_url FROM downloads;"
output
2026-06-16 08:38  https://stackoverflow.example/q/12345  reflective assembly load powershell
2026-06-16 08:39  https://duckduckgo.example/?q=how+to+clear+bash+history  how to clear bash history
...
C:\Users\alex\Downloads\orion-export.zip   https://file-share.example/u/8f2c1a9d

🔍 Le comportement raconte déjà quelque chose : recherches reflective assembly load powershell et how to clear bash history, plus un téléchargement d'orion-export.zip via un site de partage. Mais l'historique live s'arrête à 08:39, et l'incident (lab #07) a démarré à 08:41. Il manque quelque chose.

3

Récupérer l'enregistrement supprimé

strings · xxd

Les tables live et même sqlite3 .recover ratent les lignes libérées vers la free list. Carvez le fichier brut à la place.

bash
# .recover rate les lignes de la free list, on carve les octets
strings History | grep -Ei 'verify|captcha|invalid'
xxd History | grep -i verify
output
http://verify-cdn.example.invalid/captcha?ray=8f2c1a9d
Verify you are human - Cloud CDN

🔴 Récupéré dans l'espace libre : une visite à verify-cdn.example.invalid/captcha titrée Verify you are human. C'est la page leurre ClickFix, et l'utilisateur l'a supprimée pour couvrir ses traces (MITRE T1070).

4

Timeline et conclusion

synthèse

La cellule supprimée porte encore son visit_time. Décodé, il tombe à 2026-06-16 08:40, une minute avant le PowerShell collé du lab #07.

bash
# le visit_time récupéré (WebKit) décode en :
#   2026-06-16 08:40:00 UTC
# exécution RunMRU du lab #07 : 2026-06-16 08:41 UTC
output
08:39  recherche: how to clear bash history
08:40  visite:    verify-cdn.example.invalid/captcha   <- SUPPRIME, recupere
08:41  exec:      powershell -enc ...  (lab #07)

✅ L'entrée récupérée est le chaînon manquant : l'utilisateur a atteint la fausse CAPTCHA, exécuté la commande ClickFix, puis effacé cette ligne d'historique. La base du navigateur l'a conservée quand même.

4. Notes et détection

5. Synthèse IOC et ATT&CK

TypeValeurATT&CK
Artefact suppriméverify-cdn.example.invalid/captcha (leurre ClickFix)T1070
Recherche d'intentionreflective assembly load powershellT1204
Recherche anti-forensichow to clear bash historyT1070
Téléchargementorion-export.zip via file-share.exampleT1567
Source de récupérationespace libre SQLite (pas de VACUUM / secure_delete)T1005

6. Références

MITRE T1070, Indicator Removal

Effacement d'historique et d'artefacts pour cacher l'activité.

Le format de fichier SQLite

Pages, cellules et free list, la base de la récupération d'enregistrements supprimés.

Forensic SQLite, Belkasoft

Récupérer les enregistrements supprimés depuis WAL, journal et pages libres.

undark, récupération SQLite

Un outil qui carve les lignes supprimées de la free list.

Environnement entièrement fictif, à usage éducatif uniquement. Toutes les URLs et titres sont synthétiques.

Synapse Consulting

A Belgium-based provider of cybersecurity solutions, and the team behind SynapseRM / TPRM.

PLATFORM
SynapseRM / TPRM Pricing Test accessPresentation (PDF)
SERVICES
Governance Operational Training
COMPANY
About Contact Blog Labs Careers Privacy & cookies
Brussels, Belgium