Navigateurs web¶
Que sont les bases de données des navigateurs ?¶
Les navigateurs conservent leur historique, leurs téléchargements, leurs cookies et leurs entrées de formulaires dans des bases de données SQLite, dans le profil de chaque utilisateur. Les navigateurs basés sur Chromium (Chrome, Edge, Brave, Opera, Vivaldi) et ceux basés sur Firefox utilisent chacun leurs propres fichiers et tables, mais enregistrent les mêmes types d'activité :
- Historique : les pages visitées, chaque visite avec son heure, la manière dont le navigateur est arrivé sur la page (saisie, lien, redirection, favori) et, dans Chromium, la durée pendant laquelle la page était au premier plan.
- Téléchargements : l'URL d'où provient un fichier (et les redirections en chemin), l'emplacement où il a été enregistré, sa taille, le début et la fin du téléchargement, et si celui-ci s'est terminé.
- Cookies : les sites qui les ont déposés, quand ils ont été déposés et envoyés pour la dernière fois, et quand ils expirent.
- Historique des formulaires : les valeurs saisies dans les formulaires web et les champs de recherche, combien de fois, la première et la dernière fois.
L'activité du navigateur est souvent la trace la plus directe de ce qu'a fait un utilisateur : la page d'hameçonnage qu'il a suivie, l'outil qu'il a téléchargé, le webmail qu'il a utilisé, les termes de recherche qu'il a saisis.
Meilleure conclusion : le profil du navigateur a consigné une visite de l'URL à l'heure indiquée, ou a enregistré le téléchargement sous le chemin indiqué ; la base de données ne dit pas qui était au clavier.
Emplacement et collecte¶
%LOCALAPPDATA%\Google\Chrome\User Data\<Profile>\History
%LOCALAPPDATA%\Google\Chrome\User Data\<Profile>\Network\Cookies
%LOCALAPPDATA%\Google\Chrome\User Data\<Profile>\Web Data
%LOCALAPPDATA%\Microsoft\Edge\User Data\<Profile>\...
%LOCALAPPDATA%\BraveSoftware\Brave-Browser\User Data\<Profile>\...
%APPDATA%\Opera Software\Opera Stable\...
%APPDATA%\Mozilla\Firefox\Profiles\<profile>\places.sqlite
%APPDATA%\Mozilla\Firefox\Profiles\<profile>\cookies.sqlite
%APPDATA%\Mozilla\Firefox\Profiles\<profile>\formhistory.sqlite
<Profile> vaut Default, Profile 1, Profile 2, etc. Chromium a déplacé Cookies dans Network à la
version 96 ; les versions antérieures le conservent à côté de History. Jusqu'à la version 25, Firefox conservait ses
téléchargements dans downloads.sqlite ; les versions ultérieures les conservent dans places.sqlite.
Collectez tous les fichiers du profil, et chaque base de données avec les fichiers voisins qui partagent son nom :
places.sqlite-wal, cookies.sqlite-wal, formhistory.sqlite-wal, History-journal.
Journaux à écriture anticipée (WAL)
Firefox utilise ses bases de données en mode journal à écriture anticipée (WAL) : les modifications les plus
récentes ne se trouvent que dans le fichier -wal jusqu'à ce que le navigateur les recopie dans la base de données
(un point de contrôle, ou checkpoint). Juntei lit chaque base de données avec son fichier -wal, comme le ferait le
navigateur. Sans lui, des visites, des cookies et des entrées de formulaires récents manquent, et les entrées
supprimées dans le journal apparaissent encore comme actives.
Entrées supprimées¶
Lorsqu'un navigateur supprime l'historique, les lignes quittent les tables, mais leurs enregistrements peuvent subsister
dans l'espace libre de la base de données, dans sa liste de pages libres (freelist) ou dans des versions plus anciennes
de ses pages : dans le fichier -wal, ou dans le fichier de base de données lorsqu'un -wal a remplacé ces pages.
Juntei y récupère les visites, pages, téléchargements et entrées de formulaires supprimés, sous forme de lignes dont le
Status vaut Deleted :
Confidenceindique le degré de certitude de la correspondance entre l'enregistrement et sa table :Highpour un enregistrement complet dont chaque valeur a le type de sa colonne,MediumouLowpour des enregistrements endommagés ou des enregistrements compatibles avec plusieurs tables.RecoveredFromindique où se trouvait l'enregistrement : la zone de la page (une cellule, un freeblock, de l'espace non alloué, une page libre), quelle page et quelle version de celle-ci, ainsi que le décalage de l'enregistrement dans la page. Les trames WAL sont numérotées à partir de 0.LostColumnsliste les colonnes qu'un enregistrement endommagé ne contient plus : leurs champs sont vides.
Les navigateurs suppriment avec l'option secure_delete de SQLite : l'espace libéré dans la base de données est mis à
zéro. Ce qui peut être récupéré se trouve alors surtout dans des versions plus anciennes des pages : celles que le
fichier -wal contient encore, et les copies que le fichier de base de données garde des pages qu'un -wal a
remplacées, jusqu'au prochain point de contrôle. Copiez le fichier -wal avec sa base de données, et faites-le avant
que le navigateur ne soit relancé.
Précautions d'analyse¶
- Les heures sont en UTC. Chromium et Firefox les enregistrent à la microseconde près ; l'historique des formulaires de Chromium, à la seconde près.
- Une visite ne signifie pas que l'utilisateur a saisi quelque chose ou cliqué : les redirections, les cadres (frames)
et les pages ouvertes par d'autres programmes sont aussi des visites. Lisez
Transition,TypedetHidden. - Chromium chiffre les valeurs des cookies :
Valueest vide pour celles-ci. Juntei ne les déchiffre pas. - Une ligne
Removedde l'historique des formulaires provient de la tablemoz_deleted_formhistoryde Firefox, que Firefox pour Android remplit pour Sync. Firefox pour ordinateur la laisse normalement vide. - Une entrée supprimée de confiance
Lowpeut être un fragment d'un autre enregistrement : confrontez-la aux lignes actives et aux autres preuves. - L'absence de ligne supprimée ne signifie pas que rien n'a été supprimé : un espace mis à zéro et un point de contrôle ne laissent rien à récupérer. Les cookies supprimés ne sont pas encore récupérés.
- Le contenu détermine la famille du navigateur. Un chemin de profil compatible précise
Browser(Chrome, Firefox, etc.) ; un chemin contradictoire ne remplace pas la famille. Sinon, le libellé estChromium-based,Firefox-basedouSafari(Unknownsi indéterminé).UseretProfileproviennent du chemin et peuvent être perdus lors de la copie. - Les journaux de rollback (
-journal) ne sont pas lus. LeWebCacheV01.datd'Internet Explorer et de l'ancien Edge est lu parparse-ese webcache: voir Internet Explorer et l'ancien Edge.
Analyser avec Juntei¶
Usage: juntei parse-sqlite browser <INPUT> [OPTIONS]
Input:
-d, --directory <DIR> Recursively find History, Cookies, Web Data, places.sqlite, ...
-f, --file <FILE> Parse one browser database (and its -wal file)
Output:
-o, --output <PATH> Directory of CSV tables, or JSON/JSONL file
-t, --output-type <TYPE> csv, json, or jsonl
juntei parse-sqlite browser -d Users -o browser-csv
juntei parse-sqlite browser -d Users -t jsonl \
| jq 'select(.Table == "Downloads") | {StartTime, URL, TargetPath, Browser, User}'
-d recherche les fichiers par leur nom et identifie chacun par ses tables : un fichier History appartenant à un autre
programme est ignoré. -f lit une base de données quel que soit son nom.
Tables de sortie¶
Le format CSV crée quatre fichiers, chacun ne contenant que l'en-tête lorsqu'il n'a aucune ligne. Les lignes JSON et
JSONL comportent Table (History, Downloads, Cookies ou FormHistory) après SourceFile.
| Fichier CSV | Contenu |
|---|---|
Browser-History.csv |
Visites, actives et supprimées ; pages supprimées dont aucune page active n'a l'URL. |
Browser-Downloads.csv |
Téléchargements, actifs et supprimés. |
Browser-Cookies.csv |
Cookies. |
Browser-FormHistory.csv |
Entrées de formulaires, actives et supprimées ; enregistrements de suppression de Firefox. |
Champs¶
Chaque table commence par ces champs :
| Champ | Interprétation |
|---|---|
SourceFile |
La base de données dans laquelle la ligne a été lue. |
User |
L'utilisateur Windows dans le profil duquel se trouve le chemin (le dossier qui suit Users). |
Browser |
Famille déterminée par le contenu, précisée par un chemin de profil compatible. |
Profile |
Le profil du navigateur : le dossier de la base de données. |
Status |
Live, Deleted (récupéré) ou Removed (un enregistrement de suppression de Firefox). |
Historique¶
| Champ | Interprétation |
|---|---|
RecordType |
Visit, ou Page pour une page supprimée dont les visites ont pu disparaître elles aussi. |
VisitTime |
Le début de la visite (UTC). |
URL, Title |
La page et son titre, tels que vus en dernier. |
Transition |
La manière dont le navigateur est arrivé sur la page. Chromium : le type principal, puis ses qualificatifs (LINK, TYPED, AUTO_BOOKMARK, FORM_SUBMIT, RELOAD, … avec CHAIN_START, SERVER_REDIRECT, FROM_ADDRESS_BAR, …) ; Firefox : LINK, TYPED, BOOKMARK, EMBED, REDIRECT_PERMANENT, REDIRECT_TEMPORARY, DOWNLOAD, FRAMED_LINK, RELOAD. |
VisitDuration |
Le nombre de secondes pendant lesquelles la page était au premier plan (Chromium ; 0 lorsque la durée n'a pas été mesurée). |
VisitCount |
Le nombre total de visites de la page. |
Typed, TypedCount |
Si l'URL a déjà été saisie, et combien de fois (Chromium). |
Hidden |
Masquée dans la liste de l'historique : sous-cadres, sources de redirection, erreurs. |
Frecency |
Le classement de la page par Firefox pour les suggestions de la barre d'adresse. |
VisitID, FromVisitID |
L'identifiant de ligne de la visite, et celui de la visite dont elle provient (la page référente, la source de la redirection). L'identifiant de la visite est vide lorsqu'un enregistrement récupéré l'a perdu. |
LastVisitTime |
La dernière visite d'une page supprimée (UTC). |
PageSource |
L'origine de l'URL et du titre d'une visite supprimée : Live (une page active), Recovered (une page supprimée) ou NotFound. |
Confidence, RecoveredFrom, LostColumns |
La manière dont une entrée supprimée a été récupérée ; voir Entrées supprimées. |
Téléchargements¶
| Champ | Interprétation |
|---|---|
StartTime, EndTime |
Le début et la fin du téléchargement (UTC). |
URL, RedirectChain |
L'origine du fichier, et chaque URL rencontrée en chemin (Chromium ; séparées par -> en CSV). |
TargetPath, CurrentPath |
L'emplacement où le fichier a été enregistré (un URI file:// dans Firefox), et celui où il a été écrit pendant le téléchargement. |
ReceivedBytes, TotalBytes |
Les octets reçus, et la taille du fichier. |
State |
Complete, InProgress, Cancelled, Interrupted, Paused, Blocked ou Dirty (bloqué comme logiciel malveillant). |
DangerType |
Le verdict de Chromium sur le fichier : 0 non dangereux, 1 type de fichier dangereux, 2 URL dangereuse, 3 contenu dangereux, 4 peut-être dangereux, 5 peu courant, 6 conservé par l'utilisateur, 7 hôte dangereux, 8 potentiellement indésirable, … |
InterruptReason |
La raison de l'arrêt d'un téléchargement interrompu (Chromium ; 0 si aucune). |
Referrer, TabURL |
La page référente, et la page de l'onglet qui a lancé le téléchargement. |
MimeType, Opened |
Le type du fichier tel que servi, et s'il a été ouvert depuis le navigateur (Chromium). |
FileDeletedByUser |
Si l'utilisateur a supprimé du disque le fichier téléchargé depuis la liste des téléchargements du navigateur (Firefox). |
DownloadID |
L'identifiant de ligne du téléchargement. Vide lorsqu'un enregistrement récupéré l'a perdu. |
Cookies¶
| Champ | Interprétation |
|---|---|
Created, LastAccessed, Expires |
Quand le cookie a été déposé et envoyé pour la dernière fois, et quand il expire (UTC ; Expires vide pour un cookie de session). |
Host, Name, Path |
Le site auquel le cookie est destiné, son nom et son chemin. |
Value |
La valeur telle qu'elle est stockée : vide lorsque Chromium l'a chiffrée. |
Secure, HttpOnly, Persistent |
Envoyé uniquement via HTTPS, masqué aux scripts, conservé d'une session à l'autre (Chromium). |
GoogleAnalytics |
Les champs décodés d'un cookie Google Analytics (__utma, __utmb, __utmt, __utmz) : heures de visite, sessions, ainsi que la source de la campagne et les termes de recherche. |
RowID |
L'identifiant de ligne du cookie. |
Historique des formulaires¶
| Champ | Interprétation |
|---|---|
FirstUsed, LastUsed |
Quand la valeur a été saisie pour la première et pour la dernière fois (UTC). |
RemovedTime |
Le moment où l'entrée a été supprimée selon un enregistrement de suppression de Firefox (UTC). |
FieldName, Value |
Le champ du formulaire (email, q, la barre de recherche de Firefox : searchbar-history) et ce qui y a été saisi. |
Count |
Le nombre de fois où la valeur a été saisie. |
GUID |
L'identifiant de l'entrée chez Firefox, que nomment les enregistrements de suppression. |
Sources |
La provenance à partir de laquelle Firefox a enregistré l'entrée, dans les versions qui la conservent (séparées par une barre verticale en CSV). |
RowID |
Identifiant de ligne ; vide/null si perdu lors de la récupération. Un zéro réellement enregistré reste 0. |
Analyse automatique¶
auto-parse écrit les tables dans BrowserActivity sous les noms Browser-History.csv, Browser-Downloads.csv,
Browser-Cookies.csv et Browser-FormHistory.csv (un seul fichier Browser.json ou Browser.jsonl avec -t json ou
-t jsonl), accompagnées de BrowserActivity/Browser-logs.txt. La chronologie combinée -j inclut chaque ligne, avec
Comp et l'identifiant d'Artifact browser. -Z convertit VisitTime, LastVisitTime, StartTime, EndTime,
Created, LastAccessed, Expires, FirstUsed, LastUsed et RemovedTime.