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
- EX016 — Seguindo uma BFS à mão. Liste a ordem em que a BFS a partir de MeterCloud visita os nós no grafo original.
Mostrar critérios de avaliação
Rubrica: 3 = MeterCloud, MeterGW, SCADA, Control, SIS; 2 = conjunto certo, ordem errada; 1 = falta um nó; 0 = nada. - EX017 — Um modem de fornecedor omitido. Um modem de fornecedor dá à internet um conduíte direto para Control. Depois da mudança de projeto do laboratório, o SIS é alcançável a partir da internet?
Mostrar critérios de avaliação
Rubrica: 3 = não, Control não tem aresta de saída para o SIS depois da mudança, mas o próprio Control agora está exposto; 2 = só "não"; 1 = "sim"; 0 = nada. - EX018 — Lista de permissão como conjunto. Expresse "o HIST-1 pode ler do PLC-H; a HMI-1 pode ler e escrever no PLC-H" como um conjunto de tuplas (origem, destino, ação).
Mostrar critérios de avaliação
Rubrica: 3 = três tuplas, nada a mais; 2 = pequeno excesso; 1 = usa faixas de hosts; 0 = nada.
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.