Contas locais SAM¶
O que o SAM contém¶
O hive do Security Account Manager (SAM) armazena os registros das contas locais. O Juntei decodifica os
nomes das contas, RIDs, campos de perfil/comentário, flags de controle da conta, carimbos de data/hora de último logon/senha, contadores,
dicas de senha, vínculo com conta Microsoft, caminhos de perfil e se o Windows oculta a conta
da interface de entrada.
Isso é útil para encontrar administradores locais recém-criados, contas inativas que foram habilitadas, alterações de senha, contas ocultas e contas preparadas para movimentação lateral.
Melhor conclusão: o SAM local representava a conta com o estado registrado. Ele não é um histórico completo de autenticação e não descreve contas de domínio.
Localização e coleta¶
C:\Windows\System32\config\SAM
C:\Windows\System32\config\SAM.LOG1
C:\Windows\System32\config\SAM.LOG2
Colete o hive e os logs com privilégios/acesso bruto suficientes. A identidade do host pode ser enriquecida a partir
do hive SYSTEM correspondente na coleta.
Cuidados para o analista¶
- Este comando analisa contas locais, não usuários de domínio do Active Directory.
- O Juntei, intencionalmente, não extrai hashes de senha.
- O RID 500 é a conta interna Administrator, mesmo que tenha sido renomeada; o nome, sozinho, não basta.
LastLogone os contadores são estado do Registro, não uma trilha de auditoria completa por sessão.HiddenFromLogonUIoculta uma conta da tela de entrada; não desabilita a conta.- As contas internas
DefaultAccounteWDAGUtilityAccountpodem estar ocultas legitimamente. - Flags de conta nulos, devido a um valor
Fdanificado/ausente, não devem ser interpretados como conta habilitada. NamesKeyLastWrittenUTCdá uma aproximação do contexto de registro do nome da conta, mas não é um horário de criação garantido.
Analisar com o Juntei¶
Usage: juntei parse-registry sam <INPUT> [OPTIONS]
Input:
-d, --directory <DIR> Recursively find SAM hives
-f, --file <FILE> Parse one SAM hive
--log1/--log2 Supply transaction logs explicitly
--no-logs Do not replay logs
Filtering:
--rid <RID> Parse one decimal RID (example: 500)
Output:
-o, --output <FILE> Save records
-t, --output-type <TYPE> csv, json, or jsonl
juntei parse-registry sam -f SAM -o accounts.csv
juntei parse-registry sam -f SAM --rid 500 -t jsonl | jq .
juntei parse-registry sam -d evidence/ -t jsonl \
| jq 'select(.HiddenFromLogonUi == true or (.AccountFlags | index("disabled") | not))'
Campos de saída¶
| Campo | Interpretação |
|---|---|
Host, SourcePath |
Contexto do host e o hive SAM exato. |
RID |
Identificador relativo. Forte ponto de pivô para a identidade da conta; 500 é a conta interna Administrator. |
User |
Nome atual da conta local. Pode ser renomeado; correlacione pelo RID. |
FullName, Comment, UserComment |
Texto descritivo; controlável pelo atacante e útil para analisar disfarces (masquerading). |
AccountFlags |
Estados decodificados, como desabilitada, bloqueada, senha não exigida, conta normal, senha nunca expira. |
AccountFlagsValue |
Flags numéricos brutos para validação e para bits não suportados. |
CountryCode, CodePage |
Metadados de localidade/página de código da conta; geralmente contexto, não atribuição. |
LastLogonUTC, LastLogonWholeSecondsUTC |
O mesmo estado de último logon, com precisão total e em segundos inteiros para compatibilidade. Não é um histórico completo. |
PasswordLastSetUTC |
Horário registrado da alteração de senha. Investigue valores inesperadamente recentes/antigos. |
AccountExpirationUTC |
Expiração configurada, quando finita. Nulo pode significar nunca/não definida. |
LastFailedLogonUTC |
Último logon local com falha registrado no estado do SAM; confirme com os eventos de Security. |
FailedLogonCount, LogonCount |
Contadores cumulativos/de estado com comportamento de atualização específico do Windows; use como contexto, não como contagem exata de eventos. |
PasswordHint |
Dica sensível fornecida pelo usuário; pode expor padrões de senha. Trate-a adequadamente. |
InternetUserName |
Identidade da conta Microsoft vinculada, quando presente. |
HiddenFromLogonUI |
Estado de ocultação na interface. Analise RIDs altos/contas personalizadas inesperadas; não significa desabilitada. |
HomeDirectory, HomeDrive, ProfilePath, LogonScript |
Configuração de ambiente/logon da conta local; scripts ou caminhos UNC incomuns podem indicar persistência. |
KeyLastWrittenUTC |
Horário de alteração da chave da conta (RID). Em nível de chave, não específico de um campo. |
NamesKeyLastWrittenUTC |
Horário de alteração da chave de mapeamento do nome de usuário; aproximação útil do ciclo de vida da conta. |
LastLogonFiletime, PasswordLastSetFiletime, AccountExpirationFiletime, LastFailedLogonFiletime |
Valores FILETIME brutos de 64 bits mantidos para validação e para o tratamento de valores sentinela especiais. |
TransactionLogStatus, LogsApplied |
Contexto da reprodução do Registro. |
Problems |
Divergência entre F/V/Names, entradas ausentes, deslocamentos malformados ou danos na decodificação. |
Estratégia de investigação¶
- Compare RID, nome, flags, caminho do perfil e
NamesKeyLastWrittenUTCcom a linha de base do host. - Analise contas habilitadas com RID 1000 ou maior, com senha não exigida, que nunca expiram, ocultas ou alteradas recentemente.
- Correlacione com os eventos 4720/4722/4724/4732 de Security, eventos de logon, criação de perfis e atividade remota.
- Pesquise o histórico de recuperação do Registro se uma conta foi removida antes da coleta.
- Diferencie contas legítimas de provisionamento/padrão de contas interativas criadas por atacantes.