Compatibilidade de aplicativos¶
O que o Windows mantém¶
Além do ShimCache (parse-registry shimcache) e do Amcache (parse-registry amcache),
os recursos de compatibilidade de aplicativos do Windows mantêm os seguintes dados em
Microsoft\Windows NT\CurrentVersion\AppCompatFlags:
| Fonte | Hive e chave | O que mostra |
|---|---|---|
layers |
SOFTWARE (e Wow6432Node) e NTUSER.DAT Layers |
Programas configurados para executar com camadas de compatibilidade: RUNASADMIN (sempre como administrador), WIN7RTM, HIGHDPIAWARE, … |
pca_store |
NTUSER.DAT Compatibility Assistant\Store (Windows 8 e posteriores) |
Programas que o Assistente de Compatibilidade de Programas viu o usuário executar |
pca_persisted |
NTUSER.DAT Compatibility Assistant\Persisted (Windows 7) |
O mesmo, no Windows 7 |
cit_module |
SOFTWARE CIT\Module\<module> |
Programas que carregaram um módulo rastreado e quando o fizeram pela última vez |
cit_system |
SOFTWARE CIT\System (do Windows 7 às primeiras versões do Windows 10) |
Caminhos de programas e linhas de comando nos bancos de dados CIT compactados |
installed_sdb |
SOFTWARE InstalledSDB\{GUID} |
Bancos de dados de shim personalizados instalados com sdbinst: arquivo, descrição, horário de instalação |
custom_sdb |
SOFTWARE Custom\<program> |
Os bancos de dados de shim personalizados aplicados a cada programa, com seus horários de instalação |
Melhor conclusão: camadas e bancos de dados de shim são configurações que alteram a forma como um programa é executado; as entradas do Assistente de Compatibilidade de Programas e do CIT mostram que um programa foi executado (ou carregou um módulo) como este usuário ou neste sistema.
Bancos de dados de shim personalizados são uma técnica de persistência e injeção (MITRE ATT&CK T1546.011): um shim pode carregar uma DLL em um programa ou iniciar outro sempre que o programa é executado.
Localização¶
C:\Windows\System32\config\SOFTWARE
Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers <program> = <layers>
Microsoft\Windows NT\CurrentVersion\AppCompatFlags\CIT\Module\<module> <program> = FILETIME
Microsoft\Windows NT\CurrentVersion\AppCompatFlags\CIT\System <id> = compressed database
Microsoft\Windows NT\CurrentVersion\AppCompatFlags\InstalledSDB\{GUID} DatabasePath, …
Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Custom\<program.exe> {GUID}.sdb = FILETIME
C:\Users\<user>\NTUSER.DAT
Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers
Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Compatibility Assistant\Store
Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Compatibility Assistant\Persisted
Colete o SOFTWARE, todos os NTUSER.DAT e seus logs de transação, além dos arquivos .sdb cujos caminhos
os bancos de dados de shim nomeiam (geralmente C:\Windows\AppPatch\Custom\).
Cuidados para o analista¶
-
A expansão do CIT é limitada. Valores que declaram mais de 64 MiB descompactados são mantidos como bytes brutos, com um diagnóstico. Compactação malformada e divergências de tamanho são relatadas.
-
Não há horário de execução nas entradas do Assistente de Compatibilidade de Programas. Os dados de
Store(SACP, mantidos emDataRaw) têm um horário, mas no Windows 8.1, 10 e 11 ele é o mesmo para todos os programas de um hive, assim como em outros sistemas: não é o momento em que o programa foi executado. Somente a última gravação da chaveStoredata a alteração mais recente. - Programas em mídia removível são nomeados
SIGN.MEDIA=<id> <path>:Pathé o caminho na mídia, eDetailscontém o ID da mídia. - Os bancos de dados CIT são compactados com LZNT1 e sua estrutura não é documentada publicamente: o Juntei lista os caminhos de programas e as linhas de comando encontrados em cada um, uma vez por banco de dados, sem contagens nem horários. Uma linha de comando é um registro próprio, não vinculado ao seu programa. O Windows 10 e posteriores mantêm pouca coisa aqui.
- Bancos de dados de shim. Verifique todos os registros
custom_sdbeinstalled_sdb: softwares legítimos raramente instalam um. O próprio arquivo.sdbinforma o que o shim faz. - Camadas definidas por um usuário se aplicam somente a esse usuário; as do
SOFTWARE, a todos.RUNASADMINfaz um programa solicitar elevação toda vez.
Analisar com o Juntei¶
Usage: juntei parse-registry app-compat <INPUT> [OPTIONS]
Input:
-d, --directory <DIR> Recursively find SOFTWARE and NTUSER.DAT hives
-f, --file <FILE> Parse one SOFTWARE or NTUSER.DAT hive
--log1/--log2 Supply transaction logs explicitly
--no-logs Do not replay logs
Output:
-o, --output <FILE> Save records
-t, --output-type <TYPE> csv, json, or jsonl
juntei parse-registry app-compat -d evidence/ -o appcompat.csv
juntei parse-registry app-compat -d evidence/ -t jsonl \
| jq 'select(.Source == "installed_sdb" or .Source == "custom_sdb")'
O resumo lista os bancos de dados de shim personalizados, os programas com camadas e os últimos usos dos módulos CIT.
Campos de saída¶
| Campo | Interpretação |
|---|---|
Host, SourcePath, HiveType |
Host, arquivo do hive e SOFTWARE ou NTUSER.DAT. |
User, UserSID |
Nome da pasta de perfil de um hive de usuário e seu SID obtido do ProfileList do sistema. |
Source, Scope |
layers, pca_store, pca_persisted, cit_module, cit_system, installed_sdb, custom_sdb; machine ou user. |
Path |
O programa (o nome do valor), um caminho ou linha de comando em um banco de dados CIT ou o programa ao qual um banco de dados de shim se aplica. |
Layers |
As camadas de compatibilidade, como foram gravadas (~ RUNASADMIN). |
LastSeenUTC |
Quando um programa carregou um módulo CIT pela última vez. |
SdbGUID, SdbPath, SdbInstalledUTC |
GUID, arquivo e horário de instalação de um banco de dados de shim. |
Details |
Nome de um módulo CIT, nome do valor de um banco de dados CIT, ID da mídia removível de um programa (SignMedia), DatabaseDescription e DatabaseType de um banco de dados de shim. |
KeyPath, KeyLastWrittenUTC, ValueName, WOW64 |
De onde vem o registro, quando essa chave foi alterada pela última vez e se está sob Wow6432Node. |
DataRaw |
Os dados SACP do valor Store, ou dados que não são o que deveriam ser (hex). |
TransactionLogStatus, LogsApplied |
Contexto de recuperação do Registro. |
Problems |
Dados que não puderam ser decodificados ou lidos. |
Estratégia de investigação¶
- Revise todos os bancos de dados de shim personalizados: o arquivo
.sdb, o horário de instalação e os programas aos quais se aplicam; correlacione comsdbinst.exeno Prefetch, no Amcache e nos eventos de criação de processos. - Procure, entre as entradas do Assistente de Compatibilidade de Programas, programas em pastas graváveis pelo usuário e programas executados a partir de mídia removível.
- Verifique
RUNASADMINe outras camadas em programas incomuns. - Correlacione com ShimCache, Amcache, BAM, Prefetch e UserAssist para obter os horários de execução.