TL;DR. A ShimCache reside em HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\AppCompatCache\AppCompatCache. O Windows reconstrói-a em memória a cada sessão e descarrega-a para a hive SYSTEM apenas num clean shutdown. Reinícios forçados podem deitar fora entradas recentes por completo. Reproduza SYSTEM.LOG1 e SYSTEM.LOG2 antes de confiar no que lê.
A maior parte das desventuras com a ShimCache remete à mesma causa-raiz: o analista achou que a cache era atualizada como um ficheiro de log. Não é. A cache vive em memória enquanto o sistema corre, e a cópia em disco apenas reflete o estado no clean shutdown anterior. Acerte mal aqui e escreve um relatório que diz que o host está limpo quando não está.
O caminho de registo
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\AppCompatCache\AppCompatCache
O AppCompatCache final é um valor, não uma subchave. Os dados são um único blob binário cujo schema varia consoante a versão do Windows. XP, 7, 8, 8.1 e a família 10/11 usam todos disposições diferentes. O passo a passo do formato binário detalha o schema moderno Windows 10/11.
Offline, extraia a hive SYSTEM (um dos ficheiros em C:\Windows\System32\config\) e aponte-lhe um parser. Traga também SYSTEM.LOG1 e SYSTEM.LOG2. O Shimcache Parser lê a hive SYSTEM no browser, sem upload, mas aceita apenas esse ficheiro e não reproduz os logs. Se a hive estiver dirty, reproduza primeiro .LOG1 e .LOG2 com o rla.exe de Eric Zimmerman (ou carregue-a no Registry Explorer e guarde a hive limpa) e depois analise o resultado.
A armadilha do ControlSet
O Windows na verdade mantém vários ControlSets, tipicamente ControlSet001 e ControlSet002. Em qualquer momento exatamente um está ativo, indicado por HKLM\SYSTEM\Select\Current. CurrentControlSet é um alias em runtime para aquele que estiver ativo. Num sistema vivo resolve sempre corretamente; offline, tem de fazer o trabalho à mão.
Um parser defensável:
- Lê
HKLM\SYSTEM\Select\Current(um DWORD, normalmente 1 ou 2). - Percorre o valor
ControlSetXXX\Control\Session Manager\AppCompatCache\AppCompatCachecorrespondente. - Recorre a varrer ambos
ControlSet001eControlSet002seSelect\Currentfor ilegível.
Esta ferramenta, o AppCompatCacheParser de Eric Zimmerman e o Shim Cache Parser da Mandiant tratam dessa resolução automaticamente. Faça o seu próprio por sua conta e risco.
Quando o Windows escreve de facto
Eis a parte que apanha as pessoas. Enquanto o Windows corre, a ShimCache vive em memória. A cópia em disco só é escrita num clean shutdown. Portanto:
- Um reboot forçado, queda de energia, BSOD, ou morte da VM ao nível do hipervisor destrói todas as entradas que ainda não tinham sido persistidas.
- Uma triagem em sistema vivo com
reg.exeou RegRipper lê o valor previamente persistido, não a cache que está atualmente a ser construída em memória. - O plugin
windows.shimcachememdo Volatility 3 contra um dump de RAM recupera a cache atualmente em memória. É a única forma de obter as entradas da sessão ativa de um host que não tenha sido cleanmente desligado.
Se chegar a uma máquina comprometida que tenha sido reiniciada à força, a hive em disco guarda a cache anterior ao incidente. O que o atacante correu na sessão ativa desapareceu, a menos que também tenha capturado memória. A história corroborativa terá normalmente de vir da AmCache, que escreve continuamente e sobrevive ao mesmo reboot.
Os logs de transação
SYSTEM.LOG1 e SYSTEM.LOG2 guardam escritas de registo que ainda não foram fundidas na hive principal. Qualquer parser robusto reproduz esses logs antes de ler a ShimCache. Se copiou apenas SYSTEM e ignorou os logs, está a ler uma vista desatualizada. Este é, de longe, o erro de aquisição mais comum. O guia de aquisição percorre as formas seguras de capturar os três.
Lista de verificação rápida
- Valor da ShimCache:
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\AppCompatCache\AppCompatCache. - ControlSet ativo selecionado por
HKLM\SYSTEM\Select\Current. - Armazenada em memória, descarregada apenas em clean shutdown. Corrobore com a AmCache para atividade recente.
- Reproduza sempre
SYSTEM.LOG1eSYSTEM.LOG2antes de analisar.
Leitura adicional
- Microsoft Learn: Registry hives, referência canónica de ficheiros de hive e ControlSets.
- ShimCacheParser da Mandiant, parser Python original, útil como referência de formato.
- Velociraptor
Windows.Registry.AppCompatCache, lógica de recolha em sistema vivo.