Mapa da aula
Aula 03 publicada. Mapa, exemplo, EX015.
flowchart TD
N0["3.1 Tipos de contribuição"]
N1["3.2 O mecanismo como um invariante físico"]
N2["3.3 Modelo de atacante"]
N3["3.4 Hipóteses e limiares"]
N4["3.5 Linhas de base e rivais"]
N5["Síntese do capítulo"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5
N5 --> EX["Exemplo resolvido"]
EX --> Q["Exercício EX015"]
Desenho lógico
flowchart LR
N0["3.1 Tipos de contribuição"]
N1["3.2 O mecanismo como um invariante físico"]
N2["3.3 Modelo de atacante"]
N3["3.4 Hipóteses e limiares"]
N4["3.5 Linhas de base e rivais"]
N5["Síntese do capítulo"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> Q["EX015"]
[3.1 Tipos de contribuição]
|
v
[3.2 O mecanismo como um invariante físico]
|
v
[3.3 Modelo de atacante]
|
v
[3.4 Hipóteses e limiares]
|
v
[3.5 Linhas de base e rivais]
|
v
[Síntese do capítulo]
|
v
[Exemplo resolvido] --> [Exercício EX015]
Objetivos de aprendizagem e conexão
Ao final deste capítulo, você será capaz de (1) escolher o tipo de contribuição que a sua tese faz, (2) expressar um mecanismo de detecção como um invariante físico, (3) definir um modelo de atacante explícito, (4) declarar hipóteses com limiares e explicações rivais e (5) pré-declarar as condições sob as quais a sua contribuição falha. Ele transforma a lacuna do Capítulo 2 num estudo que o Capítulo 4 pode pilotar.
3.1 Tipos de contribuição
Uma tese de segurança de TO pode contribuir com um mecanismo (um novo detector ou proteção), uma medição (uma forma de quantificar o impacto ou a exposição), uma constatação empírica (como os operadores ou as plantas de fato se comportam) ou um princípio validado (uma regra de projeto que se mantém entre contextos). O Setpoint Study contribui com uma comparação apoiada em medições: ele não inventa o teste CUSUM (Page, 1954) nem a detecção baseada em resíduos (levantada por Giraldo et al.); ele testa quando um invariante entre sensores ajuda contra um objetivo de adversário específico e documentado — a manipulação da visão — e quantifica onde ele deixa de ajudar. Um posicionamento honesto desse tipo é uma força numa defesa, não uma fraqueza.
3.2 O mecanismo como um invariante físico
O tanque da Plant A obedece a um balanço de massa discreto: próximo nível = nível + entrada − saída, com saída ≈ 0,02 × nível através de um orifício fixo no modelo sintético (equilíbrio de 50 unidades quando a entrada é 1,0). Um transmissor de nível e um medidor de vazão medem grandezas diferentes produzidas pela mesma física. Se um atacante repete leituras antigas de nível enquanto força a bomba, a estimativa de nível prevista a partir do medidor de vazão diverge do nível relatado. O resíduo r = nível relatado − nível previsto deve ficar perto de zero em operação normal e afastar-se sob esse ataque. Um CUSUM acumula a magnitude do resíduo acima de uma folga k e alarma quando a soma excede um limiar h; ele é projetado para captar pequenos desvios persistentes que uma faixa fixa deixa passar.
O invariante tem um pressuposto embutido: o medidor de vazão é honesto. Se o atacante controla os dois sensores (ou o CLP que os relata), o invariante pode ser satisfeito por uma mentira coerente. Declarar esse pressuposto é o início do modelo de atacante.
3.3 Modelo de atacante
Escreva o modelo como capacidades, conhecimento e objetivo:
Tabela da aula; deslize para ver todas as colunas →
| Elemento | Pressuposto do Setpoint Study |
|---|---|
| Capacidades | Acesso de escrita ao comando da bomba e à leitura de nível no enlace SCADA (coerente com Modify Parameter e Spoof Reporting Message do ATT&CK for ICS); classe A: só o sensor de nível; classe B: sensores de nível e de vazão. |
| Conhecimento | Conhece os limites do alarme de faixa; na classe B, conhece também o detector. |
| Objetivo | Elevar o nível real enquanto mantém os valores exibidos normais (manipulação da visão). |
| Fora do escopo | Comprometimento da válvula boia mecânica; adulteração física. |
3.4 Hipóteses e limiares
- H1 (detecção): contra o replay da classe A, o CUSUM do resíduo detecta ≥95% dos episódios, com atraso médio ≤ 60 passos, enquanto o alarme de faixa detecta ≤ 10%.
- H2 (alarmes falsos): em 100 execuções nominais, o CUSUM do resíduo não produz mais execuções com alarme falso do que o alarme de faixa.
- H3 (impacto): o transbordamento real máximo na detecção é menor com o CUSUM do que com o alarme de faixa.
- H4 (condição de falha): contra a classe B, a detecção do CUSUM cai para ≤ 10% — a fronteira prevista da contribuição.
Os limiares são justificados, não decorativos: 60 passos correspondem, na base de tempo sintética, ao tempo que o transbordamento leva para atingir metade da margem até o trip de nível muito alto. H4 é uma hipótese que você quer poder confirmar: um método cujos limites são medidos é mais útil do que um cujos limites são desconhecidos.
3.5 Linhas de base e rivais
As linhas de base são (a) o alarme de faixa que a planta já tem, (b) um detector de rede que sinaliza qualquer escrita no registrador de nível — trivialmente eficaz se as escritas forem raras, inútil se o atacante fizer o replay no sensor — e (c) um oráculo com acesso ao nível real, que dá o melhor atraso possível. As explicações rivais para qualquer vantagem do CUSUM incluem o ajuste do limiar nos dados de teste, um simulador limpo demais e magnitudes de ataque escolhidas para favorecer o método. Cada rival recebe um teste no Capítulo 4 ou 5.
3.6 Exemplo resolvido e Laboratório 3
O Laboratório 3 implementa o modelo e os dois detectores para 100 execuções com sementes fixas por condição.
# Lab 3 - Setpoint Study (synthetic): fixed-band alarm vs. physics-residual CUSUM on one tank.
# Python 3 standard library only. Attack: pump forced to over-fill while the level sensor replays
# nominal values ("replay"); variant "replay+flow" also spoofs the inflow meter.
import random
def run(seed, attack, detector, steps=600, onset=300):
rng = random.Random(seed)
true_level, s, first_alarm, max_dev = 50.0, 0.0, None, 0.0
est = 50.0
for t in range(steps):
inflow = 1.0 + rng.gauss(0, 0.05)
if attack and t >= onset:
inflow += 0.05 # forced pump: hidden extra inflow
true_level += inflow - 0.02 * true_level
level_meas = true_level + rng.gauss(0, 0.3)
flow_meas = inflow + rng.gauss(0, 0.02)
if attack and t >= onset:
level_meas = 50.0 + rng.gauss(0, 0.3) # replayed nominal level
if attack == "replay+flow":
flow_meas = 1.0 + rng.gauss(0, 0.02)
est = est + flow_meas - 0.02 * est # mass-balance prediction from flow meter
if detector == "band":
hit = abs(level_meas - 50.0) > 1.5
else:
s = max(0.0, s + abs(level_meas - est) - 0.6)
hit = s > 6.0
if hit and first_alarm is None:
first_alarm = t
if t >= onset:
max_dev = max(max_dev, true_level - 50.0)
return first_alarm, max_dev
for det in ("band", "cusum"):
fa = sum(run(k, None, det)[0] is not None for k in range(100))
for atk in ("replay", "replay+flow"):
res = [run(k, atk, det) for k in range(100)]
hits = [a - 300 for a, _ in res if a is not None and a >= 300]
delay = f"{sum(hits)/len(hits):.1f}" if hits else "n/a"
print(f"{det:5s} {atk:11s} false_alarm_runs={fa}/100 detected={len(hits)}/100 "
f"mean_delay={delay} worst_true_overfill={max(d for _, d in res):.2f}")
Saída esperada:
band replay false_alarm_runs=9/100 detected=0/100 mean_delay=n/a worst_true_overfill=3.36
band replay+flow false_alarm_runs=9/100 detected=0/100 mean_delay=n/a worst_true_overfill=3.26
cusum replay false_alarm_runs=0/100 detected=100/100 mean_delay=31.8 worst_true_overfill=3.36
cusum replay+flow false_alarm_runs=0/100 detected=0/100 mean_delay=n/a worst_true_overfill=3.26
Lendo a saída em relação às hipóteses: H1 é apoiada no modelo (100/100, atraso de 31,8, contra 0/100); H2 é apoiada (0 contra 9 execuções com alarme falso — a faixa estreita de ±1,5 dispara com o ruído); H4 é confirmada (a classe B escapa completamente). O "worst true overfill" (pior transbordamento real) é o máximo ao longo de toda a janela do ataque, então H3 exige uma medição separada do transbordamento no instante do alarme — um exercício abaixo. Todos os números são propriedades de um modelo sintético, não de uma planta.
3.7 Erros comuns e limites
Alegar que um mecanismo é novo quando só a sua aplicação é; omitir o pressuposto do sensor honesto; escolher as magnitudes de ataque depois de ver o comportamento do detector; não ter nenhuma condição sob a qual a hipótese falhe.
Cada um desses erros tem um sintoma visível numa proposta: uma frase de contribuição que alega inventar o CUSUM, um modelo de atacante sem uma classe B, um ganho de ataque alterado depois que o Laboratório 3 foi executado ou uma lista de hipóteses sem H4. Leia a proposta em busca desses sintomas antes de enviá-la à banca e corrija-os enquanto o estudo ainda é barato de mudar.
Exercícios — capítulo 3
- EX015 — Posicionar a contribuição do Setpoint Study. Classifique o tipo de contribuição do Setpoint Study e escreva uma declaração de posicionamento de duas frases citando trabalhos anteriores.
Mostrar critérios de avaliação
Rubrica: 3 = comparação apoiada em medições + cita Page 1954 e Giraldo et al. 2018; 2 = tipo sem citações; 1 = alega inventar o CUSUM; 0 = nenhum. - EX016 — Nível de equilíbrio com vazão extra de entrada. Derive o nível de equilíbrio do tanque do Laboratório 3 quando a entrada é 1,05 e explique o que isso significa para o objetivo do atacante.
Mostrar critérios de avaliação
Rubrica: 3 = L*=52,5 e o atacante precisa de forçamento maior/saída bloqueada; 2 = só 52,5; 1 = equilíbrio errado; 0 = nenhum. - EX017 — Atacante de classe C contra os detectores. Estenda a tabela do modelo de atacante com um atacante de classe C que controla a própria lógica do CLP; preveja o resultado para cada detector.
Mostrar critérios de avaliação
Rubrica: 3 = a classe C evade a banda/CUSUM dentro do CLP; um CUSUM externo independente ainda detecta; 2 = evasão sem o caso externo; 1 = vago; 0 = nenhum. - EX018 — Transbordamento no momento do alarme para H3. Modifique o Laboratório 3 para registrar o transbordamento real no instante do alarme e teste H3.
Mostrar critérios de avaliação
Rubrica: 3 = transbordamento≈1,22 médio/1,60 máximo no alarme do CUSUM; a banda nunca dispara; H3 sustentada nessa configuração; 2 = números sem H3; 1 = só qualitativo; 0 = nenhum. - EX019 — Justificar um limiar de atraso para H1. Justifique um limiar de atraso diferente para H1 usando um nível de trip muito alto declarado e a taxa de transbordamento.
Mostrar critérios de avaliação
Rubrica: 3 = trip/margem/taxa → limiar≈60 passos com raciocínio; 2 = limiar sem derivação; 1 = número arbitrário; 0 = nenhum. - EX020 — Três rivais para uma vantagem do CUSUM. Liste três explicações rivais para uma vantagem do CUSUM e o teste que descartaria cada uma.
Mostrar critérios de avaliação
Rubrica: 3 = três rivais (ajuste, simulação limpa, escolha do ganho), cada um com um teste que o descarta; 2 = rivais sem testes; 1 = um rival; 0 = nenhum.
Síntese do capítulo
Uma proposta forte se posiciona com honestidade, expressa o mecanismo como um invariante físico, torna explícito o pressuposto do sensor honesto por meio de um modelo de atacante e pré-declara as hipóteses — incluindo a que marca onde a contribuição falha.