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

Capítulo 6 — Segurança de TO, IoT e sistemas ciberfísicos: avaliação controlada

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, EX026.

flowchart TD
  N0["6.1 Os mesmos dados, dois tratamentos"]
  N1["6.2 Lendo o resultado"]
  N2["6.3 Tomando a decisão"]
  N3["6.4 Ameaças à validade"]
  N4["Síntese"]
  N0 --> N1 --> N2 --> N3 --> N4
  N4 --> EX["Exemplo resolvido"]
  EX --> Q["Exercício EX026"]

Desenho lógico

flowchart LR
  N0["6.1 Os mesmos dados, dois tratamentos"]
  N1["6.2 Lendo o resultado"]
  N2["6.3 Tomando a decisão"]
  N3["6.4 Ameaças à validade"]
  N4["Síntese"]
  N0 --> N1 --> N2 --> N3 --> N4 --> Q["EX026"]
[6.1 Os mesmos dados, dois tratamentos]
    |
    v
[6.2 Lendo o resultado]
    |
    v
[6.3 Tomando a decisão]
    |
    v
[6.4 Ameaças à validade]
    |
    v
[Síntese]
    |
    v
[Exemplo resolvido] --> [Exercício EX026]

Objetivos de aprendizagem

Você vai (1) planejar uma comparação controlada de dois conjuntos de regras de alerta sobre o mesmo replay rotulado; (2) estimar a revocação e a taxa de alertas falsos de cada um; (3) calcular um intervalo de confiança de bootstrap para a diferença; e (4) decidir se as evidências justificam uma mudança em produção.

6.1 Os mesmos dados, dois tratamentos

Comparar o conjunto de regras A (atual) com o conjunto de regras B (proposto) em semanas diferentes de dados confunde as regras com as semanas. Uma avaliação controlada reproduz as mesmas janelas rotuladas nos dois. Os rótulos vêm de um plano de testes: 40 janelas contêm comportamento de ataque injetado no replay, e 160 são operação normal.

"""Lab 06: controlled evaluation of two alerting rule sets on the same synthetic replay, with bootstrap CI."""
import random
rnd = random.Random(6)
# 200 labelled replay windows: (is_attack, alert_by_A, alert_by_B)
data = []
for i in range(200):
    att = i < 40
    a = rnd.random() < (0.70 if att else 0.08)
    b = rnd.random() < (0.85 if att else 0.05)
    data.append((att, a, b))
def recall(rows, k): at = [r for r in rows if r[0]]; return sum(r[k] for r in at) / len(at)
def far(rows, k): be = [r for r in rows if not r[0]]; return sum(r[k] for r in be) / len(be)
print(f"A recall={recall(data,1):.3f} false-alert rate={far(data,1):.3f}")
print(f"B recall={recall(data,2):.3f} false-alert rate={far(data,2):.3f}")
diffs = []
for _ in range(2000):
    s = [rnd.choice(data) for _ in data]
    if any(r[0] for r in s): diffs.append(recall(s, 2) - recall(s, 1))
diffs.sort()
print(f"recall difference B-A 95% bootstrap CI: [{diffs[50]:.3f}, {diffs[1949]:.3f}]")

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

A recall=0.650 false-alert rate=0.069
B recall=0.850 false-alert rate=0.037
recall difference B-A 95% bootstrap CI: [0.000, 0.388]

O plano de testes deve ser escrito antes de o replay ser construído, nomeando os comportamentos de ataque, quantas janelas cada um recebe e quem as rotula. Idealmente, a pessoa que injeta os ataques não projetou nenhum dos conjuntos de regras. O Laboratório 6 faz esse papel com resultados aleatórios de semente fixa, então seus números mostram o método, e não o desempenho real das regras da BWRP.

6.2 Lendo o resultado

A revocação de B é 0,85 contra 0,65 de A, e sua taxa de alertas falsos é menor (3,7 % vs 6,9 %). O intervalo de bootstrap para a diferença de revocação vai de 0,000 a 0,388: a extremidade inferior toca o zero. Com apenas 40 janelas de ataque, não podemos descartar que B não seja melhor do que A em revocação, mesmo que a estimativa pontual o favoreça fortemente. Cada janela reamostrada carrega os resultados dos dois conjuntos de regras, então o bootstrap acima já preserva o pareamento; um teste exato sobre as janelas em que A e B discordam seria a verificação cruzada natural.

