Onde está a ShimCache armazenada e quando é escrita?

4 min de leitura

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á.

ShimCache: escritas em memória vs tempo de flush em disco

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:

  1. Lê HKLM\SYSTEM\Select\Current (um DWORD, normalmente 1 ou 2).
  2. Percorre o valor ControlSetXXX\Control\Session Manager\AppCompatCache\AppCompatCache correspondente.
  3. Recorre a varrer ambos ControlSet001 e ControlSet002 se Select\Current for 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.exe ou RegRipper lê o valor previamente persistido, não a cache que está atualmente a ser construída em memória.
  • O plugin windows.shimcachemem do 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.LOG1 e SYSTEM.LOG2 antes de analisar.

Leitura adicional

Artigos relacionados