OpenCyber Academy
Engenharia · Capítulo 13 · Português
Código do curso: OCA-133Capítulo 13: OCA-133-C013

Capítulo 13 — Sistemas 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 13 publicada. Mapa, exemplo, EX037.

flowchart TD
  N0["13.1 Normalização"]
  N1["Laboratório 4 — normalizar e deduplicar"]
  N2["13.2 Lendo o resultado"]
  N3["13.3 Chaves e índices"]
  N4["13.4 Proveniência"]
  N5["13.5 Retenção"]
  N6["Nota de prática — Padrões de consulta"]
  N7["Síntese"]
  N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> N7
  N7 --> EX["Exemplo resolvido"]
  EX --> Q["Exercício EX037"]

Desenho lógico

flowchart LR
  N0["13.1 Normalização"]
  N1["Laboratório 4 — normalizar e deduplicar"]
  N2["13.2 Lendo o resultado"]
  N3["13.3 Chaves e índices"]
  N4["13.4 Proveniência"]
  N5["13.5 Retenção"]
  N6["Nota de prática — Padrões de consulta"]
  N7["Síntese"]
  N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> N7 --> Q["EX037"]
[13.1 Normalização]
    |
    v
[Laboratório 4 — normalizar e deduplicar]
    |
    v
[13.2 Lendo o resultado]
    |
    v
[13.3 Chaves e índices]
    |
    v
[13.4 Proveniência]
    |
    v
[13.5 Retenção]
    |
    v
[Nota de prática — Padrões de consulta]
    |
    v
[Síntese]
    |
    v
[Exemplo resolvido] --> [Exercício EX037]

Objetivos de aprendizagem

Você vai (1) normalizar e deduplicar indicadores antes do armazenamento; (2) escolher chaves e índices para consultas de inteligência; (3) modelar a proveniência de cada objeto armazenado; (4) projetar a retenção e a exclusão.

13.1 Normalização

O mesmo domínio pode chegar como C2.Example., c2.example ou em texto desarmado. Sem normalização, o repositório se enche de duplicatas e as contagens de correspondências mentem. O laboratório mostra o efeito: sete entradas, quatro valores reais. Uma contagem baseada nas strings brutas alegaria que a BEN viu sete indicadores distintos quando viu quatro. O normalizador de Kofi passa para minúsculas onde a caixa não importa, remove o ponto final dos domínios, retira os espaços e rearma o texto, com cada etapa testada isoladamente. A ordem das etapas é fixa e documentada.

Laboratório 4 — normalizar e deduplicar

"""Lab 4 (ch 13): normalise and de-duplicate synthetic indicators before storage."""
raw = ["C2.Example.", "c2.example", "hxxp://drop[.]example/a", "http://drop.example/a",
       "203.0.113.9", " 203.0.113.9 ", "198.51.100.44"]
def norm(s):
    s = s.strip().lower().replace("hxxp", "http").replace("[.]", ".")
    return s[:-1] if s.endswith(".") else s
seen, out = set(), []
for r in raw:
    n = norm(r)
    if n not in seen:
        seen.add(n); out.append(n)
print(f"raw={len(raw)} unique={len(out)}")
for o in out:
    print(" ", o)

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

raw=7 unique=4
  c2.example
  http://drop.example/a
  203.0.113.9
  198.51.100.44

13.2 Lendo o resultado

Sete strings brutas se reduzem a quatro valores únicos. O ponto final, as maiúsculas, o desarme e os espaços em volta eram todos ruído. As regras de normalização precisam ser documentadas, versionadas e idempotentes. Kofi trata as regras como parte do modelo de dados. Cada regra tem um motivo escrito, um teste e um número de versão armazenado com cada registro que produziu. Rodar o normalizador sobre a própria saída deve dar o mesmo resultado, o que os testes de propriedades do capítulo de programação verificam. Se uma regra muda, os registros mais antigos podem ser encontrados pela versão e reprocessados, em vez de deixar duas formas normais diferentes no repositório ao mesmo tempo.

