OpenCyber Academy
Engenharia · Capítulo 23 · Português
Código do curso: OCA-137Capítulo 23: OCA-137-C023

Capítulo 23 — Segurança de TO, IoT e sistemas ciberfísicos: análise de ameaças e de falhas

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 23 publicada. Mapa, exemplo, EX067.

flowchart TD
  N0["23.1 O programa pode falhar de forma perigosa"]
  N1["23.2 STRIDE sobre as ferramentas do CNHP"]
  N2["23.3 As ameaças à planta ficam na análise de perigos"]
  N3["Nota prática"]
  N4["23.1b Abuso versus mau uso e backlog"]
  N5["Síntese"]
  N0 --> N1 --> N2 --> N3 --> N4 --> N5
  N5 --> EX["Exemplo resolvido"]
  EX --> Q["Exercício EX067"]

Desenho lógico

flowchart LR
  N0["23.1 O programa pode falhar de forma perigosa"]
  N1["23.2 STRIDE sobre as ferramentas do CNHP"]
  N2["23.3 As ameaças à planta ficam na análise de perigos"]
  N3["Nota prática"]
  N4["23.1b Abuso versus mau uso e backlog"]
  N5["Síntese"]
  N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> Q["EX067"]
[23.1 O programa pode falhar de forma perigosa]
    |
    v
[23.2 STRIDE sobre as ferramentas do CNHP]
    |
    v
[23.3 As ameaças à planta ficam na análise de perigos]
    |
    v
[Nota prática]
    |
    v
[23.1b Abuso versus mau uso e backlog]
    |
    v
[Síntese]
    |
    v
[Exemplo resolvido] --> [Exercício EX067]

Objetivos de aprendizagem

Você vai (1) enumerar as falhas do próprio programa de segurança de TO; (2) usar uma passada leve de STRIDE sobre as ferramentas; (3) alimentar os requisitos com os resultados sem construir módulos de exploit.

23.1 O programa pode falhar de forma perigosa

Listas de permissões que falham abertas, verificação de alcançabilidade pulada na integração contínua, detectores com tempestades silenciosas de alarmes falsos, adiamentos de correções sem data — isso ameaça a segurança de processo e a honestidade, não só a confidencialidade de uma ferramenta.

Lena lista essas falhas primeiro na análise de ameaças do CNHP, porque elas poderiam ferir a planta pelas mesmas ferramentas feitas para protegê-la. Um monitor que falha aberto deixaria escritas não autorizadas chegarem ao PLC-A enquanto todos acreditavam que estavam bloqueadas. Uma verificação de alcançabilidade pulada na integração contínua deixaria um novo conduto para o SIS-B ser integrado sem ser visto. Cada falha recebe um requisito e um teste.

23.2 STRIDE sobre as ferramentas do CNHP

Falsificação (spoofing): conta de engenharia falsa. Adulteração: editar a exportação do firewall depois do lacre. Repúdio: nenhum ator nos eventos de negação. Divulgação de informação: réplica do historiador legível por todos. Negação de serviço: um scanner inunda um tronco. Elevação: uma única pessoa consegue publicar um conduto para o SIS. Cada linha recebe um requisito de mitigação.

Lena roda a análise em cada ferramenta do CNHP e registra as linhas no backlog com donos. Para a ABP, as linhas mais graves foram o monitor falhando aberto e uma única pessoa publicando um conduto para o SIS-B; elas viraram o requisito S-1 e a condição de dupla aprovação nas mudanças de condutos. Cada linha é revista de novo quando a sua mitigação é entregue.

23.3 As ameaças à planta ficam na análise de perigos

As ameaças ao processo pertencem à análise de perigos do processo da planta e ao HAZOP informado por cibersegurança, não a funcionalidades de uma ferramenta de estudante. Não construa exploração automatizada para satisfazer uma linha do STRIDE.

