Capítulo 6 — Estruturas discretas
Mapa da aula
Aula 06 publicada. Mapa, exemplo, EX016.
flowchart TD
N0["6.1 Grafos de acesso"]
N1["6.2 Relações de fluxo"]
N2["6.3 Árvores de decisão"]
N3["6.4 Equivalência"]
N4["6.5 Ordenação"]
N5["6.7 Nota aplicada"]
N6["6.8 Conjuntos de corte"]
N7["6.9 Evidência das arestas"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> N7
N7 --> EX["Exemplo resolvido"]
EX --> Q["Exercício EX016"]
Desenho lógico
flowchart LR
N0["6.1 Grafos de acesso"]
N1["6.2 Relações de fluxo"]
N2["6.3 Árvores de decisão"]
N3["6.4 Equivalência"]
N4["6.5 Ordenação"]
N5["6.7 Nota aplicada"]
N6["6.8 Conjuntos de corte"]
N7["6.9 Evidência das arestas"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> N7 --> Q["EX016"]
[6.1 Grafos de acesso]
|
v
[6.2 Relações de fluxo]
|
v
[6.3 Árvores de decisão]
|
v
[6.4 Equivalência]
|
v
[6.5 Ordenação]
|
v
[6.7 Nota aplicada]
|
v
[6.8 Conjuntos de corte]
|
v
[6.9 Evidência das arestas]
|
v
[Exemplo resolvido] --> [Exercício EX016]
Objetivos de aprendizagem
Você vai (1) modelar o acesso como grafos; (2) usar relações para matrizes de fluxo; (3) aplicar árvores às decisões de parada.
6.1 Grafos de acesso
Os nós são principais e sistemas; as arestas são "pode autenticar" ou "pode alcançar". Um caminho da Internet até o ledger-db que contorna os jump hosts é um candidato a achado. No TRB, o grafo pode mostrar a internet alcançando a camada web, a camada web alcançando a API central e o jump host alcançando a administração vizinha do razão. Uma aresta extra da camada web diretamente para o ledger-db cria um caminho que pula o jump host, e esse caminho é o achado, tenha ou não algum host isolado uma vulnerabilidade conhecida. Sam desenha apenas arestas sustentadas pelo inventário ou por evidência de varredura autorizada, para que cada caminho possa ser defendido.
6.2 Relações de fluxo
Os fluxos aprovados são uma relação R ⊆ Src × Dst. Os fluxos observados devem ser subconjuntos de R quando a matriz é imposta. Para o TRB, R pode incluir (camada web, API central) e (jump host, administração do razão), mas não (camada web, ledger-db). Se os fluxos observados incluem um par fora de R, ou a matriz não está sendo imposta, ou R está incompleta. O laboratório de Sam compara os dois conjuntos e lista as diferenças, e cada diferença vira uma pergunta para o dono da rede, e não um achado automático, porque um fluxo aprovado, mas não documentado, é uma correção de documentação.
6.3 Árvores de decisão
Árvores de parada: se o dono pede parada → interromper; senão, se houver indisponibilidade inexplicada → interromper; senão, continuar sob as ROE. Escrever a árvore antes de uma janela elimina a discussão durante ela. Se o dono do sistema de empréstimos diz pare, Sam interrompe na hora, sem perguntar por quê. Se uma indisponibilidade inexplicada aparece em qualquer host dentro do escopo, ele interrompe e relata, mesmo que a indisponibilidade talvez não tenha relação. Só quando nenhuma das condições vale o teste continua, e continuar ainda exige que o método seja permitido pelas ROE. Cada passagem pela árvore de parada é registrada com o horário e o resultado, para que o log da janela mostre por que o teste continuou ou parou.
6.4 Equivalência
Hosts da mesma classe de endurecimento podem compartilhar cartões de método — mas só se as ROE os agruparem. Se as ROE do TRB agrupam dez servidores web numa única classe de endurecimento, Sam pode aplicar os mesmos cartões de método aos dez e relatar os resultados por classe. Se as ROE os listam separadamente, talvez porque dois hospedam páginas de pagamento, ele precisa tratar cada um como distinto. A equivalência é uma decisão que o dono toma por escrito, não um atalho que o testador presume porque dois hosts parecem iguais vistos de fora.
6.5 Ordenação
A classificação de severidade usa pontuações ordenadas; os empates são desfeitos pelo id do achado, para haver determinismo (lab_rank). Sem um critério de desempate fixo, dois achados com a mesma pontuação poderiam trocar de lugar entre execuções, e o material do conselho mostraria um item diferente no topo a cada vez que fosse regenerado. Desempatar pelo ID do achado faz o lab_rank produzir a mesma ordem a partir dos mesmos dados, de modo que uma mudança na classificação sempre significa uma mudança nas pontuações. Sam registra o esquema de pontuação no relatório para que os leitores saibam o que a ordem significa.
6.6 Limites
Os grafos omitem a engenharia social, a menos que as ROE a incluam. Um grafo de arestas de rede e de autenticação não diz nada sobre um funcionário de agência que poderia ser convencido por telefone a aprovar um pagamento. Se as ROE excluem a engenharia social, Sam declara que o grafo cobre apenas caminhos técnicos, para que o conselho não leia "nenhum caminho encontrado" como "nenhuma forma de entrar". A limitação fica no mesmo slide do grafo, em palavras simples. A engenharia social, se autorizada depois, acrescentaria novas arestas ao mesmo grafo.
6.7 Nota aplicada
Os grafos de alcançabilidade anotam as arestas com "autenticada" ou "só de rede". Uma aresta só de rede para hosts vizinhos do razão eleva a severidade mesmo sem credenciais, porque um roubo de credenciais em outro lugar completa o caminho. Os primeiros grafos de Sam não tinham essa anotação e subclassificaram um achado. Depois da correção, toda aresta para um nó vizinho dos pagamentos traz sua anotação, e o lab_rank dá mais peso às arestas só de rede para a camada do razão. O achado antes subclassificado foi repontuado e reenviado com uma nota explicando a mudança, para que os leitores da primeira versão não ficassem com a classificação mais baixa.
6.8 Conjuntos de corte
Para os nós vizinhos dos pagamentos, Sam procura conjuntos de corte de arestas cuja remoção os isolaria da Internet. Essas arestas se tornam prioridades de monitoramento e controle mesmo quando não são "vulneráveis" no sentido de um scanner. Para o ledger-db, o conjunto de corte acabou sendo de duas arestas: a conexão direta da camada web e o acesso administrativo que contornava o jump host. Remover essas duas isola o razão dos caminhos voltados para a internet. Monitorá-las custa muito menos do que vigiar todo host. Essas duas arestas são também as que o F3 e a regra do jump host tratam.
6.9 Evidência das arestas
Cada aresta crítica do grafo cita a fonte de inventário ou de varredura sob as ROE. Arestas sem fonte são removidas. Uma fonte pode ser uma entrada do registro de ativos, uma exportação de regras de firewall ou um resultado de varredura autorizada com sua data. Uma aresta desenhada de memória ou por suposição não pode ser verificada; por isso, não pode sustentar um achado, e deixá-la faria o grafo inteiro parecer mais certo do que é. Quando falta uma fonte, Sam pergunta ao dono e só devolve a aresta ao grafo com evidência.
6.10 Encontrando o conjunto de corte
Ao traçar um caminho de um modelo de PC de agência comprometido até o ledger-db, Sam encontra quatro arestas. Remover a aresta web→razão (F3) e exigir o jump host para a administração corta os caminhos perigosos restantes. O grafo não precisava de cinquenta nós — precisava do conjunto de corte. Mostrar quatro arestas e o conjunto de corte fez a discussão da correção levar minutos em vez de uma hora, porque os donos podiam ver exatamente quais duas mudanças importavam.
Os slides de conjunto de corte de Sam usam no máximo seis arestas. Ele apaga o resto na frente do público para ensinar foco. Um slide com cinquenta arestas esconde as duas que importam; um slide com seis torna o conjunto de corte visível para um executivo em segundos. Apagar as arestas ao vivo também mostra que as removidas eram contexto, não evidência. Sam mantém o grafo completo no apêndice, com fontes para cada aresta, para que os engenheiros ainda possam conferir seu raciocínio e nada fique escondido da revisão.
Exemplo resolvido (TRB sintético)
Sam desenha web → ledger-db como uma aresta que não está em R; o lab_flows depois marca o mesmo par como UNAPPROVED.
Caso sintético — Riverstone Transit Bank (TRB). O banco, Sam Ito, TrackScope/FindingsDesk/PulseMap e todos os números são inventados para fins didáticos.
Erros e limites
Este livro não concede nenhuma autoridade para testar bancos ou sistemas de pagamento reais. Os laboratórios usam apenas endereços de faixas de documentação e dados sintéticos; código de exploit nunca é fornecido.
Exercícios
- EX016 — Visão de relação. O que um fluxo UNAPPROVED significa em termos de relação? Rubrica: 3 = par observado que não está na relação aprovada R; 2 = parcial; 1 = aprovado; 0 = nada.
- EX017 — Encontrar caminhos. Por que um caminho Internet→web→razão importa? Rubrica: 3 = travessias de fronteiras de confiança / alcançabilidade além da intenção; 2 = parcial; 1 = irrelevante; 0 = nada.
- EX018 — Desempate. Como o lab_rank desempata pontuações iguais? Rubrica: 3 = pelo id do achado; 2 = aleatório; 1 = tamanho do título; 0 = nada.
Síntese
Grafos e relações tornam precisos os achados de arquitetura e de fluxo.
Continue estudando — capítulo 06 de 40
← Capítulo 05 (rascunho) · Índice de capítulos do curso · Capítulo 07 (rascunho) →