Navegadores web¶
Qué son las bases de datos de los navegadores¶
Los navegadores guardan su historial, sus descargas, sus cookies y sus entradas de formularios en bases de datos SQLite dentro del perfil de cada usuario. Los navegadores basados en Chromium (Chrome, Edge, Brave, Opera, Vivaldi) y los basados en Firefox usan cada uno sus propios archivos y tablas, pero registran los mismos tipos de actividad:
- Historial: las páginas visitadas, cada visita con su hora, cómo llegó el navegador a la página (escribiendo la dirección, un enlace, una redirección, un marcador) y, en Chromium, cuánto tiempo estuvo la página en primer plano.
- Descargas: la URL de la que procede un archivo (y las redirecciones por el camino), dónde se guardó, su tamaño, cuándo empezó y terminó la descarga y si se completó.
- Cookies: los sitios que las establecieron, cuándo se establecieron, cuándo se enviaron por última vez y cuándo caducan.
- Historial de formularios: los valores escritos en formularios web y cuadros de búsqueda, cuántas veces, y la primera y la última vez.
La actividad del navegador suele ser el registro más directo de lo que hizo un usuario: la página de phishing a la que accedió, la herramienta que descargó, el correo web que usó, los términos de búsqueda que escribió.
Mejor conclusión: el perfil del navegador registró una visita a la URL a la hora registrada, o guardó la descarga en la ruta registrada; la base de datos no indica quién estaba frente al teclado.
Ubicación y recopilación¶
%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> es Default, Profile 1, Profile 2, etc. Chromium trasladó Cookies a Network en la versión 96; las
versiones anteriores lo guardan junto a History. Hasta la versión 25, Firefox guardaba sus descargas en
downloads.sqlite; las versiones posteriores las guardan en places.sqlite.
Recopile todos los archivos del perfil, y cada base de datos con los archivos que están junto a ella y comparten su
nombre: places.sqlite-wal, cookies.sqlite-wal, formhistory.sqlite-wal, History-journal.
Registros de escritura anticipada (WAL)
Firefox mantiene sus bases de datos en modo de registro de escritura anticipada (WAL): los cambios más recientes
solo están en el archivo -wal hasta que el navegador los copia a la base de datos (un punto de control o
checkpoint). Juntei lee cada base de datos con su archivo -wal, como lo haría el navegador. Sin él, faltan visitas,
cookies y entradas de formularios recientes, y las entradas eliminadas en el WAL siguen leyéndose como activas.
Entradas eliminadas¶
Cuando un navegador elimina historial, las filas desaparecen de las tablas, pero sus registros pueden permanecer en el
espacio libre de la base de datos, en su lista de páginas libres (freelist) o en versiones anteriores de sus páginas: en
el archivo -wal, o en el propio archivo de la base de datos cuando un -wal ha reemplazado esas páginas. Juntei
recupera de ellos visitas, páginas, descargas y entradas de formularios eliminadas, como filas cuyo Status es
Deleted:
Confidenceindica con qué seguridad se asocia el registro a su tabla:Highpara un registro completo en el que cada valor tiene el tipo de su columna;MediumoLowpara registros dañados o registros que encajan en varias tablas.RecoveredFromindica dónde estaba el registro: la zona de la página (una celda, un freeblock, espacio no asignado, una página libre), qué página y qué versión de ella, y el desplazamiento del registro en la página. Los frames del WAL se numeran desde 0.LostColumnsenumera las columnas que un registro dañado ya no contiene: sus campos quedan vacíos.
Los navegadores eliminan con secure_delete de SQLite: el espacio liberado en la base de datos se rellena con ceros. Lo
que se puede recuperar está entonces, sobre todo, en versiones anteriores de las páginas: las que todavía contiene el
archivo -wal y las copias que el propio archivo de la base de datos conserva de las páginas que un -wal reemplazó,
hasta el siguiente punto de control. Copie el archivo -wal junto con su base de datos, y hágalo antes de que el
navegador vuelva a ejecutarse.
Precauciones para el analista¶
- Las horas están en UTC. Chromium y Firefox las registran con precisión de microsegundos; el historial de formularios de Chromium, con precisión de segundos.
- Una visita no significa que el usuario escribiera o hiciera clic: las redirecciones, los marcos (frames) y las páginas
abiertas por otros programas también son visitas. Lea
Transition,TypedyHidden. - Chromium cifra los valores de las cookies:
Valueestá vacío para ellas. Juntei no los descifra. - Una fila
Removeddel historial de formularios procede de la tablamoz_deleted_formhistoryde Firefox, que Firefox para Android rellena para Sync. Firefox de escritorio normalmente la deja vacía. - Una entrada eliminada con confianza
Lowpuede ser un fragmento de otro registro: contrástela con las filas activas y con el resto de la evidencia. - Que no haya filas eliminadas no significa que no se eliminara nada: el espacio rellenado con ceros y un punto de control no dejan nada que recuperar. Las cookies eliminadas todavía no se recuperan.
- El contenido determina la familia del navegador. Una ruta de perfil compatible precisa
Browsercomo Chrome o Firefox; una ruta contradictoria no cambia la familia. En otro caso se usaChromium-based,Firefox-basedoSafari(Unknownsi no se puede determinar).UseryProfileproceden de la ruta y pueden perderse al copiar archivos. - No se leen los diarios de reversión (
-journal). ElWebCacheV01.datde Internet Explorer y del Edge heredado lo leeparse-ese webcache: consulte Internet Explorer y Edge heredado.
Análisis con 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 busca los archivos por su nombre e identifica cada uno por sus tablas: se omite un archivo History de otro
programa. -f lee una base de datos sea cual sea su nombre.
Tablas de salida¶
CSV crea cuatro archivos, cada uno solo con su encabezado cuando no tiene filas. Las filas JSON y JSONL incluyen Table
(History, Downloads, Cookies o FormHistory) después de SourceFile.
| Archivo CSV | Contenido |
|---|---|
Browser-History.csv |
Visitas, activas y eliminadas; páginas eliminadas cuya URL no tiene ninguna página activa. |
Browser-Downloads.csv |
Descargas, activas y eliminadas. |
Browser-Cookies.csv |
Cookies. |
Browser-FormHistory.csv |
Entradas de formularios, activas y eliminadas; registros de eliminación de Firefox. |
Campos¶
Todas las tablas empiezan con estos campos:
| Campo | Interpretación |
|---|---|
SourceFile |
La base de datos de la que se leyó la fila. |
User |
El usuario de Windows en cuyo perfil está la ruta (la carpeta que sigue a Users). |
Browser |
Familia según el contenido, precisada por una ruta de perfil compatible. |
Profile |
El perfil del navegador: la carpeta de la base de datos. |
Status |
Live, Deleted (recuperada) o Removed (un registro de eliminación de Firefox). |
Historial¶
| Campo | Interpretación |
|---|---|
RecordType |
Visit, o Page para una página eliminada cuyas visitas también pueden haber desaparecido. |
VisitTime |
Cuándo empezó la visita (UTC). |
URL, Title |
La página y su título, tal como se vieron por última vez. |
Transition |
Cómo llegó el navegador a la página. Chromium: el tipo principal y después sus calificadores (LINK, TYPED, AUTO_BOOKMARK, FORM_SUBMIT, RELOAD, … con CHAIN_START, SERVER_REDIRECT, FROM_ADDRESS_BAR, …); Firefox: LINK, TYPED, BOOKMARK, EMBED, REDIRECT_PERMANENT, REDIRECT_TEMPORARY, DOWNLOAD, FRAMED_LINK, RELOAD. |
VisitDuration |
Segundos que la página estuvo en primer plano (Chromium; 0 cuando no se midió). |
VisitCount |
Visitas totales a la página. |
Typed, TypedCount |
Si la URL se escribió alguna vez, y cuántas veces (Chromium). |
Hidden |
Oculta en la lista del historial: submarcos, orígenes de redirecciones, errores. |
Frecency |
La clasificación de la página por Firefox para las sugerencias de la barra de direcciones. |
VisitID, FromVisitID |
El id de fila de la visita y el de la visita de la que procede (la página de referencia, el origen de la redirección). El id de la visita queda vacío cuando un registro recuperado lo perdió. |
LastVisitTime |
La última visita de una página eliminada (UTC). |
PageSource |
De dónde proceden la URL y el título de una visita eliminada: Live (una página activa), Recovered (una página eliminada) o NotFound. |
Confidence, RecoveredFrom, LostColumns |
Cómo se recuperó una entrada eliminada; consulte Entradas eliminadas. |
Descargas¶
| Campo | Interpretación |
|---|---|
StartTime, EndTime |
Cuándo empezó y terminó la descarga (UTC). |
URL, RedirectChain |
De dónde procede el archivo, y cada URL por el camino (Chromium; separadas por -> en CSV). |
TargetPath, CurrentPath |
Dónde se guardó el archivo (un URI file:// en Firefox), y dónde se escribió durante la descarga. |
ReceivedBytes, TotalBytes |
Bytes recibidos, y el tamaño del archivo. |
State |
Complete, InProgress, Cancelled, Interrupted, Paused, Blocked o Dirty (bloqueada como malware). |
DangerType |
El veredicto de Chromium sobre el archivo: 0 no peligroso, 1 tipo de archivo peligroso, 2 URL peligrosa, 3 contenido peligroso, 4 posiblemente peligroso, 5 poco común, 6 conservado por el usuario, 7 host peligroso, 8 potencialmente no deseado, … |
InterruptReason |
Por qué se detuvo una descarga interrumpida (Chromium; 0 si no hay motivo). |
Referrer, TabURL |
La página de referencia, y la página de la pestaña que inició la descarga. |
MimeType, Opened |
El tipo del archivo tal como lo sirvió el servidor, y si se abrió desde el navegador (Chromium). |
FileDeletedByUser |
Si el usuario eliminó del disco el archivo descargado desde la lista de descargas del navegador (Firefox). |
DownloadID |
El id de fila de la descarga. Vacío cuando un registro recuperado lo perdió. |
Cookies¶
| Campo | Interpretación |
|---|---|
Created, LastAccessed, Expires |
Cuándo se estableció la cookie, cuándo se envió por última vez y cuándo caduca (UTC; Expires vacío para una cookie de sesión). |
Host, Name, Path |
El sitio para el que es la cookie, su nombre y su ruta. |
Value |
El valor tal como está almacenado: vacío cuando Chromium lo cifró. |
Secure, HttpOnly, Persistent |
Enviada solo por HTTPS, oculta para los scripts, conservada entre sesiones (Chromium). |
GoogleAnalytics |
Los campos decodificados de una cookie de Google Analytics (__utma, __utmb, __utmt, __utmz): horas de visita, sesiones, y el origen de la campaña y los términos de búsqueda. |
RowID |
El id de fila de la cookie. |
Historial de formularios¶
| Campo | Interpretación |
|---|---|
FirstUsed, LastUsed |
Cuándo se introdujo el valor por primera y por última vez (UTC). |
RemovedTime |
Cuándo se eliminó la entrada según un registro de eliminación de Firefox (UTC). |
FieldName, Value |
El campo del formulario (email, q, la barra de búsqueda de Firefox: searchbar-history) y lo que se escribió. |
Count |
Cuántas veces se introdujo el valor. |
GUID |
El identificador de la entrada en Firefox, que nombran los registros de eliminación. |
Sources |
Desde dónde guardó Firefox la entrada, en las versiones que lo conservan (separados por una barra vertical en CSV). |
RowID |
ID de fila; vacío/null si se perdió durante la recuperación. Un cero realmente registrado permanece como 0. |
Análisis automático¶
auto-parse escribe las tablas en BrowserActivity como Browser-History.csv, Browser-Downloads.csv,
Browser-Cookies.csv y Browser-FormHistory.csv (un único archivo Browser.json o Browser.jsonl con -t json o
-t jsonl), junto con BrowserActivity/Browser-logs.txt. La línea de tiempo combinada -j incluye todas las filas, con
Comp y el identificador de Artifact browser. -Z convierte VisitTime, LastVisitTime, StartTime, EndTime,
Created, LastAccessed, Expires, FirstUsed, LastUsed y RemovedTime.