O que Análise de Forense de Navegadores com Hindsight faz?
Visão Geral
Hindsight é uma ferramenta de código aberto para forense de navegadores, projetada para analisar artefatos do Google Chrome e outros navegadores baseados em Chromium (Microsoft Edge, Brave, Opera, Vivaldi). Ela extrai e correlaciona dados de múltiplos arquivos de banco de dados do navegador para criar uma linha do tempo unificada da atividade web. O Hindsight pode analisar URLs, histórico de downloads, registros de cache, favoritos, registros de preenchimento automático, senhas salvas, preferências, extensões de navegador, cookies HTTP, Armazenamento Local (cookies HTML5), dados de login e informações de sessão/abas. A ferramenta produz linhas do tempo cronológicas em múltiplos formatos de saída (XLSX, JSON, SQLite) que permitem aos investigadores reconstruir a atividade web do usuário para resposta a incidentes, investigações de ameaças internas e casos criminais.
Quando Usar
- Ao investigar incidentes de segurança que exigem análise de forense de navegadores com Hindsight
- Ao construir regras de detecção ou consultas de caça a ameaças para este domínio
- Quando analistas de SOC precisam de procedimentos estruturados para este tipo de análise
- Ao validar a cobertura de monitoramento de segurança para técnicas de ataque relacionadas
Pré-requisitos
- Python 3.8+ com Hindsight instalado (
pip install pyhindsight)
- Acesso aos diretórios de perfil do navegador a partir de uma imagem forense
- Dados do perfil do navegador (não criptografados com criptografia de nível de SO)
- Timeline Explorer ou aplicativo de planilha para análise
Localizações dos Perfis de Navegador
| Navegador | Caminho do Perfil no 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/ |
Principais Arquivos de Artefatos
| Arquivo | Conteúdo |
|---|
| History | Visitas a URLs, downloads, pesquisas por palavras-chave |
| Cookies | Cookies HTTP com domínio, data de validade, valores |
| Web Data | Entradas de preenchimento automático, cartões de crédito salvos |
| Login Data | Nomes de usuário/senhas salvos (criptografados) |
| Bookmarks | Árvore de favoritos em JSON |
| Preferences | Configuração do navegador e extensões |
| Local Storage/ | Armazenamento Local HTML5 por domínio |
| Session Storage/ | Armazenamento específico de sessão por domínio |
| Network Action Predictor | URLs digitados anteriormente |
| Shortcuts | Atalhos e previsões da Omnibox |
| Top Sites | Sites visitados com frequência |
Executando o Hindsight
Linha de Comando
hindsight.exe -i "C:\Evidence\Users\suspect\AppData\Local\Google\Chrome\User Data\Default" -o C:\Output\chrome_analysis
hindsight.exe -i "/caminho/para/perfil" -o /saida/analise -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
Detalhes da Análise de Artefatos
Histórico de URLs e Visitas
Histórico de Downloads
Análise de Cookies
Script de Análise em 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):
"""Converter carimbo de data/hora do Chrome para 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:
"""Analisar banco de dados History do Chrome para evidências forenses."""
history_db = os.path.join(profile_path, "History")
if not os.path.exists(history_db):
return {"error": "Banco de dados History não encontrado"}
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("Uso: python process.py <caminho_perfil_chrome> <diretorio_saida>")
sys.exit(1)
analyze_chrome_history(sys.argv[1], sys.argv[2])
if __name__ == "__main__":
main()
Referências
Exemplo de Saída
$ python hindsight.py -i /evidencia/perfil-chrome -o /analise/saida_hindsight
Hindsight v2024.01 - Análise Forense de Navegadores Chrome/Chromium
================================================================
Perfil: /evidencia/perfil-chrome (Chrome 120.0.6099.130)
SO: Windows 10
[+] Analisando banco de dados History...
Registros de URL: 12.456
Registros de download: 234
Termos de pesquisa: 567
[+] Analisando banco de dados Cookies...
Registros de cookies: 8.923
Cookies criptografados: 6.712
[+] Analisando Web Data (Preenchimento Automático)...
Entradas de preenchimento automático: 1.234
Entradas de cartão de crédito: 2 (criptografadas)
[+] Analisando Login Data...
Credenciais salvas: 45 (criptografadas)
[+] Analisando Favoritos...
Entradas de favoritos: 189
--- Histórico de Navegação (Últimas 10 Entradas) ---
Carimbo de Data/Hora (UTC) | URL | Título | Contagem de Visitas
2024-01-15 14:32:05.123 | https://mail.corporate.com/inbox | Corporate Mail | 45
2024-01-15 14:33:12.456 | https://drive.google.com/file/d/1aBcDe... | Q4_Financial_Report.xlsx | 1
2024-01-15 14:35:44.789 | https://mega.nz/folder/xYz123 | MEGA - Nuvem Segura | 3
2024-01-15 14:36:01.234 | https://mega.nz/folder/xYz123#upload | MEGA - Upload | 8
2024-01-15 14:42:15.567 | https://pastebin.com/raw/kL9mN2pQ | Pastebin (bruto) | 1
2024-01-15 15:01:33.890 | https://192.168.1.50:8443/admin | Painel de Administração | 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 | Login VPN | 5
2024-01-15 16:00:00.333 | https://whatismyipaddress.com | Qual é o Meu IP | 1
2024-01-15 16:05:12.444 | https://protonmail.com/inbox | ProtonMail | 3
--- Downloads (Suspeitos) ---
Carimbo de Data/Hora (UTC) | Nome do Arquivo | URL de Origem | Tamanho
2024-01-15 14:33:15.000 | Q4_Financial_Report.xlsm | https://phish-domain.com/docs/report | 245 KB
2024-01-15 14:34:02.000 | update_client.exe | https://cdn.evil-updates.com/client.exe | 1.2 MB
--- Cookies (Tokens de Sessão) ---
Domínio | Nome | Expira em | Seguro | HttpOnly
.corporate.com | SESSION_ID | 2024-01-16 14:32 | Sim | Sim
.mega.nz | session | Sessão | Sim | Sim
.protonmail.com | AUTH-TOKEN | 2024-02-15 00:00 | Sim | Sim
Relatório salvo em: /analise/saida_hindsight/Hindsight_Report.xlsx