Comparar parsers de ShimCache: Mandiant, Zimmerman, Velociraptor e esta ferramenta

5 min de leitura

TL;DR. Use o AppCompatCacheParser de Eric Zimmerman para trabalho de caso. Maior cobertura de OS, saída CSV, bem testado. Use o Velociraptor para triagem viva à escala de frota. Use o Shim Cache Parser da Mandiant quando uma referência simples em Python ajudar. Use esta ferramenta quando quiser zero instalação e zero upload. Faça validação cruzada quando discordarem. O formato é exigente o suficiente para que dois parsers vejam, ocasionalmente, coisas de forma diferente.

São quatro as ferramentas abertas que importam para o parsing de ShimCache. Cada uma tem um nicho. O erro que vejo analistas júnior cometerem é escolher uma e tratá-la como resposta para todos os casos. A resposta certa depende de estar a escalar, a fazer scripting, ou a olhar para uma única hive às 2 da manhã.

Os quatro parsers que importam

FerramentaLinguagemDistribuiçãoMelhor para
Mandiant Shim Cache ParserPythonCódigo no GitHubLer o formato, escrever análise à medida
Eric Zimmerman AppCompatCacheParserC# / .NETBinário únicoTrabalho de caso. Mais fiável para relatórios de produção.
Velociraptor Windows.Registry.AppCompatCacheVQLServidor VelociraptorRecolha viva à escala de frota
Shimcache Parser (esta ferramenta)Rust → WebAssemblySó no browser, sem instalaçãoTriagem rápida sem setup, os dados não saem da máquina

Quando recorrer a qual

AppCompatCacheParser de Eric Zimmerman

A norma de facto para análise offline. Cobre todas as variantes do Windows do XP ao Windows 11, reproduz automaticamente os logs de transação SYSTEM, e produz CSV que cai limpo no Timeline Explorer. Se a sua saída vai para um relatório final, é o que os revisores esperam que tenha usado.

AppCompatCacheParser.exe -f SYSTEM --csv .

Ressalvas: binário só para Windows, precisa de .NET Framework ou Core, não foi pensado para triagem ad-hoc no browser.

Velociraptor

Quando precisa de extrair ShimCache de dezenas ou milhares de hosts, o Velociraptor ganha. O artefacto lê a cache em memória diretamente de endpoints em execução, que é a mesma vista que o OS teria descarregado no shutdown, mas sem esperar pelo shutdown. Veja extrair a ShimCache de um dump de memória para a razão.

Ressalvas: requer infraestrutura Velociraptor. Excesso para análise pontual.

Shim Cache Parser da Mandiant

O proof-of-concept Python original. Menos polido do que a ferramenta do EZ, mas útil quando quer ler o código para perceber exatamente como o formato é descodificado, ou para fazer scripting de análise à volta dele. A saída é texto simples; integre-a com outros pipelines Python.

python ShimCacheParser.py -t -h /path/to/SYSTEM

Ressalvas: requer Python 2.x ou um fork de compatibilidade. A saída CSV / JSON é menos polida do que a do EZ.

Este Shimcache Parser

Existe para dois casos que os outros não cobrem bem:

  1. Triagem sem instalação. Abre a página, larga uma hive, vê entradas. Útil quando está num host sem ferramentas DFIR instaladas, ou a analisar num portátil ou máquina emprestada.
  2. Análise sensível à confiança. A hive é analisada inteiramente no seu browser via WebAssembly. O ficheiro nunca sai da página, nunca chega a um servidor, nunca aparece em log algum. Isto importa quando a hive pertence a um cliente ou caso em que o upload não é aceitável.

Compromissos: sem interface de linha de comandos, sem ganchos de automação. Use para triagem conduzida por humanos, não para pipelines. Para pipelines, a ferramenta do EZ é a resposta certa.

Validação cruzada quando os parsers discordam

O formato binário não perdoa. A referência da disposição Windows 10/11 mostra porque é que um único offset mal contado pode cascatear pelo resto do blob. Na prática, os parsers concordam normalmente, mas hives do mundo real entregam por vezes dados ligeiramente fora da especificação, e os parsers discordam em:

  • Deteção de bitness em hives Win7. O cabeçalho não diz inequivocamente x86 vs x64, portanto os parsers escolhem heuristicamente. Um par de ferramentas a produzir caminhos diferentes na mesma hive é o sinal.
  • Normalização de caminhos. Escapamento de backslashes, case da letra de unidade, marcadores \??\ iniciais. Diferentes parsers normalizam de forma diferente.
  • Entradas vazias ou placeholder. Algumas ferramentas emitem linhas em branco para slots não utilizados; outras saltam-nas.

Quando importa, corra dois parsers e faça diff. As combinações a que recorro:

  • EZ + esta ferramenta para checagem cruzada rápida.
  • EZ + Mandiant para uma sanidade "Python vs C#".
  • EZ + Velociraptor para "memória ao vivo vs hive em disco".

Armadilhas comuns

  • Não esqueça os logs de transação. SYSTEM.LOG1 e SYSTEM.LOG2 transportam escritas pendentes; sem eles está a ler uma hive desatualizada. A ferramenta do EZ reproduz-nos automaticamente. Algumas outras não. Veja adquirir uma hive SYSTEM.
  • Não compare ShimCache em disco e em memória diretamente. São fontes de verdade diferentes. A de disco só tem o estado do último clean shutdown. A de memória tem a sessão atual. Trate-as como complementares.
  • Não assuma execução. Nenhum parser pode resolver isto. A cache regista exame, não execução.

Leitura adicional

Artigos relacionados