Browser Forensics: Analisis Forense de Chrome y Firefox
Tecnicas de analisis forense de navegadores web: historial, cookies, cache, descargas y credenciales almacenadas en Chrome y Firefox. Extraccion de bases de datos SQLite y reconstruccion de actividad del usuario.
Por que importa la forense de navegadores
El navegador web es la aplicacion mas usada en cualquier estacion de trabajo. Los usuarios acceden a correo, documentos, aplicaciones corporativas, banca y redes sociales a traves del navegador. Los atacantes lo saben, y muchos vectores de ataque pasan por el navegador: phishing, drive-by downloads, extensiones maliciosas, robo de credenciales almacenadas.
Para el analista DFIR, los artefactos del navegador responden preguntas criticas: que sitios visito el usuario antes del incidente, que ficheros descargo, que credenciales tenia almacenadas (y por tanto potencialmente comprometidas), y que extensiones estaban instaladas.
Chrome y Firefox dominan el mercado y son los que encontraras en la mayoria de investigaciones. Ambos almacenan sus datos en bases de datos SQLite, lo que facilita el analisis con herramientas estandar.
Ubicacion de los perfiles de navegador
Chrome
Chrome organiza los datos por perfiles. El perfil por defecto se llama Default, y los adicionales Profile 1, Profile 2, etc.
En Windows: C:\Users(usuario)\AppData\Local\Google\Chrome\User Data\Default\
En macOS: ~/Library/Application Support/Google/Chrome/Default/
En Linux: ~/.config/google-chrome/Default/
Firefox
Firefox usa nombres aleatorios para los perfiles. El fichero profiles.ini indica que perfiles existen y cual es el activo.
En Windows: C:\Users(usuario)\AppData\Roaming\Mozilla\Firefox\Profiles{random}.default-release\
En macOS: ~/Library/Application Support/Firefox/Profiles/.default-release/
En Linux: ~/.mozilla/firefox/.default-release/
Microsoft Edge (Chromium)
Edge basado en Chromium usa la misma estructura que Chrome:
En Windows: C:\Users(usuario)\AppData\Local\Microsoft\Edge\User Data\Default\
Historial de navegacion
Chrome: fichero History
El historial de Chrome se almacena en una base de datos SQLite llamada History. Contiene varias tablas, siendo las mas relevantes urls y visits.
-- Abrir la base de datos (copiarla primero, no trabajar sobre la original)
-- sqlite3 History
-- Listar URLs visitadas con timestamps
SELECT
urls.url,
urls.title,
urls.visit_count,
datetime(visits.visit_time / 1000000 - 11644473600, 'unixepoch') as visit_date,
visits.from_visit,
visits.transition
FROM urls
JOIN visits ON urls.id = visits.url
ORDER BY visits.visit_time DESC
LIMIT 100;
-- Buscar URLs especificas (por ejemplo, phishing o descargas sospechosas)
SELECT
url,
title,
visit_count,
datetime(last_visit_time / 1000000 - 11644473600, 'unixepoch') as last_visit
FROM urls
WHERE url LIKE '%suspicious-domain%'
ORDER BY last_visit_time DESC;
El campo transition en la tabla visits indica como el usuario llego a esa URL: typed (escrita manualmente), link (click en un enlace), auto_bookmark, form_submit, reload, etc. Esto es valioso para reconstruir la cadena de navegacion que llevo al compromiso.
El timestamp de Chrome usa el formato Webkit: microsegundos desde el 1 de enero de 1601 UTC. La formula de conversion es: timestamp / 1000000 - 11644473600 para obtener Unix epoch.
Firefox: fichero places.sqlite
Firefox almacena el historial en places.sqlite, con las tablas moz_places (URLs) y moz_historyvisits (visitas).
-- Listar historial de Firefox
SELECT
moz_places.url,
moz_places.title,
moz_places.visit_count,
datetime(moz_historyvisits.visit_date / 1000000, 'unixepoch') as visit_date,
moz_historyvisits.visit_type
FROM moz_places
JOIN moz_historyvisits ON moz_places.id = moz_historyvisits.place_id
ORDER BY moz_historyvisits.visit_date DESC
LIMIT 100;
Firefox usa timestamps en microsegundos desde Unix epoch (1 de enero de 1970), lo que simplifica la conversion.
Cookies
Las cookies proporcionan informacion sobre sesiones activas, preferencias del usuario y tracking. Para DFIR, las cookies son relevantes para:
Identificar sesiones activas en servicios web. Si una cookie de sesion de un servicio critico (correo, cloud, banca) estaba activa en el momento del compromiso, ese servicio debe considerarse potencialmente comprometido.
Establecer la actividad temporal. Las cookies tienen timestamps de creacion, ultimo acceso y expiracion.
Detectar tracking malicioso. Cookies de dominios asociados a malware o adware indican actividad sospechosa.
Chrome: fichero Cookies
-- Listar cookies con sus dominios y timestamps
SELECT
host_key,
name,
path,
datetime(creation_utc / 1000000 - 11644473600, 'unixepoch') as created,
datetime(last_access_utc / 1000000 - 11644473600, 'unixepoch') as last_access,
datetime(expires_utc / 1000000 - 11644473600, 'unixepoch') as expires,
is_secure,
is_httponly
FROM cookies
ORDER BY last_access_utc DESC;
Los valores de las cookies en Chrome estan cifrados con DPAPI (Windows), Keychain (macOS) o kwallet/gnome-keyring (Linux). Para descifrarlos se necesita acceso al perfil del usuario o a las claves del sistema.
Firefox: fichero cookies.sqlite
-- Listar cookies de Firefox
SELECT
host,
name,
path,
datetime(creationTime / 1000000, 'unixepoch') as created,
datetime(lastAccessed / 1000000, 'unixepoch') as last_access,
datetime(expiry, 'unixepoch') as expires,
isSecure,
isHttpOnly
FROM moz_cookies
ORDER BY lastAccessed DESC;
Cache del navegador
La cache almacena copias locales de recursos web (imagenes, scripts, CSS, documentos) para acelerar la carga de paginas. Para DFIR, la cache puede contener:
Copias de paginas web visitadas, incluyendo contenido que ya no esta disponible online.
Ficheros descargados que pasaron por el navegador (PDFs, documentos Office).
Imagenes que pueden ser relevantes para la investigacion (capturas de pantalla de datos exfiltrados, imagenes de phishing).
Chrome
La cache de Chrome usa un formato propietario (Simple Cache desde Chrome 85+). Se puede analizar con:
ChromeCacheView de NirSoft para explorar la cache graficamente.
Hindsight de Obsidian Security para un analisis completo del perfil Chrome.
La cache se encuentra en el subdirectorio Cache/ del perfil de Chrome.
Firefox
Firefox usa un formato de cache propio. MozillaCacheView de NirSoft permite explorarla. La cache se encuentra en cache2/ dentro del perfil de Firefox.
Descargas
Chrome: tabla downloads en History
-- Listar ficheros descargados
SELECT
current_path,
tab_url,
tab_referrer_url,
datetime(start_time / 1000000 - 11644473600, 'unixepoch') as download_start,
datetime(end_time / 1000000 - 11644473600, 'unixepoch') as download_end,
received_bytes,
total_bytes,
state,
danger_type,
interrupt_reason,
mime_type
FROM downloads
ORDER BY start_time DESC;
El campo danger_type indica si Chrome detecto algun riesgo en la descarga (0 = sin peligro, 1 = peligroso, 2 = URL peligrosa, etc.). El campo state indica si la descarga se completo (1) o fue cancelada/interrumpida.
La combinacion de tab_url (pagina desde la que se inicio la descarga), tab_referrer_url (pagina que refirio a esa pagina) y current_path (donde se guardo el fichero) permite reconstruir la cadena completa de descarga.
Firefox: tabla moz_annos y moz_downloads en places.sqlite
En versiones recientes de Firefox, las descargas se registran en la tabla moz_annos asociada a moz_places. La estructura varia entre versiones, pero la informacion basica (URL, ruta local, tamano, timestamp) esta disponible.
Credenciales almacenadas
Los navegadores ofrecen guardar contrasenas, y la mayoria de usuarios aceptan. En un incidente, las credenciales almacenadas representan el alcance potencial del compromiso: cada servicio con contrasena guardada debe considerarse en riesgo.
Chrome: fichero Login Data
-- Listar credenciales almacenadas (contrasenas cifradas)
SELECT
origin_url,
username_value,
datetime(date_created / 1000000 - 11644473600, 'unixepoch') as created,
datetime(date_last_used / 1000000 - 11644473600, 'unixepoch') as last_used,
times_used
FROM logins
ORDER BY date_last_used DESC;
Las contrasenas estan cifradas. En Windows, Chrome usa DPAPI vinculada al perfil del usuario. Herramientas como mimikatz o pypykatz pueden descifrarlas si tienes acceso al perfil del usuario comprometido. Esto es exactamente lo que hacen los infostealers como RedLine y Lumma.
Firefox: logins.json y key4.db
Firefox almacena las credenciales en logins.json (datos cifrados) y key4.db (clave de cifrado). Si el usuario no configuro una contrasena maestra, las credenciales se pueden descifrar con herramientas como firefox_decrypt.
Para el analisis forense, no siempre necesitas descifrar las contrasenas. Saber que servicios tenian credenciales almacenadas (URLs y nombres de usuario) ya define el alcance del compromiso.
Extensiones del navegador
Las extensiones maliciosas son un vector de ataque cada vez mas comun. Pueden robar credenciales, inyectar contenido en paginas web, redirigir trafico y exfiltrar datos.
Chrome
Las extensiones se instalan en el directorio Extensions/ del perfil de Chrome. Cada extension tiene un directorio con su ID (un hash de 32 caracteres) y dentro de el, un directorio con la version.
El fichero manifest.json de cada extension declara los permisos solicitados. Extensiones con permisos excesivos (acceso a todas las URLs, lectura de cookies, modificacion de peticiones HTTP) son sospechosas.
El fichero Preferences en la raiz del perfil contiene la lista de extensiones instaladas con sus metadatos.
# Listar extensiones instaladas (Windows)
# Buscar en C:\Users\{user}\AppData\Local\Google\Chrome\User Data\Default\Extensions\
# Cada subdirectorio es una extension. El manifest.json contiene:
# - name: nombre de la extension
# - permissions: permisos solicitados
# - content_scripts: scripts inyectados en paginas web
Firefox
Las extensiones de Firefox (WebExtensions) se almacenan en el directorio extensions/ del perfil. El fichero extensions.json contiene la lista completa de extensiones con sus metadatos.
Herramientas especializadas
Aunque sqlite3 y las consultas SQL directas son efectivas, existen herramientas disenadas especificamente para browser forensics:
Hindsight (Obsidian Security): herramienta open source especifica para Chrome/Chromium. Parsea historial, cookies, cache, descargas, credenciales, extensiones y Local Storage. Genera reportes en multiples formatos.
AXIOM (Magnet Forensics): herramienta comercial que soporta multiples navegadores y correlaciona artefactos de navegador con otros artefactos del sistema.
ChromeCacheView, MozillaCacheView, WebBrowserPassView (NirSoft): utilidades gratuitas especificas para cada tipo de artefacto.
DB Browser for SQLite: herramienta GUI generica para explorar cualquier base de datos SQLite, util para consultas ad-hoc que las herramientas especializadas no cubren.
Navegacion privada y sus limitaciones
La navegacion privada (Incognito en Chrome, Private Browsing en Firefox) no escribe artefactos en disco. Sin embargo:
Los logs DNS del sistema operativo pueden registrar las resoluciones de dominio realizadas durante la sesion privada.
Los logs del proxy o firewall corporativo registran las conexiones independientemente del modo de navegacion.
La memoria RAM puede contener artefactos de la sesion privada si el sistema no ha sido reiniciado. Un volcado de memoria con herramientas como Volatility puede revelar URLs, contenido de paginas y credenciales de sesiones privadas.
Las descargas completadas durante la navegacion privada persisten en disco aunque no aparezcan en el historial de descargas del navegador.
Metodologia de analisis
Un analisis forense de navegador sistematico sigue estos pasos:
Primero, identifica todos los navegadores instalados y sus perfiles. Ademas de Chrome y Firefox, busca Edge, Brave, Opera, Vivaldi y otros navegadores basados en Chromium que comparten la misma estructura de artefactos.
Segundo, copia los ficheros del perfil (nunca trabajes sobre la evidencia original). Incluye los ficheros WAL (Write-Ahead Log) y SHM que contienen datos no volcados a la base de datos principal.
Tercero, analiza el historial y las descargas para establecer la actividad temporal y los sitios relevantes. Correlaciona con la timeline general del incidente.
Cuarto, revisa las cookies para identificar sesiones activas en servicios criticos.
Quinto, documenta las credenciales almacenadas para definir el alcance del compromiso, sin necesidad de descifrarlas.
Sexto, revisa las extensiones instaladas buscando extensiones maliciosas o con permisos excesivos.
Septimo, integra los hallazgos en la super timeline usando plaso (que incluye parsers para Chrome y Firefox) o herramientas como Hindsight.
Conclusion
Los artefactos del navegador son una fuente rica de evidencia forense que a menudo se subestima. El historial de navegacion, las descargas, las cookies y las credenciales almacenadas proporcionan contexto critico para entender el vector de entrada, las acciones del atacante y el alcance del compromiso.
La naturaleza SQLite de los datos hace que el analisis sea accesible con herramientas estandar, pero la interpretacion requiere conocimiento de los formatos de timestamp especificos de cada navegador y de la estructura de las bases de datos.
En el proximo articulo exploraremos otro vector de ataque comun que deja artefactos analizables: el correo electronico, con tecnicas de analisis de headers y ficheros EML.
Preguntas frecuentes
Libros recomendados
Artículos relacionados
Windows Forensics: Artefactos Clave para Investigaciones DFIR
Timeline Analysis: Como Reconstruir un Incidente Paso a Paso
Email Forensics: Analisis de Headers y Ficheros EML
Que es Memory Forensics y Por Que es Esencial en DFIR
Adquisicion de Memoria RAM: Herramientas y Mejores Practicas
Automatizacion de Memory Forensics: Scripts, Pipelines y YARA en Memoria
Este contenido tiene fines exclusivamente educativos y de investigación en ciberseguridad defensiva. No se proporcionan binarios maliciosos ni payloads ejecutables. El uso indebido de esta información es responsabilidad exclusiva del usuario. Leer disclaimer completo.