Windows Wednesday: Prefetch Files
Para o post de hoje, vou tirar uns momentos para discutir o Prefetch do Windows. Mas primeiro, um plug rápido para algum treinamento:
Estou me preparando para uma próxima aula FOR508 com Chad Tillbury no SANS Security East 2017. Enquanto está chegando muito perto, estamos ansiosos por uma classe incrível e encontrar a próxima equipe de forenses letais! Se você estiver assistindo, por favor, me deixe uma fila antes do tempo. Se você quiser comparecer, acredito que a inscrição ainda está aberta! Também durante o evento, na quarta-feira, 11 de janeiro, estarei dando uma palestra SANS@Night chamada Zero In sobre os artefatos que interessam. A preparação para essa palestra foi a inspiração para o post de hoje, pois o prefetch certamente receberá uma menção.
Eu já disse isso antes e vou dizer novamente – muitos artefatos que amamos no mundo DFIR são na verdade subprodutos do sistema operacional tentando tornar a vida mais fácil e/ou mais eficiente para o usuário ou desenvolvedores. Na minha opinião, o prefetch também se encaixa nesta categoria.
O prefetch existe desde o Windows XP. Ele foi originalmente projetado para ajudar a acelerar o boot do sistema e o lançamento de aplicativos. O objetivo do prefetch é analisar e registrar o comportamento da inicialização de aplicativos após a execução para tornar as futuras startups mais eficientes. Estes dados são gravados por até 10 segundos após a inicialização do aplicativo. O comportamento da aplicação gravado é salvo em um arquivo trace – o que chamamos de arquivo prefetch – no caminho C:\Windows\Prefetch
.
Prefetch Files
Como mencionado acima, arquivos prefetch são encontrados no diretório estático C:\Windows\Prefetch
. Os ficheiros Prefetch têm uma extensão .pf
e seguem uma convenção de nomenclatura padrão:
<APPLICATION NAME IN ALL CAPS>-<EIGHT CHARACTER HASH OF APPLICATION LOCATION>.pf
Os ficheiros Prefetch contêm os seguintes metadados:
- O nome do executável correspondente
- O número de vezes que o executável foi executado
- O tamanho do ficheiro de pré-instalação
- Os ficheiros e directórios que foram referenciados durante o arranque da aplicação (é isto que o Windows quer rastrear)
- Informações relacionadas com o volume em que o executável está, incluindo o caminho do volume e o número de série.
Aqui está uma amostra de alguns arquivos de pré-configuração do meu host de testes:
Nota que tenho várias aplicações com o mesmo nome, mas com uma localização diferente. Isso é evidência pelos hashes um pouco semelhantes, e em muitos casos de aplicações, é provavelmente indicativo de uma atualização de software ou mudança de estrutura de pastas.
EDIT: Graças a Eric Zimmerman por me lembrar que os nomes dos arquivos do prefetch também dependem de argumentos de linha de comando e sensibilidade a casos, apesar da falta de sensibilidade a casos no arquivo trace. Hexacorn cobre o algoritmo de hashing em detalhes aqui, e eu recomendaria que você verificasse se você precisa fazer este nível de análise de prefetch.
Parsing the Prefetch File
A estrutura para arquivos de prefetch é na verdade bastante conhecida e há múltiplas opções de análise disponíveis. Aqui estão algumas opções:
- Se piorar, podemos usar
strings
para obter algumas informações sobre o prefetch trace information. Aqui está um exemplo de enumeração de strings Unicode de um executável suspeito:
- Eric Zimmerman mantém sua ferramenta PECmd, atualmente na versão 0.7.2.0. Ele pode ser baixado aqui.
- log2timeline/Plaso contém um analisador de prefetch, e pode colocar dados chave dos arquivos de prefetch em um formato de linha de tempo.
- TZWorks também publica um analisador de prefetch realmente útil e prático
pf
. Você pode ver mais informações sobre ele aqui. Aqui está um exemplo da saída da ferramenta TZWorks’pf
: