Pular para conteúdo

Análise automática de coletas

O auto-parse é a maneira mais rápida de transformar uma coleta de triagem do Windows com vários computadores em um diretório de análise estruturado. Informe a raiz das evidências e um novo diretório de saída. Ele descobre os sistemas coletados, identifica seus nomes de computador e executa em paralelo todos os analisadores compatíveis do Juntei.

juntei auto-parse -d <EVIDENCE> -o <OUTPUT>

A saída padrão é CSV. Adicione uma linha do tempo JSONL para jq ou para importação em SIEM, mantendo esses resultados CSV:

juntei auto-parse -d <EVIDENCE> -o <OUTPUT> -j <OUTPUT>/timeline.jsonl

Mantenha as árvores de saída e de evidências separadas

O Juntei recusa um diretório de saída que esteja dentro de <EVIDENCE> ou que contenha <EVIDENCE>. Isso impede que os dados gerados sejam redescobertos como evidência e impede que --clobber toque em arquivos da coleta de origem.

Imagens de disco VHDX

Com --vhdx, auto-parse lê VHDX nativamente no Linux, macOS e Windows, usando ys-vhdx-parser. Não exige montagem pelo sistema, FUSE ou privilégios de administrador.

# A directory of images, searched recursively
juntei auto-parse -d /cases/vhdx --vhdx -o parsed
# One image
juntei auto-parse -d host1.vhdx --vhdx -o parsed -j timeline.jsonl

Os parsers precisam de caminhos: o Juntei copia os arquivos que os parsers leem para um espaço temporário privado com buffers limitados: hives do registro e seus logs de transação, arquivos de metadados NTFS, bancos de dados, arquivos de prefetch, atalhos, Jump Lists, arquivos do Outlook e pastas de quarentena do Defender. Qualquer outro arquivo vira um marcador vazio com o horário de modificação original, de modo que diretórios e caminhos aparecem como no disco. O persistence-hunter lê o conteúdo de um marcador a partir da imagem só quando precisa, por exemplo um executável indicado por uma entrada de persistência. Reserve espaço para os arquivos copiados, além dos resultados. Regiões nulas são gravadas como lacunas quando permitido. Nomes, estrutura, hard links e horários de modificação são preservados. Os horários de origem de LNK e Jump Lists vêm dos metadados NTFS originais, nunca dos arquivos temporários. O término normal, mesmo com erros de parser, remove as cópias; uma interrupção forçada pode deixá-las. A origem permanece somente leitura; logs VHDX pendentes são aplicados apenas na memória.

A descoberta de hosts, CSV/JSON/JSONL e -j usam o fluxo habitual. Image em manifest.json identifica a imagem original; EvidenceRoot, o caminho relativo interno. Erros de leitura e nomes inseguros aparecem em ImageErrors e nas linhas com falha de manifest.csv. Resultados legíveis são preservados; entradas incompletas retornam 1. Nomes perigosos ou ambíguos não são renomeados. Streams NTFS nomeados não são extraídos como arquivos adicionais; artefatos coletados como arquivos comuns continuam disponíveis.

O mount separado expõe o sistema de arquivos a outros programas e ainda exige Linux FUSE. auto-parse --vhdx não o utiliza.

A preparação usa por padrão um diretório privado no sistema de arquivos de saída. Use --temp-dir para escolher um diretório existente em outro disco. Os metadados originais ficam separados no volume de saída, permitindo analisar arquivos já legíveis mesmo se o disco de preparação encher. Reserve espaço para cópias e resultados; se o volume de saída estiver cheio, os resultados não podem ser salvos. Ctrl+C interrompe os processos, limpa a área privada e sai com código 130. SIGKILL ou falta de energia ainda podem deixar cópias. Subdiretórios inacessíveis são ignorados na busca; uma raiz de entrada ilegível continua sendo um erro.

O diretório de preparação deve ficar fora do diretório de saída. No Linux e no macOS, SIGTERM e SIGHUP também interrompem os processos de análise e limpam a área de trabalho.

juntei auto-parse --vhdx -d evidence.vhdx -o parsed --temp-dir /large-disk/work

Imagens de disco E01 e Ex01

--e01 lê imagens físicas EWF1 (.E01) e EWF2 (.Ex01) nativamente no Linux, macOS e Windows, sem FUSE, montagem do sistema ou privilégios de administrador. Usa ys-e01-parser e o mesmo processamento NTFS descrito acima.

Informe o primeiro segmento de uma imagem dividida. Mantenha todos os arquivos associados, incluindo .E02, ao lado dele com seus nomes originais. Há suporte para discos inteiros (MBR/GPT) e volumes NTFS individuais. Use --vhdx --e01 para diretórios mistos.

Valem os mesmos requisitos de espaço temporário e metadados de origem. Imagens E01 costumam conter discos inteiros, e todas as imagens são preparadas antes do início da análise, mas só são copiados os arquivos que os parsers leem, normalmente uma pequena parte do espaço usado. As imagens são somente leitura. Lacunas de aquisição e danos encontrados ao abrir ou ler aparecem em ImageErrors e manifest.csv; os resultados legíveis são preservados com código de saída 1. Apenas os dados acessados são verificados, não todos os blocos nem o hash da mídia completa. Arquivos lógicos .L01 e .Lx01 são recusados; não há opção de senha.

