OpenCyber Academy
Graduação · Capítulo 6 · Português
Código do curso: OCA-114Capítulo 06: OCA-114-C006

Capítulo 6 — Estruturas discretas

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 06 publicada. Mapa, exemplo, EX016.

flowchart TD
  N0["6.1 Zonas e conduítes como grafo"]
  N1["6.2 Busca em largura"]
  N2["6.3 Arestas de corte"]
  N3["Síntese"]
  N0 --> N1 --> N2 --> N3
  N3 --> EX["Exemplo resolvido"]
  EX --> Q["Exercício EX016"]

Desenho lógico

flowchart LR
  N0["6.1 Zonas e conduítes como grafo"]
  N1["6.2 Busca em largura"]
  N2["6.3 Arestas de corte"]
  N3["Síntese"]
  N0 --> N1 --> N2 --> N3 --> Q["EX016"]
[6.1 Zonas e conduítes como grafo]
    |
    v
[6.2 Busca em largura]
    |
    v
[6.3 Arestas de corte]
    |
    v
[Síntese]
    |
    v
[Exemplo resolvido] --> [Exercício EX016]

Objetivos de aprendizagem

Você vai (1) modelar zonas e conduítes como um grafo dirigido; (2) calcular alcançabilidade com busca em largura; (3) raciocinar sobre qual remoção de uma única aresta desconecta um nó crítico; e (4) usar conjuntos para expressar listas de permissão.

6.1 Zonas e conduítes como grafo

A IEC 62443-3-2 pede que os proprietários de ativos dividam um sistema em zonas (grupos de ativos que compartilham requisitos de segurança) ligadas por conduítes (os canais de comunicação entre zonas). Um grafo dirigido captura isso: os nós são zonas, e as arestas são conduítes na direção em que uma sessão pode ser aberta. Um caminho da zona corporativa até a zona de segurança é uma pergunta de alcançabilidade no grafo, que se torna mecânica depois que o grafo é desenhado com honestidade. No grafo do laboratório, Maya registra os conduítes como pares ordenados, de modo que MeterGW→SCADA e Control→SIS sejam arestas visíveis, e não linhas num desenho.

6.2 Busca em largura

A busca em largura (BFS) visita um nó inicial, depois todos os seus vizinhos, depois os vizinhos deles, marcando cada nó visitado uma única vez. Ela roda em tempo proporcional ao número de nós mais o de arestas, de modo que até a lista de conduítes de uma grande refinaria é verificada instantaneamente. O perigo não está no algoritmo, mas na entrada: um modem esquecido de um fornecedor ou um laptop com duas interfaces é uma aresta que o diagrama omite.

"""Lab 06: reachability over a synthetic LDHP zone/conduit graph (BFS)."""
from collections import deque
CONDUITS = {"Enterprise": ["DMZ"], "DMZ": ["SCADA"], "SCADA": ["Control"],
            "Control": ["SIS"], "MeterCloud": ["MeterGW"], "MeterGW": ["SCADA"], "SIS": []}
def reach(src):
    seen, q = {src}, deque([src])
    while q:
        for n in CONDUITS.get(q.popleft(), []):
            if n not in seen: seen.add(n); q.append(n)
    return seen
for z in ["Enterprise", "MeterCloud", "SCADA"]:
    r = sorted(reach(z) - {z}); print(f"{z:10} -> {r}  SIS reachable: {'SIS' in r}")
CONDUITS["Control"] = []  # design change: SIS gets its own hardwired trip, no Control->SIS data conduit
print("after removing Control->SIS:", "SIS" in reach("Enterprise"))

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

Enterprise -> ['Control', 'DMZ', 'SCADA', 'SIS']  SIS reachable: True
MeterCloud -> ['Control', 'MeterGW', 'SCADA', 'SIS']  SIS reachable: True
SCADA      -> ['Control', 'SIS']  SIS reachable: True
after removing Control->SIS: False

Na LDHP, um modem de fornecedor que ninguém registrou, ou a EWS-1 ligada ao mesmo tempo às redes do escritório e de controle, acrescentaria uma aresta que o laboratório não tem como conhecer; a resposta da BFS só é tão verdadeira quanto a lista de conduítes.

6.3 Arestas de corte

Uma aresta cuja remoção desconecta as zonas expostas ao atacante da zona crítica é uma aresta de corte para esse par. No laboratório, Control→SIS é uma aresta assim: removê-la torna o SIS inalcançável a partir de Enterprise e de MeterCloud. A engenharia muitas vezes prefere remover por completo um conduíte de dados para um sistema de segurança e confiar em trips cabeados, que é exatamente o que a mudança de projeto do laboratório representa. A nota de Maya acrescenta o segundo passo: a aresta MeterGW→SCADA existe apenas para que o faturamento leia os totais de vazão, então substituí-la por uma exportação unidirecional a partir do historiador remove o outro caminho da nuvem de medidores em direção à zona de controle.

Exemplo resolvido (LDHP sintética)

O laboratório mostra a nuvem de medidores alcançando o SIS por MeterGW → SCADA → Control → SIS. Maya expressa a lista de conduítes como um conjunto de pares ordenados e observa que a aresta MeterGW→SCADA existe apenas para que o faturamento leia os totais de vazão. Substituí-la por uma exportação unidirecional a partir do historiador remove um segundo caminho; remover Control→SIS remove o último.

Caso sintético — Lakeside District Heating Plant. Os nomes de zonas e os conduítes do laboratório foram inventados para manter o grafo pequeno o bastante para ser conferido à mão.

Erros e limites

A alcançabilidade diz que uma sessão pode ser aberta, não que ela terá sucesso nem o que ela pode fazer. Desenhos não dirigidos escondem a diferença entre "o SCADA consulta o gateway" e "o gateway consegue se conectar ao SCADA".

Exercícios

Síntese

Desenhar zonas e conduítes como um grafo dirigido transforma argumentos de segmentação em verificações que qualquer pessoa pode executar de novo — desde que o grafo inclua todas as arestas reais.

Respostas comentadas

EX016. MeterCloud → MeterGW → SCADA → Control → SIS (cada nó tem uma única aresta de saída, então a ordem da fila é única).

EX017. Não: depois da mudança, Control não tem conduíte de saída, então a nova aresta Internet→Control não alcança o SIS. Ela, porém, expõe o controle no nível do CLP diretamente à internet, o que é um achado grave por si só.

EX018. {(HIST-1, PLC-H, read), (HMI-1, PLC-H, read), (HMI-1, PLC-H, write)}.