Relate as contagens ao lado das taxas, para que o leitor possa julgar as evidências: 34 de 40 contra 26 de 40 janelas de ataque, e 6 contra 11 de 160 janelas normais. Com tão poucas janelas de ataque, um punhado de resultados diferentes mudaria o quadro. Esse é o principal motivo pelo qual Daniel pede um replay maior e construído de forma independente antes da próxima revisão.

6.3 Tomando a decisão

Os líderes raramente precisam de certeza estatística para agir; precisam conhecer o risco de cada escolha. B é mais barato em alertas falsos e provavelmente melhor em revocação. A desvantagem de trocar — se B, na verdade, não fosse melhor — é pequena. Daniel recomenda a troca, ampliando o conjunto de janelas de ataque para 120 antes da próxima revisão.

A decisão fica mais fácil porque B também produz menos alertas falsos, que os operadores notam em todo turno. Daniel registra a recomendação com a sua incerteza, define a data da próxima revisão e nomeia o colega que vai construir as 120 janelas de ataque. Se o replay maior não mostrar vantagem em revocação, a decisão é revista, e não defendida.

6.4 Ameaças à validade

Os ataques injetados refletem a imaginação de quem escreveu os testes; adversários reais podem ser diferentes. O replay omite a reação dos operadores. O conjunto de regras B foi projetado depois de ver alguns desses tipos de ataque, o que o favorece.

Cada ameaça tem um remédio parcial. Peça a um colega que não projetou B que escreva novas janelas de ataque. Registre que o replay mede alertas, e não se os operadores agem com base neles. Registre quais tipos de ataque informaram o projeto de B e relate os resultados de B nesses tipos separadamente dos demais, para que o leitor veja se a sua vantagem se mantém em comportamentos não vistos.

Exemplo resolvido (BWRP sintética)

Nota de avaliação de Daniel: "Replay R-6 (200 janelas, 40 de ataque, semente 6). B: revocação 34/40, alertas falsos 6/160. A: revocação 26/40, alertas falsos 11/160. IC de bootstrap de 95 % para a diferença de revocação [0,000, 0,388]. Recomendação: adotar B; ampliar para 120 janelas de ataque construídas por um colega que não projetou B."

Caso sintético — Bayside Water Reclamation Plant. Os rótulos do replay e os resultados dos alertas são gerados pelo script com semente fixa.

Erros e limites

Intervalos de bootstrap com poucos positivos são instáveis. Os resultados de alerta do laboratório são sorteios aleatórios que fazem as vezes do comportamento real das regras.

Exercícios

Síntese

Uma avaliação controlada pareia os tratamentos sobre dados rotulados idênticos, relata contagens e intervalos e permite que os líderes ajam de forma proporcional com evidências incertas, mas úteis.

Respostas comentadas

EX026. 0,069 × 160 ≈ 11, então A gerou 11 alertas falsos nas 160 janelas normais (11/160 = 0,06875).

EX027. Os dados são compatíveis com B não ser melhor do que A em revocação: 40 janelas de ataque são poucas demais para excluir uma melhora nula, mesmo que a melhor estimativa seja 0,20 maior.

EX028. Os dois conjuntos de regras veem exatamente o mesmo tráfego, então as diferenças nos alertas vêm das regras, e não de semanas, clima ou modos de operação diferentes; a comparação pareada também permite que o bootstrap reamostre janelas com os dois resultados associados.

EX029. Daniel projetou B pensando em parte nesses tipos de ataque; janelas escritas por outra pessoa reduzem a chance de que o conjunto de teste seja inconscientemente moldado às forças de B.

EX030. B produz menos alertas falsos nos mesmos dados e muito provavelmente pega mais ataques; se na verdade for igual em revocação, a organização perde pouco e pode reverter, então o valor esperado da troca é positivo enquanto mais dados são reunidos.