Diário USN ($UsnJrnl:$J)¶
O que é o Diário USN¶
O NTFS registra as alterações em arquivos e diretórios no diário de alterações USN (Update Sequence Number). Um registro pode descrever criação, extensão/sobrescrita de dados, alterações de atributos ou de segurança, renomeação, fechamento e exclusão. Ele armazena uma referência de arquivo, a referência do pai, o nome, os motivos, os atributos, o carimbo de data/hora e um USN monotonicamente crescente.
O diário é excelente para reconstruir uma rajada de operações de arquivo de um atacante, especialmente quando os arquivos foram excluídos. Ele registra que os metadados/o conteúdo mudaram, não os bytes alterados.
Melhor conclusão: o NTFS registrou os motivos de alteração indicados para
o arquivo referenciado no carimbo de data/hora. Os motivos costumam se acumular até um registro CLOSE.
Localização e coleta¶
$J é um fluxo nomeado de metadados do NTFS. Colete-o com uma ferramenta forense com acesso bruto ao disco. Colete também o
$MFT do mesmo volume, porque os registros USN armazenam referências de arquivo do pai, e não caminhos completos.
Cuidados para o analista¶
- O diário é circular e tem tamanho limitado. Os registros antigos são sobrescritos.
FILE_DELETEindica que o NTFS processou a exclusão; o conteúdo ainda pode ser recuperável em outro lugar.- Um motivo como
DATA_OVERWRITEnão revela os bytes, o processo nem o usuário responsável. - Vários motivos podem ser combinados em um único registro;
CLOSEmuitas vezes marca o fim das alterações acumuladas. - Os caminhos são reconstruídos. Os diretórios pais podem ter sido renomeados, excluídos ou reutilizados.
- Os números de sequência das referências de arquivo importam. O número da entrada, sozinho, pode levar à geração errada.
- A recuperação por carving pode recuperar registros válidos sem o contexto original do diário; relate essa distinção.
Analisar com o Juntei¶
Usage: juntei parse-ntfs usn-journal <INPUT> [OPTIONS]
Input:
-d, --directory <DIR> Recursively find $J files
-f, --file <FILE> Parse one $J, or any file with --carve
-m, --mft <FILE> Use the matching volume's $MFT for paths
--carve Search a disk image/unallocated file for records
Output:
-o, --output <PATH> Save records
-t, --output-type <TYPE> csv, json, or jsonl
juntei parse-ntfs usn-journal -f 'C/$Extend/$J' -m 'C/$MFT' -o usn.csv
juntei parse-ntfs usn-journal -d evidence/ -o usn-jsonl -t jsonl
juntei parse-ntfs usn-journal -f unallocated.bin --carve -o carved-usn.csv
Campos de saída CSV¶
| Campo | Interpretação |
|---|---|
Name |
Nome do arquivo/diretório armazenado neste registro USN. Não é um caminho completo. |
Extension |
Extensão extraída de Name por conveniência; não a use como tipo de conteúdo confiável. |
EntryNumber, SequenceNumber |
Referência NTFS do arquivo. Use ambos para identificar a geração do registro. |
ParentEntryNumber, ParentSequenceNumber |
Referência NTFS do diretório pai no momento da alteração. |
ParentPath |
Caminho do pai reconstruído pelo Juntei levando em conta o tempo. Marcadores de desconhecido significam que a ascendência não pôde ser resolvida. |
UpdateSequenceNumber |
Valor de ordenação USN. Útil para uma ordenação estável e para pivôs com Amcache/MFT. |
UpdateTimestamp |
Carimbo de data/hora armazenado em registros V2/V3. Trate os carimbos de data/hora de contexto recuperado por carving com a mesma validação de qualquer registro. |
UpdateReasons |
Um ou mais flags de alteração nomeados, unidos por |. Interprete as combinações e o CLOSE em conjunto. |
FileAttributes |
Atributos NTFS registrados no momento da alteração; os bits desconhecidos permanecem em hexadecimal. |
OffsetToData |
Deslocamento em bytes na entrada. Essencial para validação e para registros recuperados por carving. |
SourceFile |
Diário/imagem de entrada; distingue hosts e volumes. |
SourceInfo |
Flags de origem que descrevem como a alteração entrou no diário. Geralmente contextual, não atribuição. |
SecurityID |
Índice do identificador de segurança NTFS do registro, não um SID de usuário. |
Version |
Versão do registro USN. O Juntei grava V2/V3 em CSV; o JSON mantém as extensões (extents) de rastreamento de intervalos do V4. |
JSON/JSONL representam corretamente as referências V3 de 128 bits e preservam os registros de rastreamento de intervalos do V4 e suas extensões. Use-os quando os campos de baixo nível específicos de cada versão forem importantes.
Estratégia de investigação¶
- Filtre por horário, nome, extensão, caminho do pai ou referência de arquivo.
- Ordene por
UpdateSequenceNumber, além do horário, para ver a ordem exata no diário. - Associe
RENAME_OLD_NAMEaRENAME_NEW_NAMEpara movimentações/renomeações. - Use o
$MFTpara validar o estado dos registros, caminhos, tamanhos e carimbos de data/hora. - Correlacione com a atribuição de processos a partir de logs de eventos, EDR, Prefetch, serviços/tarefas ou Defender.