UserAssist¶
O que é o UserAssist¶
O Windows Explorer conta os programas e atalhos que um usuário inicia a partir do shell do Explorer: o
menu Iniciar, a barra de tarefas, a área de trabalho e cliques duplos em pastas. Ele guarda as contagens no
NTUSER.DAT do usuário. Cada item tem:
- uma contagem de execuções;
- no Windows 7 e posteriores, quantas vezes e por quanto tempo (em milissegundos) ele teve o foco;
- quando foi executado pela última vez.
Os nomes dos valores são codificados em ROT13. O nome de um programa geralmente começa com o GUID de uma pasta conhecida
({1AC14E77-…} é System32).
O UserAssist mostra o que um usuário específico iniciou interativamente, algo que a maioria das outras evidências de execução não atribui a um usuário.
Melhor conclusão: o usuário iniciou este programa ou atalho pelo Explorer, esta quantidade de vezes, a última neste horário. Programas iniciados de outra forma (uma linha de comando, um serviço, uma tarefa agendada, outro programa) não são contados.
Localização¶
C:\Users\<user>\NTUSER.DAT
Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist\{GUID}\Count
| GUID | Contém |
|---|---|
{CEBFF5CD-ACE2-4F4F-9178-9926F41749EA} |
Programas (executable), Windows 7 e posteriores |
{F4E57C4B-2036-45F0-A9AB-443BCFE33D9F} |
Atalhos (shortcut), Windows 7 e posteriores |
{75048700-EF1F-11D0-9888-006097DEACF9} |
Programas e atalhos (active_desktop), Windows 2000 a Vista |
{5E6AB780-7743-11CF-A12B-00AA004AE837} |
Barra de ferramentas da Internet (internet_toolbar), Windows 2000 a Vista |
Outros GUIDs são relatados como other. Colete o NTUSER.DAT com seus logs de transação para todos os
perfis, e o hive SOFTWARE do sistema, que fornece o SID do usuário.
Cuidados para o analista¶
- Novos perfis são pré-preenchidos. No Windows 7 e posteriores, um novo perfil começa com itens padrão (Introdução, Calculadora, Paint, Notas Autoadesivas, …). Suas contagens de execuções diminuem a partir de 14, e todos compartilham um único horário de última execução, próximo de quando o perfil foi criado. Eles não são atividade do usuário.
- A versão 3 conta a partir de 5 (Windows 2000 a Vista). A contagem armazenada começa em 5, então 5 é
subtraído dela. Uma contagem armazenada abaixo de 5 é relatada em
Problems. - Os caminhos usam o caminho padrão da pasta conhecida (
%windir%\system32,%ProgramFiles%,%APPDATA%\…). Uma pasta redirecionada para outro lugar ainda mostra seu padrão. IDs de aplicativos (Microsoft.Windows.Explorer,Microsoft.WindowsNotepad_8wekyb3d8bbwe!App) e itens do Painel de Controle (::{…}) não têm caminho. - O rastreamento pode ser desativado com
Explorer\AdvancedStart_TrackProgs= 0,Policies\ExplorerNoInstrumentation= 1 ouUserAssist\SettingsNoLog= 1. O resumo lista os hives em que ele está desativado. Um UserAssist vazio ou ausente em um perfil ativo pode indicar antiforense. NoEncrypt= 1 faz o Windows gravar os nomes sem ROT13. Esses nomes são decodificados incorretamente, então cada item desse hive informa isso emProblems(e em stderr quando os registros vão para stdout).- O horário da última execução e as contagens são mantidos por item, mas o horário da última gravação da chave
(
KeyLastWrittenUTC) é apenas o horário da atualização mais recente de qualquer item. - As contagens de execuções podem ser 0 para itens que apenas tiveram o foco. As contagens e os tempos de foco existem apenas na versão 5 (Windows 7 e posteriores).
Analisar com o Juntei¶
Usage: juntei parse-registry user-assist <INPUT> [OPTIONS]
Input:
-d, --directory <DIR> Recursively find NTUSER.DAT hives
-f, --file <FILE> Parse one NTUSER.DAT
--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 user-assist -d evidence/ -o userassist.csv
juntei parse-registry user-assist -f NTUSER.DAT -t jsonl \
| jq 'select(.Path? // "" | test("\\\\(Users|ProgramData|Temp)\\\\"; "i"))'
O resumo lista os itens executados por último (os mais recentes primeiro) com seus usuários, e os hives em que o UserAssist está desativado.
Campos de saída¶
| Campo | Interpretação |
|---|---|
Host, User, UserSID, SourcePath |
Host, o nome da pasta do perfil, o SID do usuário a partir do ProfileList do sistema (com o hive SOFTWARE do sistema) e o hive. |
GUID, Kind |
A chave {GUID} e o que ela contém (executable, shortcut, active_desktop, internet_toolbar, other). |
NameRot13, Name |
O nome do valor conforme armazenado, e decodificado. |
Path |
O nome decodificado como caminho, com o GUID de uma pasta conhecida substituído por seu caminho padrão; vazio para IDs de aplicativos e itens do shell. |
RunCount |
Quantas vezes foi iniciado pelo Explorer (versão 3: a contagem armazenada menos 5). |
FocusCount, FocusTimeMs |
Quantas vezes teve o foco, e por quanto tempo em milissegundos (versão 5). |
LastRunUTC |
Quando foi iniciado pela última vez. Vazio quando o Windows armazenou 0, ou quando o horário armazenado ultrapassa 9999 (nesse caso Problems o informa e DataRaw mantém os bytes). |
Format, SessionID |
O layout dos dados (5: 72 bytes, 3: 16 bytes) e o número da sessão em que foi gravado pela última vez. |
KeyLastWrittenUTC |
A última gravação da chave Count: a atualização mais recente de qualquer um de seus itens. |
DataRaw |
Os bytes do valor (hex), quando não são decodificados. |
TransactionLogStatus, LogsApplied |
Contexto de recuperação do Registro. |
Problems |
Dados de tamanho desconhecido, um tamanho que diverge do Version da chave, uma contagem da versão 3 abaixo de 5, uma última execução além de 9999, NoEncrypt. |
Estratégia de investigação¶
- Ordene por
LastRunUTCe separe os itens pré-preenchidos: eles compartilham um único horário, próximo da criação do perfil. - Procure programas em locais graváveis pelo usuário (
%USERPROFILE%,Downloads,Temp,ProgramData), unidades removíveis e caminhos de rede, e ferramentas de administração e de acesso remoto. - Correlacione com Prefetch (execução com horários de execução), Amcache e ShimCache (presença),
Jump Lists e arquivos LNK (o que foi aberto com eles) e o
$MFTpara os arquivos dos programas. - Verifique os hives em que o rastreamento está desativado, e os perfis cujo UserAssist está vazio, em busca de limpeza.
- Use
parse-registry read --recover-deletedpara valores do UserAssist excluídos.