OpenCyber Academy
Técnico · Capítulo 4 · Português
Código do curso: OCA-063Capítulo 04: OCA-063-C004

Capítulo 4 — Scripts e formatos de dados

Ensino gratuito e aberto para quem deseja proteger pessoas e tecnologias. Não é preciso criar uma conta para estudar ou consultar as respostas.

Mapa da aula

Aula 04 publicada. Mapa, exemplo, EX013.

flowchart TD
  N0["4.1 JSON lines"]
  N1["4.2 Filtragem"]
  N2["Laboratório — filtragem de eventos de endpoint"]
  N3["4.3 Leitura do resultado"]
  N4["4.4 Preservação dos originais"]
  N5["4.5 Clareza da saída"]
  N6["4.6 Linhas malformadas"]
  N7["4.7 Versionamento"]
  N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> N7
  N7 --> EX["Exemplo resolvido"]
  EX --> Q["Exercício EX013"]

Desenho lógico

flowchart LR
  N0["4.1 JSON lines"]
  N1["4.2 Filtragem"]
  N2["Laboratório — filtragem de eventos de endpoint"]
  N3["4.3 Leitura do resultado"]
  N4["4.4 Preservação dos originais"]
  N5["4.5 Clareza da saída"]
  N6["4.6 Linhas malformadas"]
  N7["4.7 Versionamento"]
  N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> N7 --> Q["EX013"]
[4.1 JSON lines]
    |
    v
[4.2 Filtragem]
    |
    v
[Laboratório — filtragem de eventos de endpoint]
    |
    v
[4.3 Leitura do resultado]
    |
    v
[4.4 Preservação dos originais]
    |
    v
[4.5 Clareza da saída]
    |
    v
[4.6 Linhas malformadas]
    |
    v
[4.7 Versionamento]
    |
    v
[Exemplo resolvido] --> [Exercício EX013]

Objetivos de aprendizagem

Você vai (1) ler exportações de eventos em JSON lines; (2) filtrar eventos por host e processo; (3) produzir saídas claras e verificáveis; (4) manter intactas as exportações originais.

4.1 JSON lines

As exportações do EDR costumam usar JSON lines: um objeto JSON por linha, com campos como horário, host, processo, ação e detalhe. O módulo json do Python transforma cada linha num dicionário. Cada linha pode ser lida e conferida sozinha, então uma única linha danificada não impede que o resto da exportação seja carregado. Sana mantém os nomes dos campos exatamente como a exportação os entrega, como t, host, proc, act e detail, para que seus scripts correspondam à documentação do console. Os horários da exportação chegam em UTC, marcados com o sufixo Z. O servidor do EDR carimba cada evento com seu próprio horário UTC sincronizado ao recebê-lo do agente. Por isso o relógio atrasado do WARD4-PC2 não afeta esses horários, que entram no chamado sem correção.

4.2 Filtragem

As investigações se estreitam para um host e um processo. Sana filtra os eventos do WARD4-PC2 pelo wscript.exe, o host de scripts do Windows que rodou logo depois que o atalho da escala foi aberto. Filtrar primeiro por host e depois por processo mantém o resultado pequeno o bastante para ser lido linha a linha. O filtro devolve os dois eventos do wscript.exe no WARD4-PC2 e deixa de fora o evento comum do minutes.docx no ADMIN-PC1. Sana registra os valores do filtro junto com a saída, para que outro operador possa repetir o mesmo estreitamento na mesma exportação.

Laboratório — filtragem de eventos de endpoint

"""Filter synthetic endpoint events (JSON lines) for one host and process."""
import json
lines = [
 '{"t":"2026-09-14T10:02:11Z","host":"WARD4-PC2","proc":"explorer.exe","act":"usb_mount","detail":"E:"}',
 '{"t":"2026-09-14T10:02:40Z","host":"WARD4-PC2","proc":"explorer.exe","act":"open","detail":"E:/Rota_Sept.lnk"}',
 '{"t":"2026-09-14T10:02:41Z","host":"WARD4-PC2","proc":"wscript.exe","act":"start","detail":"E:/.sys/run.vbs"}',
 '{"t":"2026-09-14T10:02:44Z","host":"WARD4-PC2","proc":"wscript.exe","act":"file_write","detail":"C:/Users/Public/svch.exe"}',
 '{"t":"2026-09-14T10:05:00Z","host":"ADMIN-PC1","proc":"outlook.exe","act":"open","detail":"minutes.docx"}']
ev = [json.loads(l) for l in lines]
for e in ev:
    if e["host"] == "WARD4-PC2" and e["proc"] == "wscript.exe":
        print(e["t"], e["act"], e["detail"])
print("events for WARD4-PC2:", sum(e["host"] == "WARD4-PC2" for e in ev))

Execute com python3 lab_json.py. Saída verificada:

2026-09-14T10:02:41Z start E:/.sys/run.vbs
2026-09-14T10:02:44Z file_write C:/Users/Public/svch.exe
events for WARD4-PC2: 4

