Mapa da aula
Aula 06 publicada. Mapa, exemplo, EX036.
flowchart TD
N0["6.1 Validar primeiro"]
N1["Laboratório 2 — verificação de propriedades STIX"]
N2["6.2 O que a verificação mostra"]
N3["Laboratório 3 — medianas do tempo até o bloqueio"]
N4["6.3 Lendo as medianas"]
N5["6.4 Descrição versus causa"]
N6["6.5 Devolvendo a qualidade dos dados"]
N7["Síntese"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> N7
N7 --> EX["Exemplo resolvido"]
EX --> Q["Exercício EX036"]
Desenho lógico
flowchart LR
N0["6.1 Validar primeiro"]
N1["Laboratório 2 — verificação de propriedades STIX"]
N2["6.2 O que a verificação mostra"]
N3["Laboratório 3 — medianas do tempo até o bloqueio"]
N4["6.3 Lendo as medianas"]
N5["6.4 Descrição versus causa"]
N6["6.5 Devolvendo a qualidade dos dados"]
N7["Síntese"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> N7 --> Q["EX036"]
[6.1 Validar primeiro]
|
v
[Laboratório 2 — verificação de propriedades STIX]
|
v
[6.2 O que a verificação mostra]
|
v
[Laboratório 3 — medianas do tempo até o bloqueio]
|
v
[6.3 Lendo as medianas]
|
v
[6.4 Descrição versus causa]
|
v
[6.5 Devolvendo a qualidade dos dados]
|
v
[Síntese]
|
v
[Exemplo resolvido] --> [Exercício EX036]
Objetivos de aprendizagem
Você vai (1) validar os dados estruturados recebidos antes da análise; (2) calcular e comparar medianas para dados de tempo assimétricos; (3) relatar tamanhos de efeito com incerteza honesta; (4) separar os achados descritivos das afirmações causais.
6.1 Validar primeiro
Os membros exportam objetos STIX 2.1 da coleção TAXII do CPSG junto com os registros de bloqueio. Antes de qualquer estatística, Lucía verifica se os objetos trazem as propriedades obrigatórias e identificadores bem formados. Os objetos malformados são contados e relatados à comunidade, não consertados em silêncio. O lote de demonstração de Lucía verifica três objetos, e só um passa. Na exportação completa do estudo, 94% dos indicadores eram válidos. Contar as falhas antes da análise diz ao leitor quanto dos dados do CPSG podia de fato contribuir com tempos. Um objeto inválido que um membro ainda assim bloqueou ou monitorou é contado no Objetivo 3, porque a decisão do membro aconteceu, embora o tempo de publicação dele não seja confiável.
Laboratório 2 — verificação de propriedades STIX
"""Lab 2 (ch 06): check synthetic STIX 2.1-style objects for common required properties."""
import json, re
objs = json.loads("""[
{"type":"indicator","spec_version":"2.1","id":"indicator--8e2e2d2b-17d4-4cbf-938f-98ee46b3cd3f",
"created":"2026-09-01T10:00:00.000Z","modified":"2026-09-01T10:00:00.000Z",
"pattern":"[domain-name:value = 'c2.example']","pattern_type":"stix","valid_from":"2026-09-01T10:00:00Z"},
{"type":"indicator","spec_version":"2.1","id":"indicator-123",
"created":"2026-09-02T10:00:00.000Z","modified":"2026-09-02T10:00:00.000Z","pattern_type":"stix"},
{"type":"threat-actor","id":"threat-actor--0f9c3a5e-6b1d-4c39-9a8e-2b9f6a7d1c11",
"created":"2026-09-03T10:00:00.000Z","modified":"2026-09-03T10:00:00.000Z","name":"SYNTH-CARRION"}
]""")
COMMON = ["type", "spec_version", "id", "created", "modified"]
EXTRA = {"indicator": ["pattern", "pattern_type", "valid_from"], "threat-actor": ["name"]}
for o in objs:
miss = [k for k in COMMON + EXTRA.get(o["type"], []) if k not in o]
bad_id = not re.fullmatch(o["type"] + r"--[0-9a-f-]{36}", o.get("id", ""))
probs = miss + (["id format"] if bad_id else [])
print(o.get("id"), "OK" if not probs else "PROBLEMS: " + ", ".join(probs))
Execute com python3 lab_stix.py. Saída verificada:
indicator--8e2e2d2b-17d4-4cbf-938f-98ee46b3cd3f OK
indicator-123 PROBLEMS: pattern, valid_from, id format
threat-actor--0f9c3a5e-6b1d-4c39-9a8e-2b9f6a7d1c11 PROBLEMS: spec_version
6.2 O que a verificação mostra
O primeiro indicador passa. O segundo não tem pattern nem valid_from e tem um identificador que não segue type--UUID. O objeto threat-actor não tem spec_version, que o STIX 2.1 exige nos objetos de domínio. Apenas os objetos válidos contribuem com valores de t_pub. Cada falha tem uma consequência diferente. Sem valid_from, o indicador não tem um tempo de publicação confiável e, portanto, não pode contribuir para o tempo até o bloqueio. Um identificador malformado quebra os vínculos entre objetos. A falta de spec_version sugere que a ferramenta de publicação é anterior ao STIX 2.1 ou está mal configurada, o que é um retorno útil para essa classe de membros.
Laboratório 3 — medianas do tempo até o bloqueio
"""Lab 3 (ch 06): median time-to-block (hours) for synthetic sharing-community members vs non-members."""
from statistics import median
members = [2.0, 3.5, 1.0, 6.0, 2.5, 4.0, 3.0]
non_members = [9.0, 14.0, 5.0, 22.0, 11.0, 8.0]
mm, mn = median(members), median(non_members)
print(f"members n={len(members)} median={mm:.1f}h")
print(f"non-members n={len(non_members)} median={mn:.1f}h")
print(f"difference={mn - mm:.1f}h ratio={mn / mm:.2f}")
Execute com python3 lab_ttb.py. Saída verificada:
members n=7 median=3.0h
non-members n=6 median=10.0h
difference=7.0h ratio=3.33
6.3 Lendo as medianas
Dados de tempo são assimétricos — alguns casos lentos dominam as médias —, por isso se relatam medianas. A mediana dos membros é de 3,0 horas; a dos não membros, de 10,0 horas: uma diferença de 7,0 horas, razão de 3,33. Com amostras de sete e seis, a incerteza é grande; um intervalo bootstrap ou um teste baseado em postos seria relatado ao lado das medianas. O texto de Lucía põe as medianas de 3,0 e 10,0 horas ao lado do seu intervalo, e não sozinhas em uma frase. Com seis não membros, um porto excepcionalmente lento pode mover a mediana em horas, então o intervalo diz aos membros quanto peso a diferença consegue suportar.
6.4 Descrição versus causa
O resultado descreve um bloqueio mais rápido entre os membros nesta amostra. Dados os fatores de confusão discutidos no Capítulo 3, Lucía escreve "está associado a", e não "causa", a menos que o estrato antes e depois mostre uma mudança consistente com a entrada. Os quatro portos que entraram no CPSG em 2025 são o estrato que poderia sustentar uma afirmação mais forte. Se cada um bloqueou mais rápido depois da entrada do que antes, com a mesma equipe e as mesmas ferramentas, a associação fica mais difícil de explicar por porte ou orçamento, embora ainda não prove a causa.
6.5 Devolvendo a qualidade dos dados
As contagens da validação são, elas mesmas, uma contribuição. Lucía envia ao CPSG uma nota curta de qualidade de dados listando quantos objetos não tinham propriedades obrigatórias, agrupados por classe de membro publicador, para que os produtores possam corrigir as exportações. A nota segue a mesma regra de agregação que a dissertação. Com 94% dos indicadores válidos na exportação completa, a nota pode dizer aos produtores que cerca de um objeto em cada dezessete não pôde contribuir com um tempo de publicação. Agrupar por classe de membro, e não por membro, mantém a nota dentro da regra de agregação do conselho.
Exemplo resolvido
Lucía relata: 3 objetos verificados, 1 válido no lote de demonstração; na exportação real do estudo (sintética), 94% dos indicadores eram válidos. Mediana do tempo até o bloqueio de 3,0 h para os membros contra 10,0 h para os não membros pareados, com as amostras pequenas sinalizadas.
Caso sintético. Todos os objetos, tempos e percentuais são inventados.
Erros e limites
Consertar dados malformados por palpite cria ficção. Relatar uma razão sem os tamanhos das amostras engana os leitores.
Exercícios
- EX036 — Objeto inválido. Que problemas o laboratório relata para
indicator-123?Mostrar critérios de avaliação
Rubrica: 3 = pattern, valid_from, formato do id; 2 = dois; 1 = um; 0 = nenhum. - EX037 — Problema do ator. Por que o objeto threat-actor falha?
Mostrar critérios de avaliação
Rubrica: 3 = falta spec_version, obrigatório no STIX 2.1; 2 = falta um campo; 1 = falta o nome; 0 = nenhum. - EX038 — Escolha da mediana. Por que relatar medianas, e não médias, para o tempo até o bloqueio?
Mostrar critérios de avaliação
Rubrica: 3 = dados assimétricos; valores extremos distorcem a média; 2 = vago; 1 = médias são melhores; 0 = nenhum. - EX039 — Citação das medianas. Cite as duas medianas e a razão do laboratório.
Mostrar critérios de avaliação
Rubrica: 3 = 3,0 h, 10,0 h, 3,33; 2 = dois; 1 = um; 0 = nenhum. - EX040 — Redação causal. Reescreva "a filiação ao CPSG corta o tempo de bloqueio em 70%" com a redação adequada.
Mostrar critérios de avaliação
Rubrica: 3 = associação + ressalva de tamanho da amostra/incerteza; 2 = apenas associação; 1 = inalterada; 0 = nenhuma. - EX041 — Ferramenta de incerteza. Nomeie um método para expressar a incerteza em torno de uma diferença de medianas.
Mostrar critérios de avaliação
Rubrica: 3 = IC bootstrap ou teste de postos (Mann–Whitney) corretamente descrito; 2 = apenas o nome; 1 = teste t sobre médias sem ressalva; 0 = nenhum. - EX042 — Tentação de consertar. Lucía deve inventar um
valid_fromigual acreatedpara o indicador quebrado?Mostrar critérios de avaliação
Rubrica: 3 = não; excluir e relatar o problema de qualidade de dados; 2 = não; 1 = sim; 0 = nenhum.
Síntese
Valide antes de contar, prefira medianas para tempos assimétricos, mostre os tamanhos das amostras e a incerteza e diga "está associado a" até que o desenho sustente mais.
Continue estudando — capítulo 06 de 08
← Capítulo 05 (rascunho) · Índice de capítulos do curso · Capítulo 07 (rascunho) →