Memória e dados voláteis · Aula 4 de 4
Arquivos de hibernação, paginação e falha
12 min de leitura
As aulas 5.1 a 5.3 pressupunham uma captura de memória de um sistema em execução. Muitas vezes, ela não existe: o computador estava desligado, ou você tem apenas uma imagem de disco ou uma coleta de triagem. A memória ainda chega ao disco por meio da hibernação, dos arquivos de paginação, dos despejos de memória de falha e de seus equivalentes no Linux. Esta aula explica quando cada arquivo é gravado, quanta estrutura é preservada e como determinar a data do que você encontra. As coletas de triagem frequentemente excluem pagefile.sys e hiberfil.sys porque são grandes, enquanto pequenos relatórios de falha geralmente são coletados.
Por que a memória acaba no disco
Os sistemas gravam a RAM no disco para liberar RAM (paginação), para desligar sem perder o estado (hibernação) e para registrar uma falha (despejos de memória de falha). Quanto mais estrutura for preservada, maior será a parte do fluxo de trabalho do Volatility das aulas 5.2 e 5.3 que poderá ser aplicada.
O arquivo de hibernação
C:\hiberfil.sys é um arquivo de sistema oculto na raiz do volume do sistema. Quando o usuário escolhe Hibernar, o Windows grava nele o conteúdo da RAM, compactado, e desliga; na próxima inicialização, o carregador de inicialização restaura a memória a partir dele. O valor do Registro HibernateEnabled em SYSTEM\<ControlSet>\Control\Power mostra se a hibernação está ativada. Em um hive offline, leia Select\Current para encontrar o ControlSet00x correto (aula 2.1).
Inicialização Rápida
A Inicialização Rápida (também chamada de desligamento híbrido) usa o mesmo arquivo. Quando o usuário clica em Desligar, o Windows encerra todas as sessões de usuário e depois hiberna apenas a sessão do kernel: o kernel, os drivers e os processos e serviços do sistema da sessão 0. A próxima inicialização a frio retoma essa imagem em vez de inicializar do zero. A Inicialização Rápida é ativada por padrão em muitas instalações cliente do Windows 10 e 11 que oferecem suporte à hibernação, mas você deve verificar, em vez de presumir: o valor HiberbootEnabled em SYSTEM\<ControlSet>\Control\Session Manager\Power é 1 quando ela está ativada. Reiniciar não usa a Inicialização Rápida; realiza um desligamento completo. Na próxima inicialização, o evento 27 do log System, da origem Kernel-Boot, registra o tipo de inicialização: 0x0 para uma inicialização completa, 0x1 para uma inicialização com Inicialização Rápida (híbrida) e 0x2 para uma retomada da hibernação.
Assim, um computador apreendido enquanto estava desligado muitas vezes ainda contém um instantâneo de sua sessão do kernel no último desligamento: processos do sistema, serviços, drivers e estruturas de rede do kernel, mas não aplicativos de usuário como explorer.exe, porque as sessões de usuário foram encerradas primeiro. Uma hibernação completa também preserva as sessões de usuário.
Conversão e determinação da data
O arquivo não é uma imagem de memória bruta. Ele tem um cabeçalho e conjuntos de páginas compactados (compactação Microsoft Xpress; a variante depende da versão do Windows), portanto precisa ser descompactado antes que a maioria das ferramentas possa usá-lo. As versões oficiais do Volatility 3 não leem arquivos de hibernação diretamente; por isso, primeiro converta o arquivo com uma ferramenta como o Hibr2Bin, que grava uma imagem bruta. Após a conversão, os plugins das aulas 5.2 e 5.3 funcionam normalmente.
O cabeçalho começa com uma assinatura como HIBR (hibr em minúsculas em versões mais antigas) quando a imagem é válida. A assinatura do cabeçalho muda após uma retomada: o Windows sobrescreve ou apaga o cabeçalho, de modo que são encontrados valores como WAKE, RSTR ou zeros, e um arquivo antigo pode não ser convertido corretamente. Páginas compactadas dessa imagem anterior ainda podem permanecer e merecem uma busca por strings ou com YARA.
Acima de tudo, determine a data do instantâneo: ele descreve o momento em que o arquivo foi gravado, possivelmente dias antes da apreensão. Use a hora do sistema armazenada no cabeçalho de hibernação, se sua ferramenta a interpretar, e a data e hora de modificação do arquivo em $STANDARD_INFORMATION na $MFT; depois, corrobore ambas com eventos de desligamento e inicialização no log System (aula 2.7).
Pagefile e swapfile
C:\pagefile.sys contém páginas que o gerenciador de memória retirou da RAM. Sua localização e seu tamanho são definidos no valor PagingFiles em SYSTEM\<ControlSet>\Control\Session Manager\Memory Management, portanto verifique também a existência de arquivos de paginação em outros volumes. C:\swapfile.sys (Windows 8 e posteriores) é um arquivo complementar menor, usado para transferir aplicativos modernos (da Store) inteiros para o disco.
Um arquivo de paginação é uma coleção de páginas de 4 KiB gravadas ao longo do tempo, sem um mapa: as tabelas de páginas que indicam a qual processo e endereço virtual uma página pertencia ficam na RAM, não no arquivo. Não é possível reconstruir processos apenas a partir de um arquivo de paginação. Alguns frameworks de análise de memória podem combinar um arquivo de paginação com uma captura de RAM obtida no mesmo momento para resolver endereços paginados para o disco, mas, em um caso com apenas disco, o arquivo de paginação é uma fonte de strings: URLs, fragmentos de e-mails e conversas, comandos digitados, caminhos de arquivos e, às vezes, credenciais. Por padrão, o Windows reutiliza o arquivo entre inicializações sem apagá-lo, portanto uma página pode vir de uma sessão anterior.
Dois fatores reduzem o que você encontra:
- Compactação de memória (Windows 10 e posteriores): as páginas podem ser compactadas no repositório de compactação de memória na RAM antes de serem paginadas para o disco, de modo que o conteúdo do arquivo de paginação pode estar compactado e invisível a uma busca simples por strings. Existem ferramentas de pesquisa para descompactar o repositório, mas as ferramentas padrão não detectam esse conteúdo.
- ClearPageFileAtShutdown: quando esse DWORD em
Memory Managementé 1, o Windows sobrescreve o arquivo de paginação com zeros no desligamento. Um arquivo de paginação inteiramente preenchido com zeros, com esse valor definido, é esperado, não um sinal de apagamento pelo usuário.
Analise com strings em ASCII e UTF-16LE (strings -el), bulk_extractor (seus arquivos de resultados listam cada ocorrência com seu deslocamento em bytes e o contexto ao redor) e regras YARA. Registre o deslocamento de cada ocorrência; ele é seu único localizador.
Despejos de memória de falha e relatórios de erros
Quando o Windows para com um bugcheck (uma "tela azul"), ele grava a memória no arquivo de paginação e, na próxima inicialização, salva-a como um arquivo de despejo e registra o evento 1001 no log System, da origem BugCheck. O tipo é definido por CrashDumpEnabled em SYSTEM\<ControlSet>\Control\CrashControl:
| Valor | Tipo de despejo | Conteúdo |
|---|---|---|
| 0 | Nenhum | Nada é gravado |
| 1 | Despejo de memória completo | Toda a memória física |
| 2 | Despejo de memória do kernel | Apenas memória do kernel, sem memória de processos em modo de usuário |
| 3 | Despejo de memória pequeno | Minidespejo: código de parada, pilha, lista de drivers carregados |
| 7 | Despejo de memória automático | Despejo do kernel com dimensionamento automático do arquivo de paginação |
Os despejos completos e do kernel são gravados em C:\Windows\MEMORY.DMP (o valor DumpFile; por padrão, cada falha sobrescreve a anterior), e os despejos pequenos, em C:\Windows\Minidump\*.dmp. O Volatility 3 lê apenas despejos de memória completos (os formatos completo e bitmap, DumpType 1 e 5), não despejos do kernel ou pequenos, portanto um despejo completo se comporta como uma captura de RAM; analise despejos do kernel com o WinDbg. Um despejo do kernel lista processos e drivers, mas qualquer conteúdo da memória de usuário, como linhas de comando armazenadas no ambiente do processo, está ausente. No WinDbg, !analyze -v explica a falha, lm lista os módulos e !process 0 0 lista os processos.
As falhas de aplicativos são tratadas pelo Relatório de Erros do Windows (WER). Os relatórios são armazenados em C:\ProgramData\Microsoft\Windows\WER\ReportArchive (enviados ou processados) e ReportQueue (aguardando), com cópias por usuário em %LOCALAPPDATA%\Microsoft\Windows\WER. Os nomes das pastas começam com o tipo de relatório e o nome do executável, como AppCrash_xfer.exe_…. Cada uma contém um arquivo de texto UTF-16 Report.wer com linhas chave=valor, por exemplo EventType=APPCRASH, um EventTime gravado como FILETIME decimal e o nome do aplicativo e, em versões mais recentes, seu caminho completo. Um relatório de falha comprova que o programa foi executado, portanto é um artefato de execução que sobrevive à exclusão do programa (a aula 2.3 aborda os demais). Os eventos 1000 (Application Error) e 1001 (Windows Error Reporting) do log Application o corroboram.
Despejos completos em modo de usuário de um processo que falha são gravados apenas se LocalDumps estiver configurado em SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps: DumpFolder (padrão %LOCALAPPDATA%\CrashDumps), DumpType (1 mini, 2 completo) e DumpCount (padrão 10). Um despejo completo de um navegador pode conter conteúdo descriptografado.
Linux: área de troca e despejos de núcleo
O Linux pagina para uma partição de troca ou um arquivo de troca, como /swapfile; /etc/fstab os identifica. Uma área de troca contém a assinatura SWAPSPACE2 nos últimos 10 bytes de sua primeira página (deslocamento 4.086 com páginas de 4 KiB). Assim como um arquivo de paginação, a área de troca é uma fonte de strings. A hibernação (suspensão para disco) no Linux grava a imagem da memória na área de troca, e a implementação do próprio kernel substitui a assinatura por S1SUSPEND até a retomada. A área de troca costuma ser criptografada junto com o disco, e o zram mantém a área de troca compactada apenas na RAM.
As falhas de processos em distribuições com systemd são capturadas pelo systemd-coredump: arquivos de despejo de núcleo compactados em /var/lib/systemd/coredump/, nomeados com o nome do programa, ID de usuário, ID de inicialização, ID de processo e data e hora da falha, além de uma entrada no journal que coredumpctl list exibe mesmo após a remoção do arquivo de despejo de núcleo.
Tabela de resumo
| Arquivo | Caminho | Quando é gravado | O que contém | Como analisar |
|---|---|---|---|---|
| Arquivo de hibernação | C:\hiberfil.sys | Hibernação; desligamento com Inicialização Rápida | Instantâneo compactado da RAM; Inicialização Rápida: apenas sessão do kernel | Converter para formato bruto (por exemplo, Hibr2Bin), depois Volatility 3; determinar a data do instantâneo |
| Arquivo de paginação | C:\pagefile.sys (ou PagingFiles) | Continuamente, página por página | Páginas individuais de 4 KiB, sem mapa | strings (ASCII + UTF-16LE), bulk_extractor, YARA |
| Swapfile | C:\swapfile.sys | Transferência de aplicativos modernos para o disco | Páginas de aplicativos da Store | Como o arquivo de paginação |
| Despejo completo ou do kernel | C:\Windows\MEMORY.DMP | Bugcheck, salvo na próxima inicialização | Toda a memória ou apenas o kernel | Volatility 3 (apenas despejo completo), WinDbg !analyze -v |
| Despejo pequeno | C:\Windows\Minidump\*.dmp | Bugcheck | Código de parada, pilha, lista de drivers | WinDbg |
| Relatório WER | …\WER\ReportArchive, ReportQueue | Falha ou travamento de aplicativo | Texto de Report.wer: aplicativo, data e hora | Visualizador de texto; artefato de execução |
| Despejo em modo de usuário | LocalDumps DumpFolder | Falha de aplicativo, se configurado | Memória de um processo | WinDbg, strings |
| Área de troca do Linux | Partição de troca ou /swapfile | Paginação; imagem de hibernação | Páginas; imagem inteira após a hibernação | strings, bulk_extractor |
| Despejo de núcleo | /var/lib/systemd/coredump/ | Falha de processo | Memória de um processo | coredumpctl, gdb, strings |
Exemplo resolvido
Arquivo de hibernação. Um computador desktop foi encontrado desligado e apreendido em 2026-03-16T09:30:00Z. A imagem contém hiberfil.sys com data e hora de modificação na $MFT de 2026-03-13T22:47:10Z. Em ControlSet001\Control\Session Manager\Power, HiberbootEnabled = 1. A imagem convertida mostra lsass.exe, services.exe, muitas instâncias de svchost.exe e um serviço desconhecido, mas nenhum explorer.exe e nenhum navegador.
Interpretação: esta é uma imagem de Inicialização Rápida do último desligamento, não da apreensão. O intervalo vai de 2026-03-13T22:47:10Z a 2026-03-16T09:30:00Z: 2 dias (até 2026-03-15T22:47:10Z) mais 10 h 42 min 50 s, portanto 2 d 10 h 42 min 50 s. Relate o serviço desconhecido como "em execução em 2026-03-13T22:47:10Z, momento do último desligamento com Inicialização Rápida", e corrobore a data e hora com eventos de desligamento do log System. A ausência de processos de usuário não significa que ninguém estava conectado.
Arquivo de paginação. O bulk_extractor informa a string UTF-16LE transfer.example.com/upload no deslocamento em bytes 1.234.567.890 de pagefile.sys e, nas proximidades, um fragmento de e-mail rcos.vidal@exampl. 1.234.567.890 = 0x499602D2. Com páginas de 4 KiB: 1.234.567.890 ÷ 4.096 = 301.408 com resto 722, portanto página 301.408 (0x49960), byte 722 (0x2D2) dentro dela. Relate:
- a string exata, a codificação, o deslocamento em decimal e hexadecimal e o hash do
pagefile.sysexportado; - o fragmento exatamente como encontrado, sem completar o endereço;
- que o arquivo de paginação não fornece data e hora nem o processo proprietário, e a página pode ser anterior à última inicialização;
- a corroboração por fontes com registros de data e hora: histórico e downloads do navegador (módulo 4), uso da rede no SRUM (aula 2.8) ou logs de proxy e firewall.
Tratamento de conteúdo sensível
Esses arquivos contêm tudo o que estava na memória: senhas, mensagens de terceiros, dados de saúde ou financeiros e comunicações protegidas por sigilo. Mantenha as buscas dentro dos limites de sua autorização, relate apenas ocorrências relevantes e proteja strings e despejos exportados como a própria evidência.
Foco no exame: Espere questões sobre o que cada arquivo contém e quando ele é gravado, especialmente o fato de que umhiberfil.sysde Inicialização Rápida contém apenas a sessão do kernel do último desligamento e deve ter sua data determinada. Conheça os valores deCrashDumpEnabled, os caminhos padrão dos despejos, as pastas WER como evidência de execução e os valores do RegistroHiberbootEnabledeClearPageFileAtShutdown. As ocorrências no arquivo de paginação são relatadas pelo deslocamento, sem data e hora.
Pontos principais
hiberfil.sysé um instantâneo compactado da RAM da última hibernação ou do último desligamento com Inicialização Rápida; converta-o e determine sua data antes de interpretá-lo.- A Inicialização Rápida salva apenas a sessão do kernel, portanto os aplicativos de usuário estão ausentes por definição.
pagefile.sys,swapfile.syse a área de troca do Linux são páginas não estruturadas: busque strings, relate deslocamentos e nunca deduza uma data e hora a partir deles.CrashDumpEnableddefine o tipo de despejo (1 completo, 2 kernel, 3 pequeno, 7 automático); um despejo do kernel não contém memória em modo de usuário.- Os arquivos
Report.werdo WER e as entradas do systemd-coredump comprovam que um programa foi executado, mesmo após sua exclusão. - Esses arquivos contêm dados de terceiros e dados sensíveis; mantenha-se dentro do escopo.