Quem passa tempo na forense de Windows acaba decorando a bitmask de razão do USN. É um campo de 32 bits que o NTFS define em cada registro do journal para resumir o que acabou de mudar em um arquivo. Os bits não dizem tudo — são aditivos, não exclusivos — mas, lidos juntos, dão um quadro notavelmente preciso do ciclo de vida.
Os bits
| Flag | Hex | O que significa na prática |
|---|---|---|
DataOverwrite | 0x00000001 | Uma região do fluxo de dados principal foi sobrescrita |
DataExtend | 0x00000002 | O fluxo de dados principal cresceu |
DataTruncation | 0x00000004 | O fluxo de dados principal encolheu |
NamedDataOverwrite / Extend / Truncation | 0x10 / 0x20 / 0x40 | O mesmo, mas em um fluxo alternativo |
FileCreate | 0x00000100 | Um novo arquivo ou diretório foi criado |
FileDelete | 0x00000200 | O arquivo saiu do espaço de nomes |
EaChange | 0x00000400 | Atributos estendidos modificados |
SecurityChange | 0x00000800 | ACL/proprietário modificados |
RenameOldName | 0x00001000 | Metade «antes» de uma renomeação |
RenameNewName | 0x00002000 | Metade «depois» de uma renomeação |
IndexableChange | 0x00004000 | Flag indexável alternada |
BasicInfoChange | 0x00008000 | Timestamps, atributos ou compressão modificados |
HardLinkChange | 0x00010000 | Hard link adicionado ou removido |
CompressionChange | 0x00020000 | Compressão NTFS alternada |
EncryptionChange | 0x00040000 | Estado EFS modificado |
ObjectIdChange | 0x00080000 | Object ID definido ou limpo |
ReparsePointChange | 0x00100000 | Reparse point modificado |
StreamChange | 0x00200000 | Fluxo alternativo adicionado/renomeado/removido |
Close | 0x80000000 | O handle que produziu a mudança foi fechado |
Close é especial: o NTFS coalesce operações sucessivas sob o mesmo handle e só emite o registro final com Close quando o handle vai embora. Um registro sem Close é o sistema escoando estado intermediário — útil, mas o registro com Close é o resumo autoritativo.
Padrões que você verá na natureza
Alguns padrões ocorrem tantas vezes que você deveria reconhecê-los de imediato:
- Novo arquivo escrito por uma aplicação.
FileCreate | DataExtend→DataExtend | Close→BasicInfoChange | Close. O último é o arquivo recebendo seu mtime no fechamento. - Renomeação entre diretórios. Dois registros no mesmo
FileReferenceNumber:RenameOldName | Closee depoisRenameNewName | Close. A referência pai difere entre os dois — é assim que você reconstrói o movimento. - Salvar-por-renomear atômico. Muitos editores escrevem em um arquivo temporário e depois renomeiam sobre o alvo. Você vê
FileCreateno temp,FileDelete | Closeno original eRenameNewName | Closeno temp. - Ransomware cifrar-depois-renomear. Registros
DataOverwritecobrindo megabytes, seguidos deRenameNewName | Closecom a nova extensão. A contagem e o ritmo dosDataOverwritesão frequentemente onde você primeiro percebe uma amostra em disco. - Quarentena de antivírus.
FileDelete | Closeimediatamente após umFileCreaterecente, tudo sob a mesma MFT entry. O journal fornece a prova de que o AV tocou o arquivo mesmo depois que o arquivo em si sumiu.
O que os bits não dirão
A bitmask de razão fala sobre o arquivo, não sobre o ator. Sem usuário, sem PID, sem linha de comando. Combine o journal com Security.evtx (4663 acesso a objeto) ou com Microsoft-Windows-Sysmon/Operational para anexar um ator a cada operação. O USN dá o quando e o que; outros logs dão o quem.
Receita prática de leitura
Ao abrir um journal parseado:
- Filtre
FileCreatepara ver o que é genuinamente novo na janela temporal. - Procure
RenameNewNamepara capturar movimentação e padrões de «salvar como». - Plote a contagem de
DataExtendao longo do tempo — escritas em massa (backups, criptografia, staging de exfiltração) saltam aos olhos. - Leia primeiro os registros com
Closeativo; trate os intermediários como evidência de apoio.
A app web deste site permite filtrar por qualquer combinação de razões, o que torna os passos 1–3 um exercício de um clique.