Capítulo 2 — Matemática discreta
Mapa da aula
Aula 02 publicada. Mapa, exemplo, EX004.
flowchart TD
N0["2.1 Conjuntos e relações"]
N1["2.2 Grafos e pivôs"]
N2["Laboratório 1 — grafo de pivôs"]
N3["2.3 Componentes"]
N4["Nota de prática — Pesos das arestas"]
N5["Síntese"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5
N5 --> EX["Exemplo resolvido"]
EX --> Q["Exercício EX004"]
Desenho lógico
flowchart LR
N0["2.1 Conjuntos e relações"]
N1["2.2 Grafos e pivôs"]
N2["Laboratório 1 — grafo de pivôs"]
N3["2.3 Componentes"]
N4["Nota de prática — Pesos das arestas"]
N5["Síntese"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> Q["EX004"]
[2.1 Conjuntos e relações]
|
v
[2.2 Grafos e pivôs]
|
v
[Laboratório 1 — grafo de pivôs]
|
v
[2.3 Componentes]
|
v
[Nota de prática — Pesos das arestas]
|
v
[Síntese]
|
v
[Exemplo resolvido] --> [Exercício EX004]
Objetivos de aprendizagem
Você vai (1) representar relações de inteligência como um grafo; (2) calcular a alcançabilidade com busca em largura; (3) relacionar os pivôs no grafo ao Diamond Model; (4) explicar por que componentes desconexos importam para alegações de atribuição.
2.1 Conjuntos e relações
Um conjunto de indicadores é um conjunto; "o evento usa a infraestrutura" é uma relação. União, interseção e diferença permitem aos engenheiros comparar feeds; as relações permitem ligar eventos. O STIX 2.1 expressa relações explicitamente por meio de objetos de relacionamento como "indicates" ou "uses". Kofi compara dois feeds de parceiros pela interseção de seus conjuntos de domínios. A sobreposição lhe diz quanto o segundo feed acrescenta; a diferença mostra o que apenas um parceiro viu. A união é o que o Lantern precisa armazenar. As relações carregam mais do que pertinência: um par como um indicador e o malware que ele indica diz como duas coisas estão ligadas, e o tipo dessa ligação importa quando um analista decide depois até que ponto confiar nela.
2.2 Grafos e pivôs
Trate eventos, infraestrutura, capacidades e vítimas como nós, e suas ligações como arestas. O Diamond Model de Caltagirone, Pendergast e Betz descreve o pivô analítico exatamente ao longo dessas arestas: de um evento para sua infraestrutura, da infraestrutura para outros eventos. A busca em largura conta saltos, o que é um limite natural para o quanto um analista deve confiar em uma cadeia de inferências. Por isso a contagem de saltos do laboratório funciona também como medida de confiança. A um salto de um evento está algo que a evidência mostra diretamente; três saltos são uma cadeia de inferências, cada uma das quais pode estar errada.
Laboratório 1 — grafo de pivôs
"""Lab 1 (ch 02): breadth-first pivot over a synthetic Diamond-style relationship graph."""
from collections import deque
edges = [("event-1", "c2.example"), ("c2.example", "event-4"), ("event-4", "victim-B"),
("event-1", "victim-A"), ("event-7", "loader-x"), ("loader-x", "event-9")]
g = {}
for a, b in edges:
g.setdefault(a, set()).add(b); g.setdefault(b, set()).add(a)
def reach(start, max_hops):
seen, q = {start: 0}, deque([start])
while q:
n = q.popleft()
if seen[n] == max_hops:
continue
for m in sorted(g[n]):
if m not in seen:
seen[m] = seen[n] + 1; q.append(m)
return seen
for node, hops in sorted(reach("event-1", 3).items(), key=lambda x: (x[1], x[0])):
print(hops, node)
print("event-7 reachable:", "event-7" in reach("event-1", 10))
Execute com python3 lab_graph.py. Saída verificada:
0 event-1
1 c2.example
1 victim-A
2 event-4
3 victim-B
event-7 reachable: False
2.3 Componentes
O event-7 e seu loader não são alcançáveis a partir do event-1. Dois componentes significam que nenhuma evidência neste grafo liga as atividades. Alegações de que ambas pertencem a uma mesma campanha precisam de novas evidências, e não de arestas desejadas. A saída do laboratório mostra essa separação com clareza: a busca a partir do event-1 nunca alcança o event-7, por mais saltos que permita. Um analista ainda pode suspeitar de uma ligação, talvez porque os dois loaders se comportam de modo parecido, mas essa suspeita pertence às anotações, como hipótese a testar. Desenhar uma aresta sem evidência faria o grafo concordar com o analista e não ensinaria nada a ninguém. Se chegar uma nova evidência, como um certificado compartilhado, a aresta é acrescentada com sua fonte, e os componentes se fundem de forma registrada.
2.4 Limites de saltos
Cada salto acrescenta incerteza. O Lantern limita os pivôs automáticos a três saltos e rotula qualquer coisa além disso como hipótese do analista. O limite decorre de uma aritmética simples. Se cada ligação está certa nove vezes em dez, uma cadeia de três saltos está certa apenas cerca de sete vezes em dez, e uma cadeia de cinco saltos, pouco mais da metade das vezes. Pivôs automáticos além de três saltos encheriam os relatórios de ligações com a mesma chance de estarem erradas ou certas. Um analista ainda pode seguir uma cadeia mais longa à mão, mas o resultado é rotulado como hipótese, e o raciocínio de cada salto extra fica registrado para que um revisor possa conferi-lo.
Nota de prática — Pesos das arestas
Nem toda aresta merece a mesma confiança. O Lantern pondera uma aresta pela especificidade: um certificado autoassinado único compartilhado por dois servidores é uma ligação forte; um resolvedor público popular quase não é ligação. A alcançabilidade ponderada permite ao analista perguntar quais nós são alcançáveis apenas por arestas fortes, o que costuma encolher um grafo de campanha dramático até algo defensável.
Exemplo resolvido
Kofi executa o pivô a partir do event-1. Em até três saltos, ele alcança c2.example, victim-A, event-4 e victim-B. Ele relata que victim-B está ligada ao event-1 apenas por infraestrutura compartilhada, uma cadeia de três saltos, e recomenda notificar o contato setorial de victim-B com essa ressalva.
Caso sintético. Todos os nós são inventados.
Erros e limites
Infraestrutura compartilhada, como um grande provedor de hospedagem, cria ligações falsas; pondere as arestas pela especificidade. Alcançabilidade no grafo não é atribuição.
Exercícios
- EX004 — Contagem de saltos. Em quantos saltos o laboratório alcança victim-B? Rubrica: 3 = 3; 2 = correto, sem explicar o caminho; 1 = errado; 0 = nenhuma.
- EX005 — Componente separado. O que "event-7 reachable: False" implica para uma alegação de campanha? Rubrica: 3 = nenhuma evidência de ligação no grafo; a alegação precisa de novas evidências; 2 = parcial; 1 = mesma campanha; 0 = nenhuma.
- EX006 — Armadilha da hospedagem compartilhada. Por que uma aresta por um IP de uma grande hospedagem compartilhada pode criar uma ligação falsa? Rubrica: 3 = muitos clientes sem relação entre si o compartilham; baixa especificidade; 2 = vago; 1 = sem problema; 0 = nenhuma.
Síntese
Conjuntos comparam, grafos ligam, saltos custam confiança, e componentes desconexos são um silêncio honesto.
Continue estudando — capítulo 02 de 50
← Capítulo 01 (rascunho) · Índice de capítulos do curso · Capítulo 03 (rascunho) →