O comando separado mount ainda exige Linux FUSE; a análise automática nativa não.

juntei auto-parse --e01 -d evidence -o parsed
juntei auto-parse --e01 -d disk.E01 -o parsed
juntei auto-parse --vhdx --e01 -d evidence -o parsed -j timeline.jsonl

Fuso horário da saída

Por padrão, os carimbos de data/hora analisados ficam em UTC, independentemente do fuso horário local do computador do analista. O UTC usa a forma dos logs de eventos do Windows 2026-10-20T08:46:38.2001668Z: uma data/hora ISO 8601, T entre a data e a hora, e Z para UTC. Os dígitos fracionários disponíveis são preservados. O GeneratedUTC do manifest.json também usa essa forma. O Start time e o End time do console estão no horário local do computador do analista, como 2026-11-04 09:15:02, qualquer que seja o fuso horário da saída.

Escolha um deslocamento fixo de exibição com -Z, --timezone:

juntei auto-parse -d evidence/ -o parsed-jst/ --timezone "+09:00"
juntei auto-parse -d evidence/ -o parsed-offset/ -Z "-01:00"
juntei auto-parse -d evidence/ -o parsed-half-hour/ -Z "+02:30"

Um deslocamento é um valor HH:MM com sinal e dois dígitos (horas 00–23, minutos 00–59). Nomes como JST, valores abreviados como +9 e intervalos inválidos produzem um erro com um exemplo de sintaxe. Omita a opção ou use --timezone "+00:00" para UTC. Um deslocamento fixo não aplica as regras de horário de verão.

A opção se aplica aos carimbos de data/hora analisados nos resultados CSV, JSON e JSONL de cada artefato e à exportação JSONL adicional de -j. Por exemplo, 2026-10-20T08:46:38.2001668Z passa a ser 2026-10-20T17:46:38.2001668+09:00; ambos descrevem o mesmo instante.

Os nomes dos campos permanecem estáveis, incluindo os nomes existentes terminados em UTC. Os valores convertidos trazem explicitamente o deslocamento selecionado. O OutputTimeZone de ambos os manifestos registra o deslocamento de exibição solicitado, enquanto GeneratedUTC continua sendo metadado da execução em UTC. Os logs de cada analisador mantêm os resumos nativos em UTC dos analisadores.

Números brutos de FILETIME/epoch, dicionários de valores do Registro, a configuração de fuso horário da origem, metadados de texto, valores apenas de data e valores de relógio local sem deslocamento conhecido são preservados. O Juntei não adiciona Z a um horário local desconhecido. Os relógios de itens de shell derivados de FAT (Item*UTC em ShellBags/OpenSaveMRU e TargetItems de LNK/Jump Lists) não têm deslocamento registrado; seus rótulos legados UTC ou o sufixo Z exibido não provam que estejam em UTC, por isso a opção de deslocamento os preserva. As colunas CSV que contêm resumos em texto livre mantêm o texto registrado; JSON/JSONL preserva os carimbos de data/hora analisados aninhados como campos estruturados.

Em UTC, a saída existente do analisador é usada diretamente. Um deslocamento explícito diferente de zero adiciona uma passagem de formatação em streaming dentro de cada worker do analisador; ela altera os valores exibidos sem alterar as evidências.

Se um deslocamento levar um carimbo de data/hora para fora dos anos 0000–9999, esse valor mantém seu deslocamento explícito original. Valores com mais de nove dígitos fracionários também permanecem inalterados, em vez de serem arredondados. O Juntei registra um aviso no arquivo *-logs.txt do analisador e converte os demais carimbos de data/hora. Um CSV/JSON malformado ou um erro de saída ainda faz a tarefa falhar e deixa inalterado o arquivo de resultado original afetado.

O que ele descobre

O Juntei procura recursivamente diretórios chamados Windows que contenham um diretório System32, Prefetch ou AppCompat, sem diferenciar maiúsculas de minúsculas. O reconhecimento dos dois últimos também dá suporte a coletas direcionadas que contêm apenas Prefetch ou Amcache. Isso exclui diretórios de perfis de usuário como AppData\Roaming\Microsoft\Windows. Instalações legadas aninhadas, como C:\Windows.old\Windows, são atribuídas ao volume coletado externo, em vez de se tornarem computadores duplicados. A profundidade máxima padrão é 10. Isso abrange caminhos comuns do Velociraptor, como:

<EVIDENCE>/<collection>/uploads/auto/C%3A/Windows

Altere o limite somente quando a coleta estiver aninhada em um nível mais profundo:

juntei auto-parse -d evidence -o parsed --max-depth 15

Para cada sistema descoberto, o nome do computador é escolhido nesta ordem:

  1. hostname no client_info.json do ancestral mais próximo (com seu valor mantido como FQDN no manifesto).
  2. ComputerName em um hive SYSTEM do Registro coletado.
  3. O nome útil mais próximo de um diretório da coleta, ignorando a unidade e a estrutura uploads/auto do Velociraptor e removendo um sufixo como _F.….

Os nomes são ajustados para uso seguro como nomes de diretório. Nomes duplicados recebem um sufixo numérico tanto no diretório de saída quanto no valor Comp, para que sistemas distintos continuem distinguíveis no JSON. O manifesto mantém o nome do host exatamente como foi descoberto em um campo Hostname separado.

Depois de listar os sistemas, o auto-parse exibe uma linha Timezone: logo acima de Parser tasks. Ela mostra o fuso horário de saída selecionado: UTC por padrão, ou um valor como UTC+09:00 quando --timezone "+09:00" é usado. O rótulo é verde e o valor usa a cor de texto padrão do terminal, como os outros valores do resumo. -K, --no-color mantém a linha sem cores. A configuração de fuso horário dos sistemas coletados está disponível nos resultados de Informações do sistema.

Analisadores que ele executa

A falha de um analisador não interrompe os outros. O auto-parse executa estas tarefas para cada computador descoberto. As tarefas usam os mesmos comandos agrupados por origem da análise manual, como parse-ntfs mft, parse-registry amcache, parse-ese srum e parse-file prefetch:

  • Amcache
  • $MFT
  • Registros de redo/undo do NTFS no $LogFile
  • Registros do Prefetch e uma linha do tempo de execução do Prefetch separada
  • Diário USN
  • Índices de diretórios $I30
  • Setores de inicialização $Boot e descritores de segurança $Secure:$SDS
  • SRUM
  • Registro de acesso do usuário (UAL)
  • Histórico, downloads, cookies e histórico de formulários de navegadores web (navegadores baseados no Chromium e no Firefox)
  • WebCache do Internet Explorer e do Edge legado: histórico, downloads, cookies e entradas do cache
  • Arquivos PST, OST, MSG e OFT do Outlook: pastas, itens, destinatários, anexos, contatos, itens de calendário e tarefas
  • Atalhos LNK
  • Jump Lists
  • ShimCache
  • Persistence Hunter (131 verificações de persistência entre fontes, com perfis de permissão/bloqueio)
  • Metadados da quarentena do Defender
  • Histórico das caixas de diálogo Abrir e Salvar como
  • todas as chaves e valores do Registro, incluindo dados excluídos recuperáveis
  • serviços, RecentDocs, TaskCache, contas SAM, locais de inicialização automática do Registro, UserAssist, BAM, programas instalados, MuiCache, ShellBags e dispositivos USB
  • informações do sistema: nomes, versão do Windows, fuso horário, último desligamento, perfis e SIDs
  • a política de auditoria: quais eventos de segurança o sistema estava configurado para registrar
  • configuração de inicialização (BCD e BCD-Template)
  • perfis de rede, interfaces, compartilhamentos, proxies de porta e rotas
  • nomes e horários dos segredos LSA, e logons de domínio em cache em uso (nada é descriptografado)

O Persistence Hunter mantém todas as severidades (--min-severity info), incluindo correspondências parciais com a lista de permissões. LOW é uma classificação a ser investigada; a ausência de metadados de assinatura também pode produzi-la para comandos maliciosos. O inventário automático não descarta essas entradas usando o limite padrão médio do comando manual.

O hunter usa um worker dentro de cada processo de analisador automático. Isso evita que auto-parse -T <N> multiplique seu orçamento de processos por outro pool do tamanho do número de CPUs em cada processo filho. O persistence-hunter -T <N> independente controla as próprias threads de worker do hunter.

A saída CSV do $MFT inclui todos os carimbos de data/hora e os nomes curtos. A saída do Registro inclui os dados brutos e uma interpretação como FILETIME dos valores REG_QWORD. A saída JSON e JSONL do SRUM inclui metadados de estado dos valores. Os arquivos do Defender e os fluxos residentes do $MFT não são extraídos automaticamente.

Com --mft-slack, a saída do $MFT também inclui os nomes de arquivo que restaram no slack dos registros FILE, como parse-ntfs mft -x os grava: linhas marcadas com FromSlack em CSV e SlackFileNames em JSON e JSONL. --code-page se aplica a arquivos LNK, Jump Lists, ShellBags e OpenSaveMRU.

Um artefato que não foi coletado gera uma tarefa skipped normal, não uma falha.

Layout da saída

Os resultados são organizados por computador e por categoria investigativa. Os diretórios de categoria usam PascalCase, como Accounts e FileAndFolderOpening. As tabelas do Amcache e das Jump Lists ficam diretamente em suas categorias, com prefixos nos nomes de arquivo. Os nomes dos diretórios de computador mantêm a grafia descoberta. Os diretórios de saída existentes não são migrados; escolha um novo diretório de saída ao deixar a nomenclatura antiga. Cada analisador grava um arquivo <artifact>-logs.txt ao lado de seus resultados, inclusive quando o artefato não foi coletado. O CSV mantém tabelas separadas porque cada artefato tem colunas diferentes:

<OUTPUT>/
├── manifest.json
├── manifest.csv
├── HOST1/
│   ├── Accounts/
│   │   ├── Registry-LsaSecrets.csv
│   │   ├── Registry-LsaSecrets-logs.txt
│   │   ├── Registry-SAM.csv
│   │   └── Registry-SAM-logs.txt
│   ├── Applications/
│   │   ├── Registry-AppHistory.csv
│   │   ├── Registry-AppHistory-logs.txt
│   │   ├── Registry-InstalledPrograms.csv
│   │   └── Registry-InstalledPrograms-logs.txt
│   ├── BrowserActivity/
│   │   ├── Browser-Cookies.csv
│   │   ├── Browser-Downloads.csv
│   │   ├── Browser-FormHistory.csv
│   │   ├── Browser-History.csv
│   │   ├── Browser-logs.txt
│   │   ├── WebCache-Containers.csv
│   │   ├── WebCache-Cookies.csv
│   │   ├── WebCache-Downloads.csv
│   │   ├── WebCache-Entries.csv
│   │   ├── WebCache-History.csv
│   │   └── WebCache-logs.txt
│   ├── Communication/
│   │   ├── Outlook-Attachments.csv
│   │   ├── Outlook-Calendar.csv
│   │   ├── Outlook-Contacts.csv
│   │   ├── Outlook-Files.csv
│   │   ├── Outlook-Folders.csv
│   │   ├── Outlook-Items.csv
│   │   ├── Outlook-Recipients.csv
│   │   ├── Outlook-Tasks.csv
│   │   └── Outlook-logs.txt
│   ├── ExternalDevices/
│   │   ├── Registry-USB.csv
│   │   └── Registry-USB-logs.txt
│   ├── FileAndFolderOpening/
│   │   ├── JumpLists-AutomaticDestinations.csv
│   │   ├── JumpLists-CustomDestinations.csv
│   │   ├── JumpLists-logs.txt
│   │   ├── LNK.csv
│   │   ├── LNK-logs.txt
│   │   ├── Registry-Office.csv
│   │   ├── Registry-Office-logs.txt
│   │   ├── Registry-MRU.csv
│   │   ├── Registry-MRU-logs.txt
│   │   ├── Registry-OpenSaveMRU.csv
│   │   ├── Registry-OpenSaveMRU-logs.txt
│   │   ├── Registry-RecentDocs.csv
│   │   ├── Registry-RecentDocs-logs.txt
│   │   ├── Registry-ShellBags.csv
│   │   └── Registry-ShellBags-logs.txt
│   ├── FileExistence/
│   │   ├── Registry-Amcache-Devices.csv
│   │   ├── Registry-Amcache-Files.csv
│   │   ├── Registry-Amcache-Findings.csv
│   │   ├── Registry-Amcache-Summary.csv
│   │   ├── Registry-Amcache-logs.txt
│   │   ├── Registry-ShimCache.csv
│   │   └── Registry-ShimCache-logs.txt
│   ├── FileSystem/
│   │   ├── Boot.csv
│   │   ├── Boot-logs.txt
│   │   ├── I30.csv
│   │   ├── I30-logs.txt
│   │   ├── LogFile.csv
│   │   ├── LogFile-logs.txt
│   │   ├── MFT.csv
│   │   ├── MFT-logs.txt
│   │   ├── SecureSDS.csv
│   │   ├── SecureSDS-logs.txt
│   │   ├── UsnJournal.csv
│   │   └── UsnJournal-logs.txt
│   ├── NetworkActivity/
│   │   ├── Registry-Networks.csv
│   │   ├── Registry-Networks-logs.txt
│   │   ├── SRUM-NetworkConnections.csv
│   │   ├── SRUM-NetworkUsages.csv
│   │   └── SRUM-PushNotifications.csv
│   ├── LateralMovement/
│   │   ├── Registry-RemoteAccess.csv
│   │   ├── Registry-RemoteAccess-logs.txt
│   │   ├── UAL-Clients.csv
│   │   ├── UAL-RoleAccess.csv
│   │   ├── UAL-SystemIdentity.csv
│   │   └── UAL-logs.txt
│   ├── Persistence/
│   │   ├── Registry-BCD.csv
│   │   ├── Registry-BCD-logs.txt
│   │   ├── Registry-Persistence.csv
│   │   ├── Registry-Persistence-logs.txt
│   │   ├── Registry-Services.csv
│   │   ├── Registry-Services-logs.txt
│   │   ├── Registry-TaskCache.csv
│   │   └── Registry-TaskCache-logs.txt
│   ├── ProcessExecution/
│   │   ├── Registry-AppCompat.csv
│   │   ├── Registry-AppCompat-logs.txt
│   │   ├── Registry-FeatureUsage.csv
│   │   ├── Registry-FeatureUsage-logs.txt
│   │   ├── Registry-BAM.csv
│   │   ├── Registry-BAM-logs.txt
│   │   ├── Registry-MuiCache.csv
│   │   ├── Registry-MuiCache-logs.txt
│   │   ├── Prefetch.csv
│   │   ├── Prefetch-logs.txt
│   │   ├── PrefetchTimeline.csv
│   │   ├── PrefetchTimeline-logs.txt
│   │   ├── SRUM-AppResourceUseInfo.csv
│   │   ├── SRUM-AppTimelineProvider.csv
│   │   ├── Registry-UserAssist.csv
│   │   └── Registry-UserAssist-logs.txt
│   ├── Registry/
│   │   ├── Registry-Dump.csv
│   │   └── Registry-Dump-logs.txt
│   ├── SecurityProducts/
│   │   ├── Registry-SecuritySettings.csv
│   │   ├── Registry-SecuritySettings-logs.txt
│   │   ├── DefenderQuarantine.csv
│   │   ├── DefenderQuarantine-logs.txt
│   │   └── DefenderQuarantined/  # only with -x
│   └── SystemInformation/
│       ├── Registry-AuditPolicy.csv
│       ├── Registry-AuditPolicy-logs.txt
│       ├── Registry-SystemInfo.csv
│       ├── Registry-SystemInfo-logs.txt
│       ├── SRUM-IdentityMap.csv
│       ├── SRUM-VfuProvider.csv
│       └── SRUM-logs.txt
└── HOST2/
    └── …
Categoria Artefatos
Accounts Contas locais SAM, nomes e horários dos segredos LSA
Applications Histórico de aplicativos (vestígios de ferramentas de terceiros)
Applications Programas instalados
BrowserActivity Histórico, downloads, cookies e histórico de formulários de navegadores web, com as entradas excluídas recuperadas; WebCache do Internet Explorer e do Edge legado
Communication Arquivos PST, OST, MSG e OFT do Outlook: pastas, itens, destinatários, anexos, contatos, itens de calendário e tarefas
ExternalDevices Dispositivos e volumes USB
FileAndFolderOpening Jump Lists, atalhos LNK, Microsoft Office, listas MRU, caixas de diálogo Abrir e Salvar como, RecentDocs, ShellBags
FileExistence Amcache, ShimCache
FileSystem $Boot, $I30, $LogFile, $MFT, $Secure:$SDS, Diário USN
NetworkActivity Perfis de rede, interfaces, compartilhamentos, proxies de porta e rotas; conexões, tráfego e notificações push do SRUM
LateralMovement Conexões de saída dos usuários por Área de Trabalho Remota, PuTTY e WinSCP, unidades mapeadas e compartilhamentos; Registro de acesso do usuário (os clientes das funções de um servidor)
Persistence Configuração de inicialização (BCD), inicializações automáticas do Registro, serviços, TaskCache
ProcessExecution Compatibilidade de aplicativos, BAM e DAM, FeatureUsage e itens fixados, MuiCache, Prefetch, linha do tempo do Prefetch, atividade de aplicativos/CPU do SRUM, UserAssist
Registry Chaves e valores gerais dos hives, incluindo registros recuperados
SecurityProducts Metadados da quarentena do Defender e conteúdo extraído opcional; configurações de segurança (Defender, UAC, proteção de credenciais, RDP, firewall, registro em log)
SystemInformation Nomes, versão do Windows, fuso horário, último desligamento, perfis, SIDs e política de auditoria; energia/capacidade, mapas de identidade e provedores desconhecidos do SRUM

As categorias ajudam a organizar as investigações; não são prova de uma atividade específica. Por exemplo, entradas do Amcache e do ShimCache, por si sós, não estabelecem execução. O SRUM registra o uso de recursos; consulte o guia de artefatos antes de tirar conclusões sobre a execução de um programa.

CSV, JSON e JSONL usam as mesmas categorias. Um arquivo <artifact>-logs.txt por tarefa de analisador contém seu comando exato e suas mensagens; por exemplo, HOST1/FileSystem/MFT-logs.txt e HOST1/ProcessExecution/Prefetch-logs.txt. JSON e JSONL usam os mesmos nomes de arquivo de log. O Amcache e as Jump Lists têm, cada um, um log compartilhado ao lado de suas tabelas prefixadas. As tabelas dos provedores do SRUM são colocadas diretamente em NetworkActivity, ProcessExecution e SystemInformation, com um arquivo compartilhado SystemInformation/SRUM-logs.txt. Nenhum subdiretório logs/ é criado.

Os nomes de arquivo CSV padrão são Registry-SAM.csv, LNK.csv, Registry-RecentDocs.csv, Registry-ShimCache.csv, LogFile.csv, I30.csv, MFT.csv, UsnJournal.csv, Boot.csv, SecureSDS.csv, Registry-Networks.csv, Registry-Persistence.csv, Registry-Services.csv, Registry-TaskCache.csv, Registry-BCD.csv, Registry-SecuritySettings.csv, PrefetchTimeline.csv, Prefetch.csv, Registry-UserAssist.csv, Registry-AppCompat.csv, Registry-Office.csv, Registry-FeatureUsage.csv, Registry-AppHistory.csv, Registry-MRU.csv, Registry-SystemInfo.csv, Registry-RemoteAccess.csv, Registry-OpenSaveMRU.csv, Registry-InstalledPrograms.csv, Registry-BAM.csv, Registry-MuiCache.csv, Registry-ShellBags.csv, Registry-USB.csv, Registry-SecuritySettings.csv, Registry-AuditPolicy.csv, Registry-Dump.csv e DefenderQuarantine.csv. As tabelas derivadas do Registro usam o prefixo Registry-, incluindo Registry-ShimCache.csv, Registry-UserAssist.csv, Registry-BAM.csv e Registry-SystemInfo.csv. As chaves e valores gerais dos hives ficam em Registry-Dump.csv. As tabelas do Amcache são FileExistence/Registry-Amcache-Devices.csv, Registry-Amcache-Files.csv, Registry-Amcache-Findings.csv e Registry-Amcache-Summary.csv. As Jump Lists usam FileAndFolderOpening/JumpLists-AutomaticDestinations.csv e JumpLists-CustomDestinations.csv. Não há subdiretórios para o Amcache nem para as Jump Lists. As tabelas do SRUM usam nomes de arquivo SRUM- diretamente sob sua categoria, por exemplo NetworkActivity/SRUM-NetworkConnections.csv. As tabelas do Registro de acesso do usuário ficam em LateralMovement, um arquivo por tabela, como UAL-Clients.csv e UAL-SystemIdentity.csv, com UAL-logs.txt; consulte Registro de acesso do usuário (UAL). As tabelas dos navegadores web ficam em BrowserActivity: Browser-History.csv, Browser-Downloads.csv, Browser-Cookies.csv e Browser-FormHistory.csv, com Browser-logs.txt; consulte Navegadores web. As tabelas WebCache do Internet Explorer e do Edge legado também ficam lá: WebCache-History.csv, WebCache-Downloads.csv, WebCache-Cookies.csv, WebCache-Entries.csv e WebCache-Containers.csv, com WebCache-logs.txt; consulte Internet Explorer e Edge legado. As tabelas do Outlook ficam em Communication: Outlook-Files.csv, Outlook-Folders.csv, Outlook-Items.csv, Outlook-Recipients.csv, Outlook-Attachments.csv, Outlook-Contacts.csv, Outlook-Calendar.csv e Outlook-Tasks.csv, com Outlook-logs.txt; consulte Outlook. Consulte a tabela completa de posicionamento do SRUM.

Os logs correspondem ao nome do artefato com iniciais maiúsculas, como Registry-SAM-logs.txt, PrefetchTimeline-logs.txt e Registry-UserAssist-logs.txt. Os arquivos JSON/JSONL usam as mesmas raízes de nome, por exemplo MFT.jsonl; o identificador Artifact do registro é mft para consultas. As saídas com várias tabelas têm Registry-Amcache-logs.txt ou JumpLists-logs.txt ao lado de suas tabelas. O log compartilhado do SRUM fica em SystemInformation.

O manifest.json registra o Hostname original descoberto, a identidade Comp única da saída/dos registros, a procedência do nome do host, os caminhos das evidências, a Category do artefato, as linhas de comando, a duração, o código de saída, o caminho do resultado, o caminho do log, a linha do tempo JSONL solicitada e qualquer erro de exportação, se a extração do Defender foi solicitada, e se cada tarefa foi concluída com sucesso, ignorada ou falhou.

O auto-parse não grava nenhum caminho absoluto, de modo que os resultados podem ser compartilhados sem mostrar onde estão as evidências, os resultados ou o Juntei no sistema de análise:

  • Os caminhos das evidências são relativos ao diretório de evidências. O terminal lista cada computador com seu diretório nas evidências (HOST1: ./HOST1_F), e os analisadores são executados no diretório de evidências e recebem esses caminhos. As colunas de caminho de origem dos resultados (SourceFile, SourcePath, …), os logs e os campos EvidenceRoot e WindowsDirectories dos manifestos mostram onde cada arquivo está nas evidências (./HOST1_F/C/Windows/Prefetch/CMD.EXE-6D6290C5.pf).
  • Os caminhos de resultados dos manifestos e dos logs (Output, OutputFiles, Log, JSON-Timeline, os caminhos de saída em Command) e o ExtractedFile do Defender são relativos ao diretório de saída (./HOST1/ProcessExecution/Prefetch.csv, ../siem.jsonl para uma linha do tempo ao lado dele). Command começa com o nome do programa (juntei); seus caminhos de evidências são relativos ao diretório de evidências, e seus caminhos de saída, ao diretório de saída.
  • EvidenceDirectory e OutputDirectory são os nomes dos dois diretórios. ManifestVersion 2 marca os manifestos que registram os caminhos de resultados a partir do diretório de saída; manifestos anteriores não têm ManifestVersion e os registram como foram fornecidos a -o. Uma nova execução com -C lê ambos.
  • O terminal mostra um caminho de saída ou de linha do tempo como foi fornecido quando ele é relativo, e a partir do diretório atual quando é absoluto (../results/).

Depois do número de processos paralelos, o terminal mostra o tamanho total dos arquivos dos sistemas Windows encontrados (Total filesize: 26.1 MiB).

A mensagem de progresso mostra o computador e o artefato ativos, seguidos de um tamanho aproximado da entrada, por exemplo HOST1 / prefetch (~2.0 MiB). Um grupo de arquivos usa o tamanho combinado; cada tarefa de MFT, LogFile ou Diário USN mostra o tamanho individual de sua entrada. As estimativas excluem os logs de transação auxiliares e os arquivos de enriquecimento e não preveem o tamanho da saída analisada.

