Navegadores, e-mail e sincronização em nuvem · Aula 3 de 6
Cache, navegação privada e o que permanece
12 min de leitura
As aulas 4.1 e 4.2 abordaram a leitura dos bancos de dados de histórico. Esta aula trata do cache do navegador, que mantém cópias do que foi efetivamente entregue, e da navegação privada, que elimina o histórico e o cache, mas não os vestígios mantidos pelo restante do Windows. O trabalho do perito é saber quais vestígios permanecem, onde encontrá-los e até onde eles permitem sustentar uma constatação.
O que o cache armazena e por que isso importa
Um navegador armazena cópias de páginas, imagens, scripts, folhas de estilo e outros conteúdos baixados para poder exibi-los novamente sem buscá-los. Cada entrada do cache mantém a chave (essencialmente a URL), o próprio conteúdo e os cabeçalhos de resposta do servidor, como Date (quando o servidor enviou a resposta), Last-Modified, Content-Type, Content-Length e ETag, além dos horários gravados pelo navegador com base no relógio local. Isso fornece ao perito três elementos que o banco de dados de histórico não oferece: o conteúdo que o usuário viu, a comprovação de que o conteúdo chegou a esse perfil do navegador e uma marca temporal do relógio do servidor.
O cabeçalho Date é gravado pelo servidor web, que normalmente está sincronizado, portanto é um relógio externo útil; uma resposta fornecida por uma CDN ou por um cache de proxy mantém seu Date original, e um cabeçalho Age mostra então há quanto tempo ela existe. Compare-o com os horários locais da mesma entrada para medir o desvio do relógio do dispositivo (aula 3.5). Last-Modified fornece um limite inferior: o conteúdo não pode ter sido entregue antes de sua última alteração no servidor.
Cache do Chromium
O Chrome mantém seu cache HTTP em %LOCALAPPDATA%\Google\Chrome\User Data\Default\Cache\Cache_Data; o Edge usa a mesma estrutura em %LOCALAPPDATA%\Microsoft\Edge\User Data\<profile>. O formato em disco varia conforme a plataforma e a versão. Versões recentes do Chrome no Windows usam o formato blockfile em Cache_Data:
| Arquivo | Conteúdo |
|---|---|
index | Tabela hash de endereços de entradas; assinatura mágica 0xC103CAC3 |
data_0 | Blocos de 36 bytes: classificações, a lista de entradas menos recentemente usadas com os horários do último uso |
data_1 | Blocos de 256 bytes: registros de entradas com chave, horário de criação e endereços dos fluxos, e dados pequenos |
data_2, data_3 | Blocos de 1.024 bytes e 4.096 bytes: cabeçalhos e corpos de até 16 KB |
f_XXXXXX | Arquivos separados para fluxos maiores que 16 KB, como f_0001a3 |
Cada entrada tem o fluxo 0 (as informações da resposta HTTP interpretadas, incluindo os cabeçalhos) e o fluxo 1 (o corpo, muitas vezes ainda comprimido com gzip ou Brotli, conforme enviado). O Chromium armazena os horários como microssegundos desde 1601-01-01 UTC. No Android, Linux, ChromeOS e macOS, o Chromium usa por padrão o formato simple cache: um arquivo por entrada chamado <16 hex digits>_0, com arquivos _1 e _s opcionais e uma pasta index-dir.
Desde o Chrome 86, o cache HTTP é particionado por site, de modo que as chaves podem começar com um prefixo como 1/0/_dk_, seguido pelo site de nível superior que carregou o recurso. Esse prefixo informa para qual página uma imagem ou um script de terceiros foi carregado.
Duas pastas vizinhas são frequentemente confundidas com o cache. Code Cache (subpastas js e wasm) armazena JavaScript e WebAssembly compilados, indexados pela URL do script: mostra que os scripts de um site foram executados, não o que foi exibido. GPUCache armazena shaders gráficos compilados e tem pouco valor probatório.
cache2 do Firefox
O Firefox 32 e versões posteriores usam o formato cache2 no perfil local (não no móvel): %LOCALAPPDATA%\Mozilla\Firefox\Profiles\<profile>\cache2\entries. Cada entrada corresponde a um arquivo, cujo nome é o hash SHA-1 de 40 dígitos hexadecimais de sua chave. O arquivo armazena o conteúdo primeiro e depois os metadados: um hash de 4 bytes dos metadados, os hashes dos blocos (2 bytes por bloco de 256 KiB), um cabeçalho (versão, contagem de buscas, última busca, última modificação, frecency, horário de expiração, tamanho da chave, sinalizadores), a chave terminando com a URL (precedida por sinalizadores curtos como a,:) e elementos nomeados como request-method e response-head, que contém os cabeçalhos completos da resposta. Os últimos 4 bytes são um deslocamento em big-endian para o início dos metadados, que equivale ao comprimento do conteúdo. Os horários do cabeçalho são segundos Unix de 32 bits, em big-endian. cache2\index resume todas as entradas (hashes, frecency, sinalizadores) e não contém URLs.
Exemplo resolvido: leitura de uma entrada cache2
Um arquivo de entrada tem 15.240 bytes. Seus últimos 4 bytes são 00 00 3A 98 = 0x3A98 = 15.000, portanto os bytes 0 a 14.999 são o conteúdo em cache (eles começam com 89 50 4E 47, um PNG) e os metadados começam no deslocamento 15.000. O campo da última busca contém 69 B5 60 85 = 1.773.494.405 segundos desde 1970-01-01 = 2026-03-14T13:20:05Z. O elemento response-head contém Date: Sat, 14 Mar 2026 13:20:03 GMT. O relógio local e o servidor concordam com uma diferença de até 2 segundos, compatível com o tempo normal de transferência, portanto nenhuma correção de desvio é necessária para esse período.
Ferramentas e limites
Exemplos gratuitos: ChromeCacheView e MozillaCacheView, da NirSoft, listam URL, tipo de conteúdo, horário do servidor e horário da última modificação e exportam o conteúdo; o Plaso tem os analisadores chrome_cache e firefox_cache2; o Hindsight analisa o cache do Chromium junto com o histórico. Qualquer que seja a ferramenta, abra uma entrada manualmente e confirme os horários.
Um cache tem limites. Os navegadores dimensionam seu tamanho com base nas configurações ou no espaço livre em disco e removem as entradas menos recentemente usadas; respostas marcadas com Cache-Control: no-store, comuns em páginas bancárias e de login, nunca são gravadas; e o usuário pode limpar o cache. A ausência de uma entrada no cache não comprova que uma página não foi visitada.
Navegação privada
O modo anônimo do Chrome, o InPrivate do Edge e a navegação privativa do Firefox funcionam, em princípio, da mesma forma. O navegador não grava o histórico, a lista de downloads, os dados de formulários nem as entradas de pesquisa; os cookies e os dados dos sites ficam na memória e são descartados quando a última janela privada é fechada; e o cache HTTP é mantido na memória, em vez de em Cache_Data ou cache2. Os três mantêm os arquivos baixados em uma janela privada e os favoritos criados nela, porque são armazenados fora da sessão privada. O modo privado protege contra o próximo usuário do perfil, não contra o sistema operacional, a rede ou os sites visitados.
Os vestígios que permanecem, portanto, estão fora dos bancos de dados do próprio navegador:
| Vestígio | Permanece após a navegação privada? | Onde |
|---|---|---|
| Visitas, cookies, dados de formulários | Não | Não são gravados em History, Cookies ou places.sqlite |
| Cache HTTP | Não (somente na memória) | Não é gravado em Cache_Data ou cache2 |
| Arquivo baixado | Sim | Pasta de downloads; $MFT e $UsnJrnl (módulo 1) |
| ADS Zone.Identifier | Sim; o modo anônimo do Chrome omite a URL | Fluxo no arquivo baixado (aula 1.4) |
| Favorito criado | Sim | Arquivo Bookmarks ou places.sqlite |
| Execução do navegador | Sim, apenas a execução | Prefetch, BAM (aula 2.3) |
| Bytes de rede por aplicativo | Sim, totais por hora | SRUDB.dat do SRUM (aula 2.8) |
| Arquivo baixado e aberto | Sim | Arquivos LNK e Listas de Atalhos (aula 2.4) |
| Nomes DNS resolvidos | Até a expiração do TTL ou a reinicialização | Cache do cliente DNS na memória |
| URLs e fragmentos de páginas | Possivelmente | RAM, pagefile.sys, hiberfil.sys (módulo 5) |
| Conexões | Sim, fora do host | Logs de proxy, firewall, servidor DNS e roteador |
| Atividade da conta | Sim, se o usuário fez login | Registros da própria conta on-line (aula 4.5) |
Pontos a aplicar com precisão:
- Zone.Identifier. Para um download em uma janela normal, o Chromium no Windows 10 e 11 grava
HostUrleReferrerUrl. Para um download no modo anônimo, ele não repassa a URL: o fluxo mantémZoneId=3, masHostUrlrecebe o valor substitutoabout:interneteReferrerUrlfica ausente. Confirme o comportamento da versão do seu caso com um download de teste. - Prefetch e BAM comprovam que
chrome.exeoufirefox.exefoi executado, não que uma janela privada foi usada. O Prefetch não registra argumentos de linha de comando, portanto um parâmetro como--incognitoaparece apenas onde as linhas de comando são registradas, por exemplo, no evento de Segurança 4688 com a auditoria de linha de comando habilitada; uma janela aberta com Ctrl+Shift+N em um navegador em execução nem sequer é iniciada com esse parâmetro. - Cache do cliente DNS. Em um sistema em execução,
ipconfig /displaydnslista os nomes resolvidos pelo cliente DNS do Windows; ele é volátil e desaparece após uma reinicialização. Um navegador que resolve nomes por conta própria, como o Chrome com seu resolvedor integrado habilitado, pode contornar esse cache, e um que usa DNS sobre HTTPS também contorna os logs do servidor DNS local. - Logs de rede geralmente mostram nomes de hosts, não URLs completas: para HTTPS, um proxy sem interceptação registra o host e a porta da solicitação
CONNECT, não o caminho.
Histórico limpo não é navegação privada
Limpar o histórico exclui linhas que foram gravadas; a navegação privada nunca as grava. A diferença importa porque linhas excluídas podem permanecer. No SQLite genérico, uma linha excluída vai para o espaço livre dentro de uma página ou para uma página da lista de páginas livres até que o espaço seja reutilizado ou compactado com VACUUM, mas o Chromium e o Firefox compilam o SQLite com a exclusão segura ativada, que sobrescreve o conteúdo excluído com zeros no arquivo principal. Cópias ainda podem permanecer no diário de reversão (History-journal no Chromium) ou no log de gravação antecipada (places.sqlite-wal no Firefox), nas Cópias de Sombra de Volume e nos registros do $UsnJrnl referentes a arquivos de cache excluídos no momento da limpeza. O SRUM e o Prefetch não são afetados de forma alguma pela função de limpeza do navegador.
Como redigir uma constatação com base em vestígios indiretos
Quando existem apenas vestígios indiretos, indique cada fonte e seu limite e não afirme como fato o uso de uma janela privada, a menos que algo o demonstre. Redação adequada: "Os vestígios são compatíveis com a navegação em transfer.example.com em uma janela privada; o próprio histórico do navegador não contém registro desse site." Em seguida, liste as alternativas que você verificou: outro navegador ou perfil, histórico limpo ou um dispositivo diferente.
Exemplo resolvido: um comprovante sem histórico
Uma coleta de triagem do Windows 11 de outro caso, para o usuário lferraz, mostra:
Historydo Chrome: nenhuma visita ou download referente atransfer.example.com. A visita mais antiga no banco de dados é de 2026-04-21T15:02:41Z.C:\Users\lferraz\Downloads\upload-receipt.pdf, $SI criado em 2026-04-21T13:41:07Z, com Zone.IdentifierZoneId=3,ReferrerUrl=https://transfer.example.com/upload/done,HostUrl=https://transfer.example.com/r/8f3a/upload-receipt.pdf.- Uso de Dados de Rede do SRUM para
chrome.exe, usuáriolferraz, intervalo terminado às 14:00:00Z (linha anterior 13:00:00Z): BytesSent 734.003.200, BytesRecvd 9.437.184. Cache_Datacontém apenasindexe novos arquivosdata_0adata_3sem entradas, criados em 2026-04-21T15:01:58Z.
Cálculo. 734.003.200 ÷ 1.048.576 = 700 MiB enviados e 9.437.184 ÷ 1.048.576 = 9 MiB recebidos entre 13:00:00Z e 14:00:00Z, uma proporção de cerca de 78:1 compatível com um upload. O download às 13:41:07Z está dentro desse intervalo.
O que pode ser concluído. Um arquivo foi salvo às 13:41:07Z a partir de uma URL em transfer.example.com, após uma página desse site (/upload/done). chrome.exe, sob o usuário lferraz, enviou cerca de 700 MiB na mesma hora.
O que a hipótese de navegação privada precisa explicar. O HostUrl real contraria a hipótese de um download no modo anônimo do Chrome, que teria registrado about:internet. Um cache recriado às 15:01:58Z e um histórico que começa às 15:02:41Z são compatíveis com uma limpeza de dados de navegação pouco antes das 15:02, não com navegação privada, que deixa o cache normal intacto. Próximas etapas: recuperar por carving páginas mais antigas de History em History-journal, no espaço não alocado e nas cópias de sombra, verificar o $UsnJrnl em busca de arquivos f_ excluídos por volta das 15:01Z e examinar o Edge e outros perfis do Chrome, porque outro navegador baseado no Chromium poderia ter gravado o mesmo fluxo.
O que não pode ser concluído. Nem o SRUM nem o Zone.Identifier informam o que foi enviado ou que os 700 MiB foram para transfer.example.com; o SRUM não contém destino. Logs de proxy ou DNS da rede são necessários para estabelecer esse vínculo.
Foco no exame: Espere ler a URL, o cabeçalhoDateou o tipo de conteúdo de uma entrada de cache, ou calcular o deslocamento dos metadados de uma entrada cache2 do Firefox a partir dos últimos 4 bytes. Esteja preparado para escolher quais artefatos permanecem após a navegação privada, informar umHostUrlou uma contagem de bytes do SRUM e reconhecer que umHostUrlreal em um download do Chromium não é compatível com o modo anônimo. As questões podem contrastar o histórico limpo (cópias possivelmente recuperáveis) com a navegação privada (nada gravado).
Pontos principais
- As entradas de cache armazenam conteúdo, a chave de URL e os cabeçalhos de resposta do servidor; o cabeçalho
Dateé um relógio externo para verificações de desvio. - O Chrome no Windows usa
Cache_Datano formato blockfile (index,data_0adata_3, arquivosf_); o Firefox 32+ usa um arquivo emcache2\entriespor entrada, com os metadados após o conteúdo. - Os caches têm tamanho limitado, não armazenam respostas
no-storee podem ser limpos, portanto uma entrada ausente não comprova nada. - A navegação privada não grava histórico, cookies, dados de formulários nem cache em disco, mas downloads, favoritos, Prefetch, BAM, SRUM, arquivos LNK, memória e logs de rede permanecem.
- Os downloads no modo anônimo do Chrome contêm
ZoneId=3comHostUrl=about:internet; uma URL real aponta para outra hipótese. - O histórico limpo é preenchido com zeros no banco de dados principal pela exclusão segura, mas pode permanecer em diários, arquivos WAL e cópias de sombra; a navegação privada não deixa nada nesses locais.