# Lab 27 - residual CUSUM vs band on batch reactor level (synthetic)
import random
def run(seed, atk, det, k=0.8, h=6.0):
    rng=random.Random(seed); true=est=50.0; s=0.0; alarm=None
    for t in range(500):
        inflow=1.0+rng.gauss(0,0.05)+(0.08 if atk and t>=250 else 0)
        true+=inflow-0.02*true
        lvl=true+rng.gauss(0,0.3); fm=inflow+rng.gauss(0,0.02)
        if atk and t>=250: lvl=50+rng.gauss(0,0.3)
        if atk=="B" and t>=250: fm=1.0+rng.gauss(0,0.02)
        est+=fm-0.02*est
        hit=abs(lvl-50)>2.0 if det=="band" else False
        if det=="cusum":
            s=max(0.0,s+abs(lvl-est)-k); hit=s>h
        if hit and alarm is None: alarm=t
    return alarm
for det in ("band","cusum"):
    fa=sum(run(i,None,det) is not None for i in range(60))
    for atk in ("A","B"):
        hits=[a-250 for a in (run(i,atk,det) for i in range(60)) if a is not None and a>=250]
        print(f"{det} class{atk} FA={fa}/60 det={len(hits)}/60 mean_delay={sum(hits)/len(hits) if hits else float('nan'):.1f}")

Saída esperada:

band classA FA=0/60 det=0/60 mean_delay=nan
band classB FA=0/60 det=0/60 mean_delay=nan
cusum classA FA=0/60 det=60/60 mean_delay=24.8
cusum classB FA=0/60 det=0/60 mean_delay=nan

Caso sintético — Ashford Batch Plant. A linha do STRIDE "falha aberta" virou o requisito de segurança física S-1. A linha "publicação solitária de conduto" virou a condição de dupla aprovação.

Lena repassa as ameaças à planta ao engenheiro de segurança de processo para a análise de perigos. Ela fornece fatos sobre as ferramentas e a rede, como quais zonas alcançam o PLC-A, e o engenheiro julga as consequências para o processo. Nada nas ferramentas do CNHP simula um ataque ao processo.

23.4 Erros e limites

O STRIDE é um estímulo, não uma prova. Revise-o ao acrescentar uma nova fronteira de confiança (por exemplo, um historiador SaaS de um fornecedor).

Lena repete a análise sempre que o CNHP acrescenta uma fronteira de confiança, como um novo caminho de acesso remoto para um fornecedor ou uma mudança no destino dos alertas. As linhas das revisões anteriores são mantidas, para que a equipe veja quais ameaças foram acrescentadas, quais mitigações foram construídas e quais continuam abertas. Uma tabela STRIDE nunca prova que uma ferramenta é segura; os testes e as revisões é que fazem isso.

Nota prática

Inclua no modelo o comprometimento do host de salto: credenciais de curta duração, listas de permissões de saída, revogação rápida. Se a resposta for apenas confiar no host de salto, a análise está incompleta.

23.1b Abuso versus mau uso e backlog

Casos de abuso são ações intencionais de um adversário contra as ferramentas do CNHP. Casos de mau uso são engenheiros honestos cometendo erros perigosos, como digitar uma faixa de setpoint mais larga do que a receita permite. Projete controles para os dois. As linhas do STRIDE viram issues com ligações para os requisitos. As linhas de mau uso costumam virar regras de validação; as de abuso costumam virar controles de acesso.

Alimentar o backlog significa que cada linha do STRIDE tem um dono e um prazo. Na ABP, o caso de mau uso de um engenheiro colando o CIDR de um parceiro no arquivo de condutos virou uma regra de validação que rejeita faixas fora do plano de endereçamento da planta.

Os dois tipos alimentam o backlog.

Exercícios

Síntese

Analise como o seu programa pode ferir a planta ou mentir; mitigue isso primeiro.

Respostas comentadas

EX067. Implantar com o caminho da lista de permissões apontando para uma montagem vazia; chamar permit(); esperar DENY policy-unavailable e um alerta; nenhum quadro encaminhado.

EX068. Todo evento de negação guarda o id do ator autenticado e a versão da política; o armazenamento é somente de acréscimo; exclusões exigem quebra de vidro com controle duplo.

EX069. O STRIDE do programa protege a integridade da avaliação e a segurança de processo; módulos de exploit aumentam o dano de uso dual e violam a fronteira do curso — não são mitigações.