4.3 Leitura do resultado

Dos cinco eventos sintéticos, quatro são do WARD4-PC2. O filtro pelo wscript.exe devolve dois: às 10:02:41 ele iniciou um script a partir de uma pasta oculta no pendrive (E:/.sys/run.vbs) e às 10:02:44 gravou C:/Users/Public/svch.exe. A sequência — montagem do USB às 10:02:11, atalho aberto às 10:02:40, script às 10:02:41, executável gravado às 10:02:44 — mostra um atalho no pendrive disparando um script oculto que deixou um programa no disco. A sequência de quatro passos leva trinta e três segundos da montagem até a gravação do executável, o que deixa pouco espaço para qualquer coisa que uma pessoa pudesse ter feito no meio. O laboratório imprime a contagem de quatro eventos do WARD4-PC2, para que o leitor possa conferir que o filtro não descartou nada. Esses horários do EDR, carimbados pelo servidor sincronizado do EDR, são usados depois para conferir os horários locais corrigidos do PC, vindos do sistema de arquivos e dos logs de eventos.

4.4 Preservação dos originais

A exportação original recebe um hash e é guardada; a saída filtrada é derivada e rotulada com o filtro usado. O SHA-256 da exportação original é registrado no chamado antes de qualquer filtragem. Cada arquivo derivado indica o hash do original e o filtro usado, para que qualquer pessoa possa recriá-lo a partir do repositório de evidências. Se um arquivo derivado se perder ou for alterado, nada se perde, porque o original pode ser filtrado de novo. Os arquivos derivados ficam numa pasta separada da dos originais, que o repositório de evidências mantém somente para leitura.

4.5 Clareza da saída

Imprima os horários em UTC com o sufixo Z, e imprima contagens para que um revisor possa conferir que nada foi descartado. Misturar horários locais e UTC causou confusão no início do caso, quando a equipe da ala relatava os horários em hora local e as exportações usavam UTC. Sana escreve cada horário em suas notas com o fuso, e imprime contagens como 'events for WARD4-PC2: 4' ao lado de cada resultado. Um revisor que compara os quatro eventos impressos com as quatro linhas do WARD4-PC2 na exportação fica sabendo que o filtro manteve tudo daquele host.

4.6 Linhas malformadas

As linhas que não podem ser interpretadas são contadas e listadas. Uma linha que falha na interpretação é impressa com seu número e mantida numa lista separada, para que possa ser examinada em vez de descartada em silêncio. Na exportação do WARD4-PC2 nenhuma linha falhou, e o script diz isso explicitamente, com uma contagem zero. Um descarte silencioso poderia esconder justamente o evento que importa, como um registro truncado das 10:02. A contagem de linhas malformadas aparece na saída mesmo quando é zero, para que o leitor saiba que a verificação rodou.

4.7 Versionamento

O script fica no repositório da equipe; as notas do chamado citam sua versão. A nota no chamado diz 'script de filtro v1.0', o que liga o resultado a uma versão revisada do código. Se o script for corrigido ou ampliado depois, as notas antigas continuam apontando para a versão que as produziu. Owen pode recuperar exatamente essa versão no repositório e rodá-la de novo sobre a exportação com hash para confirmar os dois eventos. Os números de versão só mudam depois que Owen revisa o novo código e seu teste com dados sintéticos.

Combinação de filtros

Os filtros podem combinar host, processo e janela de tempo. Sana mantém cada filtro como uma consulta salva e nomeada, para que um colega possa repeti-la exatamente.

Exemplo resolvido

Nota de Sana no chamado: "Exportação do EDR (SHA-256 registrado) filtrada pelo host WARD4-PC2 e pelo processo wscript.exe: 2 eventos. O script E:/.sys/run.vbs iniciou às 10:02:41Z; gravou C:/Users/Public/svch.exe às 10:02:44Z. Script de filtro v1.0."

Caso sintético. Os eventos vêm do script do laboratório.

Erros e limites

O EDR registra o que seus sensores observam; ações fora da visão deles, ou anteriores à instalação, ficam de fora.

Exercícios

Síntese

Interprete com cuidado as exportações estruturadas, filtre de forma transparente e mantenha os originais; as sequências surgem de eventos bem filtrados.

Continue estudando — capítulo 04 de 18

← Capítulo 03 (rascunho) · Índice de capítulos do curso · Capítulo 05 (rascunho) →

Respostas comentadas

EX013. Dois eventos: às 10:02:41 o wscript.exe iniciou o E:/.sys/run.vbs e às 10:02:44 gravou C:/Users/Public/svch.exe.

EX014. USB montado às 10:02:11, atalho da escala aberto às 10:02:40, script oculto executado às 10:02:41 e svch.exe gravado às 10:02:44.

EX015. O arquivo filtrado é rotulado como derivado e registra o filtro usado, enquanto a exportação original recebe um hash e é mantida sem alteração.

EX016. Tudo o que seus sensores não observam e tudo o que aconteceu antes da instalação do agente.