O manifest.csv fornece o mesmo índice de tarefas como uma tabela adequada para planilhas, com uma linha por tarefa de analisador. Ele inclui Comp, o Hostname original, FQDN, HostnameSource, EvidenceRoot, Artifact, Category, OutputType, Purpose, Status, DurationMs, ExitCode, Output, OutputFiles, Log, Error e Command. Purpose é artifact para os resultados categorizados ou json_timeline para a passagem JSONL nativa adicional usada com CSV. OutputType é o formato real de saída do analisador. Command é um array JSON com o executável e seus argumentos, preservando espaços e aspas. Para o SRUM, Output é o diretório do computador, OutputFiles é um array JSON com os caminhos de saída exatos de seus provedores, e Category indica a localização do log compartilhado (SystemInformation). Os arquivos são categorizados individualmente; OutputFiles também aparece no manifesto JSON.

Filtre Status por skipped ou failed para encontrar as tarefas que exigem análise; o Error de uma tarefa ignorada pode estar vazio, com a explicação em seu arquivo Log.

O resumo do terminal inclui o número total e o tamanho dos arquivos regulares existentes no momento sob o diretório de saída, incluindo os dois manifestos, os logs dos analisadores e os arquivos extraídos. Links simbólicos não são seguidos. Os tamanhos são escalonados automaticamente com o mesmo formatador de Total filesize, com unidades como KiB, MiB e GiB:

Results saved: output/ ( 125 files / 40.5 MiB )

As tabelas do Amcache e do SRUM usam -Source1, -Source2 etc. quando vários bancos de dados de origem foram coletados. O log compartilhado do analisador registra os caminhos originais e finais, e os registros JSON/JSONL mantêm a procedência da origem. As tarefas CSV do Amcache/das Jump Lists listam seus caminhos exatos de tabela em OutputFiles do manifesto; seu Output é o diretório da categoria investigativa. As exportações JSON e JSONL do Amcache e das Jump Lists já são arquivos únicos chamados Registry-Amcache.json[l] e JumpLists.json[l]. A linha do tempo combinada de -j mantém o mesmo conteúdo dos registros e os mesmos valores de Artifact. --clobber usa o manifesto anterior para limpar as saídas registradas, incluindo nomes anteriores, preservando os arquivos de categoria não relacionados. Uma coleta normal de um único volume grava os registros do $MFT e do Diário USN diretamente em FileSystem/MFT.csv e FileSystem/UsnJournal.csv. Volumes coletados adicionais usam arquivos irmãos numerados, como FileSystem/MFT-2.csv e FileSystem/MFT-2-logs.txt.

Ingestão de JSON e em SIEM

Todo registro JSON ou JSONL recebe dois campos de nível superior:

  • Comp: o sistema de origem.
  • Artifact: o analisador do Juntei que produziu o registro, como mft ou prefetch-timeline.

-j, --json-timeline <FILE> cria um arquivo JSONL adicional, independentemente do formato dos resultados individuais. Todas as saídas categorizadas e seus logs são mantidos:

# Default CSV tables plus a SIEM timeline
juntei auto-parse -d evidence -o parsed -j parsed/timeline.jsonl

# Pretty JSON results plus a SIEM timeline
juntei auto-parse -d evidence -o parsed-json -t json -j parsed-json/timeline.jsonl

# Individual JSONL results plus a consolidated JSONL timeline
juntei auto-parse -d evidence -o parsed-jsonl -t jsonl -j parsed-jsonl/timeline.jsonl

O nome do arquivo é usado como fornecido; caminhos relativos são relativos ao diretório de trabalho atual. Ele pode estar na raiz da saída, em outro subdiretório de saída não reservado ou fora do diretório de saída. Evidências, manifestos, resultados/logs por computador e diretórios temporários dos analisadores não podem ser usados como destino. Um arquivo existente exige -C; uma exportação que falha o mantém intacto.

No modo CSV, o Juntei executa uma passagem JSONL nativa adicional para que o arquivo do SIEM preserve os tipos numéricos e booleanos, os dados aninhados, os campos brutos e os metadados que as tabelas CSV podem omitir. As tarefas extras compartilham o mesmo limite de concorrência -T, não extraem novamente o conteúdo da quarentena e têm logs auxiliares *-json-timeline-logs.txt separados. Ambos os manifestos distinguem sua finalidade e seu formato de saída. Os arquivos JSONL temporários são removidos após uma execução bem-sucedida; eles são mantidos se um analisador ou a exportação falhar. Planeje o tempo de processamento extra e o espaço temporário em disco.

No modo JSON, o Juntei transmite os resultados existentes para um JSONL compacto sem analisar novamente as evidências. Os relatórios do Amcache são expandidos nos mesmos registros individuais de resumo, constatação, arquivo e dispositivo do JSONL nativo. No modo JSONL, os registros anotados existentes são combinados diretamente. Todos os modos usam a mesma estrutura de registro para SIEM. O conjunto de dados mantém os carimbos de data/hora e os campos nativos dos artefatos; ele não inventa um carimbo de data/hora de evento comum nem ordena globalmente artefatos heterogêneos.

