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
- EX067 — Falha aberta. Um teste que prove a falha fechada. Rubrica: 3 = remover a política, esperar negação+alerta; 2 = ideia; 1 = vago; 0 = nada.
- EX068 — STRIDE. Mitigação do repúdio nos eventos de negação. Rubrica: 3 = ator autenticado + log imutável; 2 = só logging; 1 = vago; 0 = nada.
- EX069 — Fronteira. Por que o STRIDE do programa não justifica um módulo de exploit? Rubrica: 3 = objetivo diferente/fronteira de segurança; 2 = parcial; 1 = justifica; 0 = nada.
Síntese
Analise como o seu programa pode ferir a planta ou mentir; mitigue isso primeiro.