13.3 Chaves e índices

Os objetos STIX 2.1 trazem um id da forma type--UUID. O Lantern usa esse id como chave dos objetos e indexa os valores normalizados dos indicadores para comparações rápidas. Os avistamentos têm como chave o id do indicador e o horário. O identificador nunca muda, mesmo que a descrição ou a confiança do indicador mudem, então as referências feitas por relacionamentos e avistamentos continuam válidas. Os índices são escolhidos a partir das perguntas que os analistas mais fazem. Kofi mediu a velocidade de comparação com e sem o índice de valores e achou a diferença grande o bastante para justificar seu custo de armazenamento. Consultas raras podem rodar mais devagar, em vez de ganhar índices próprios.

13.4 Proveniência

Cada objeto registra sua fonte, o rótulo TLP, o horário da coleta e a versão do parser. Indicadores duplicados vindos de duas fontes são armazenados uma vez, com as duas entradas de proveniência, para que os analistas vejam a corroboração. A corroboração só conta se as fontes forem independentes. Se o parceiro B simplesmente copia o feed do parceiro A, duas entradas não acrescentam nada. O modelo de Kofi registra onde cada parceiro diz ter obtido um indicador, quando o parceiro informa isso, para que os analistas percebam relatos repetidos, e não independentes. O rótulo mais restritivo entre as fontes acompanha o registro compartilhado, de modo que a fusão nunca afrouxa um limite de compartilhamento.

13.5 Retenção

A retenção segue os acordos e a lei. A exclusão precisa chegar aos backups dentro de um prazo declarado; "apagado da interface" não é exclusão. O desenho de Kofi dá a cada fonte um período de retenção tirado de seu acordo. Um job agendado remove os registros expirados do repositório ativo, e os backups são destruídos em um ciclo fixo, de modo que um registro expirado sobrevive nas cópias de backup por, no máximo, o prazo declarado. O job grava um log das contagens removidas por fonte, que o encarregado de privacidade revisa. Se um parceiro pedir a exclusão, o mesmo log mostra quando ela foi feita.

Nota de prática — Padrões de consulta

Os analistas fazem três tipos de pergunta: este valor existe, o que está relacionado a ele e o que mudou recentemente. Consultas de correspondência exata precisam de índices hash sobre os valores normalizados; consultas de relacionamento precisam de índices sobre os ids de origem e de destino; consultas de recência precisam de índices de tempo. Projetar os índices a partir de perguntas reais evita tanto consultas lentas quanto armazenamento desperdiçado. As exclusões em massa são ensaiadas primeiro em uma cópia, porque uma regra de normalização equivocada aplicada durante a exclusão pode remover muito mais do que o pretendido.

Exemplo resolvido

Kofi funde os feeds de dois parceiros. A normalização revela que 18% dos indicadores do parceiro B já existem a partir do parceiro A. Em vez de descartá-los, o Lantern acrescenta a proveniência do parceiro B aos registros existentes, aumentando sua contagem de corroboração.

Caso sintético. Os feeds e as porcentagens são inventados.

Erros e limites

Uma normalização agressiva demais pode fundir valores distintos (por exemplo, caminhos de URL sensíveis a maiúsculas e minúsculas). Teste as regras com formatos reais.

Exercícios

Síntese

Normalize com cuidado, use ids estáveis como chave, mantenha a proveniência e torne a exclusão real.

Continue estudando — capítulo 13 de 50

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

Respostas comentadas

EX037. Quatro: c2.example, http://drop.example/a, 203.0.113.9 e 198.51.100.44.

EX038. Duas fontes independentes relatando o mesmo indicador são uma corroboração que os analistas precisam ver, e a proveniência sustenta a auditoria de quem compartilhou o quê.

EX039. Os caminhos de URL costumam ser sensíveis a maiúsculas e minúsculas nos servidores, então /Payload e /payload podem ser recursos diferentes; passe para minúsculas apenas o esquema e o host.