jq -c 'select(.Comp == "HOST1" and .Artifact == "prefetch")' parsed/timeline.jsonl
jq -r 'select(.Artifact == "mft") | .FullPath? // empty' parsed/timeline.jsonl

O manifest.json registra o caminho JSON-Timeline solicitado e qualquer JSON-TimelineError. Seus registros de tarefa, e o manifest.csv, continuam apontando para as saídas de artefatos mantidas. As tarefas CSV bem-sucedidas exclusivas da linha do tempo referenciam o arquivo JSONL final em vez dos arquivos temporários excluídos. Se algum analisador falhar, a execução termina sem sucesso e a linha do tempo contém apenas os resultados bem-sucedidos; inspecione os manifestos e os logs das categorias antes de tratá-la como completa. O resumo de contagem/tamanho de arquivos abrange os arquivos dentro do diretório de saída; uma linha do tempo externa é relatada separadamente como JSONL timeline: <FILE>.

Desempenho

As tarefas dos analisadores são processos separados, de modo que artefatos que exigem muita CPU podem ser executados ao mesmo tempo, e um dano em um analisador não consegue encerrar a execução inteira. Por padrão, o Juntei usa o número de CPUs lógicas. Limite a concorrência quando as evidências estiverem em um disco lento ou o sistema tiver pouca memória:

juntei auto-parse -d evidence -o parsed -T 4

Uso

Version: 1.1.0 (CODE BLUE Release)
Yamato Security (https://github.com/Yamato-Security/juntei - @SecurityYamato)

Usage:
  juntei auto-parse -d <EVIDENCE> -o <OUTPUT> [OPTIONS]

Input:
  -d, --directory <EVIDENCE>  Evidence directory containing one or more collected Windows systems
      --max-depth <DEPTH>     Maximum directory depth at which to discover a Windows directory [default: 10]
      --vhdx                  Parse VHDX images natively on Linux, macOS and Windows (read-only; temporary disk space required)
      --e01                   Parse E01/Ex01 images natively (split images from their first segment; temporary disk space required)
      --temp-dir <DIR>        Directory for private image staging (default: output filesystem)

Output:
  -o, --output <DIR>                  New directory in which to create per-computer results
  -t, --output-type <TYPE>            Output type: csv (default), json, or jsonl [default: csv]
  -j, --json-timeline <FILE>          Create a single JSONL timeline to import into a SIEM
  -Z, --timezone <OFFSET>             Display parsed timestamps using a fixed UTC offset (UTC by default) [default: +00:00]
  -C, --clobber                       Overwrite outputs in an existing directory (never deletes unrelated files)
  -x, --extract-defender-quarantined  Extract Defender-quarantined files

Performance:
  -T, --threads <N>  Parser processes to run at once (default: logical CPU count)

Parsing:
      --code-page <NUMBER>  Windows code page for ANSI strings in LNK files, Jump Lists, ShellBags and OpenSaveMRU [default: 1252]
      --mft-slack           Recover the file names left in the slack of $MFT records

General Options:
  -h, --help  Show the help menu

Display Settings:
  -K, --no-color  Disable color output
  -q, --quiet     Quiet mode: do not display the launch banner

Use um novo diretório de saída sempre que for viável. -C remove ou sobrescreve apenas os destinos exatos gerados por esta execução, para que um artefato agora ausente não deixe um resultado desatualizado. Ele não exclui arquivos não relacionados nem a árvore de saída inteira. Ele também remove o diretório SecurityProducts/DefenderQuarantined/ de cada computador, e o diretório reservado defender-quarantined/ do layout plano anterior, antes da análise, quer a nova execução use -x ou não.

Use um diretório de saída novo ao deixar um layout plano mais antigo. Os arquivos CSV/JSON anteriores não são realocados nem excluídos automaticamente.

Trate o conteúdo extraído do Defender como malware

-x, --extract-defender-quarantined grava o conteúdo em quarentena em disco, no diretório SecurityProducts/DefenderQuarantined/ de cada computador. Os fluxos binários recuperados terminam em .quarantined, e o Juntei remove a permissão de execução. Cada descritor de segurança binário também recebe um relatório legível .security_descriptor.txt com proprietário, permissões e SDDL. Nunca execute os payloads recuperados. Use um sistema de análise isolado e espere que o antivírus ou o EDR gere alertas sobre o conteúdo recuperado ou o remova.

Consulte como ler o descritor de segurança recuperado para conhecer os campos do relatório e suas limitações forenses.

O auto-parse também lê as conexões remotas dos usuários (RDP, PuTTY, WinSCP e unidades mapeadas).

Criar uma super linha do tempo cronológica

Depois da análise, use o super-timeline para expandir os carimbos de data/hora registrados em eventos rotulados. Adicione --sort para ordená-los considerando todos os computadores e artefatos:

juntei super-timeline -d output/ -o SuperTimeline.csv --sort

A exportação -j, --json-timeline já existente continua sendo um arquivo JSONL que combina os registros nativos. Ela preserva os esquemas dos analisadores; não expande campos de carimbo de data/hora nem ordena eventos. Guarde-a, junto com os resultados individuais dos analisadores, para a revisão no nível das evidências.