◇ OpenCyber Academy
Técnico · Capítulo 14 · Português

Capítulo 14 — Infraestrutura crítica e segurança setorial: automação

Ensino gratuito e aberto para quem deseja proteger pessoas e tecnologias. Não é preciso criar uma conta para estudar ou consultar as respostas.

Capítulo 14 — Infraestrutura crítica e segurança setorial: automação

Mapa da aula

Aula 14 publicada. Mapa, exemplo, EX053.

flowchart TD
  N0["14.1 Por que hashes"]
  N1["14.2 Quatro resultados, quatro ações"]
  N2["14.4 Automação segura em ambientes de controle"]
  N3["14.5 Proteger a automação"]
  N4["14.6 Atividade prática"]
  N5["Síntese do capítulo"]
  N0 --> N1 --> N2 --> N3 --> N4 --> N5
  N5 --> EX["Exemplo resolvido"]
  EX --> Q["Exercício EX053"]

Desenho lógico

flowchart LR
  N0["14.1 Por que hashes"]
  N1["14.2 Quatro resultados, quatro ações"]
  N2["14.4 Automação segura em ambientes de controle"]
  N3["14.5 Proteger a automação"]
  N4["14.6 Atividade prática"]
  N5["Síntese do capítulo"]
  N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> Q["EX053"]
[14.1 Por que hashes]
    |
    v
[14.2 Quatro resultados, quatro ações]
    |
    v
[14.4 Automação segura em ambientes de controle]
    |
    v
[14.5 Proteger a automação]
    |
    v
[14.6 Atividade prática]
    |
    v
[Síntese do capítulo]
    |
    v
[Exemplo resolvido] --> [Exercício EX053]

Objetivos de aprendizagem e conexão

Ao final deste capítulo, você deverá ser capaz de:

Os Capítulos 10–13 mudaram, verificaram e resolveram problemas à mão. Este capítulo torna automáticas as verificações repetíveis, para que a atenção do técnico vá para as diferenças que importam.

14.1 Por que hashes

Um resumo SHA-256 (FIPS 180-4) de um arquivo muda se qualquer byte mudar, e é inviável construir um arquivo diferente com o mesmo resumo. Comparar os resumos com um manifesto registrado num momento sabidamente bom diz quais arquivos mudaram, de modo barato e sem guardar cópias. Não diz como mudaram — para isso, você precisa da cópia aprovada, mantida em controle de versão — e não diz se a mudança foi legítima — para isso, você precisa dos registros de mudança. O hashlib do Python fornece o SHA-256 na biblioteca padrão (Python hashlib).

14.2 Quatro resultados, quatro ações

Resultado Significado Ação
Inalterado Corresponde ao manifesto Nada
Alterado, aprovado Um registro de mudança o cobre Verificar (Capítulo 11) e depois atualizar o manifesto
Alterado, não aprovado Nenhum registro Preservar, investigar e depois reverter sob uma mudança
Novo ou ausente O arquivo apareceu ou sumiu Investigar antes de apagar ou restaurar

O erro de automação mais perigoso é "reverter toda deriva automaticamente". Isso destrói a evidência de uma mudança não aprovada e pode desfazer uma correção de emergência feita às 03:00 que ainda não foi registrada. A detecção automatizada é barata e segura; a correção automatizada precisa de uma lista curta e explícita do que pode ser corrigido automaticamente, e de nada que toque o controle do processo.

14.3 Exemplo resolvido: deriva no hist-02 (sintético)

Um job noturno compara os arquivos-chave do hist-02 com o manifesto aprovado depois da CHG-2207. O Laboratório 14 simula uma noite, usando um diretório temporário.

Laboratório 14 (salve como lab14.py e execute com python3 lab14.py):

# Lab 14 - detect configuration drift against an approved manifest (offline, standard library only)
# Files are created in a temporary directory that is removed at the end.
import hashlib, json, pathlib, tempfile
def sha(p): return hashlib.sha256(p.read_bytes()).hexdigest()
with tempfile.TemporaryDirectory() as tmp:
    root = pathlib.Path(tmp)
    files = {"sshd_config": "ListenAddress 10.90.0.21\nPermitRootLogin no\nPasswordAuthentication no\n",
             "ntp.conf": "server 10.90.0.5 iburst\n",
             "fw-01.rules": "R1 allow 10.20.0.10 10.10.0.0/16 tcp 502\nR7 deny any any\n"}
    for n, t in files.items(): (root / n).write_text(t)
    manifest = {n: sha(root / n) for n in files}                       # approved baseline
    approved_changes = {"ntp.conf": "CHG-2210"}
    (root / "ntp.conf").write_text("server 10.90.0.5 iburst\nserver 10.90.0.6 iburst\n")   # approved
    (root / "sshd_config").write_text(files["sshd_config"].replace("PermitRootLogin no", "PermitRootLogin yes"))
    (root / "debug.sh").write_text("nc -l -p 9000\n")                  # new, unexpected file
    current = {p.name: sha(p) for p in sorted(root.iterdir())}
    for name in sorted(set(manifest) | set(current)):
        if name not in current: print(f"MISSING   {name}")
        elif name not in manifest: print(f"NEW       {name}  -> investigate before removing")
        elif current[name] != manifest[name]:
            tag = f"approved ({approved_changes[name]}) -> update baseline" if name in approved_changes else "UNAPPROVED -> preserve, then revert"
            print(f"CHANGED   {name}  {tag}")
        else: print(f"unchanged {name}")
    print("manifest digest", hashlib.sha256(json.dumps(manifest, sort_keys=True).encode()).hexdigest()[:16])

Saída esperada (Python 3.13.5):

NEW       debug.sh  -> investigate before removing
unchanged fw-01.rules
CHANGED   ntp.conf  approved (CHG-2210) -> update baseline
CHANGED   sshd_config  UNAPPROVED -> preserve, then revert
manifest digest fdea74f1d09e359c

O fw-01.rules está inalterado. O ntp.conf mudou, e a CHG-2210 o cobre (um segundo servidor NTP foi acrescentado): verifique que o tempo está sincronizado e depois atualize o manifesto. O sshd_config mudou sem registro — alguém reabilitou o login de root. O debug.sh é novo e contém um comando de escuta. Ambos são preservados (cópia, hash, timestamps, a conta que os gravou por último, se o host registrar isso) antes que qualquer coisa seja revertida, e o segundo muito provavelmente se tornará um incidente. O resumo do próprio manifesto é impresso para que o manifesto possa ser conferido; guarde esse resumo num lugar que os administradores do host não possam alterar (Capítulo 18).

14.4 Automação segura em ambientes de controle

14.5 Proteger a automação

A conta da automação consegue ler ou mudar todos os hosts que gerencia; portanto: guarde as suas credenciais num cofre e troque-as; restrinja de onde ela pode se conectar; exija revisão das mudanças no seu estado desejado; alerte sobre execuções fora do agendamento. O alerta da CISA sobre acesso de longo prazo à infraestrutura crítica descreve atores usando ferramentas legítimas de administração e contas válidas (CISA AA24-038A); uma conta de automação com privilégios excessivos é exatamente uma dessas ferramentas.

Uma ferramenta que consegue mudar todos os hosts é tão atraente para um adversário quanto uma estação de engenharia. Revise as mudanças no seu estado desejado do mesmo modo que revisa as mudanças de firewall.

14.6 Atividade prática

Estenda o Laboratório 14 para que, diante de uma mudança não aprovada, ele grave um registro de preservação — nome do arquivo, resumo antigo, resumo novo, tamanho e horário de modificação — no diretório temporário antes de imprimir a constatação, e imprima o SHA-256 do próprio registro de preservação.

Grave o registro de preservação antes de imprimir a constatação e inclua na saída o resumo do próprio registro. Assim, um investigador posterior pode mostrar que a cópia feita no momento da detecção corresponde ao que o job afirmou ter guardado. Mantenha a limpeza do diretório temporário depois que os hashes forem registrados.

14.7 Erros comuns e limites

Exercícios — capítulo 14

EX053 — Classifique e aja. Objetivo: aplicar os quatro resultados. Insumos: a saída do Laboratório 14. Passos: escrever a ação e o responsável para cada linha, na ordem de execução. Evidência esperada: lista ordenada. Rubrica: 3 = preservar primeiro o sshd_config e o debug.sh (cópia, hash, metadados), avisar a líder de segurança; investigar o debug.sh antes da remoção; reverter o sshd_config sob uma mudança, depois da preservação; verificar o NTP e atualizar o manifesto para o ntp.conf; nada para o fw-01.rules; 2 = ordem errada; 1 = reverter tudo; 0 = nada.

EX054 — Lista de correções automáticas. Objetivo: limitar a automação. Insumos: correções automáticas candidatas: reabilitar o encaminhamento de logs, redefinir o sshd_config, reiniciar o serviço do historiador, corrigir a lista de servidores NTP, publicar regras de firewall, redefinir um setpoint de CLP. Passos: marcar cada uma como correção automática, chamado ou nunca automatizar, com justificativas. Evidência esperada: seis linhas. Rubrica: 3 = encaminhamento de logs e lista de NTP como correção automática (restauram a visibilidade e o tempo, baixo risco para o processo); sshd_config e publicação de firewall com chamado (risco de preservação e de trancamento); reinício do historiador com chamado, junto com as operações; setpoint de CLP nunca automatizado por ferramentas de segurança; 2 = um errado; 1 = tudo automático; 0 = nada.

EX055 — Trava de parada. Objetivo: reduzir o raio de impacto. Insumos: uma frota de 14 hosts; numa noite, 9 mostram o ntp.conf alterado de modo idêntico. Passos: propor uma condição de trava e explicar o que o padrão provavelmente significa. Evidência esperada: trava e explicação. Rubrica: 3 = parar quando mais do que uma proporção definida (por exemplo, 25 %) dos hosts mostrar a mesma mudança; o mais provável é uma mudança de frota deliberada, mas não registrada, ou um manifesto errado — confirmar com o calendário de mudanças antes de qualquer ação; ainda assim, tratar como constatação até ser explicada; 2 = trava sem interpretação; 1 = reverter os nove; 0 = nada.

EX056 — Registro de preservação. Objetivo: estender o laboratório. Insumos: atividade 14.6. Passos: implementar e mostrar a saída. Evidência esperada: código e saída. Rubrica: 3 = registro gravado antes da linha da constatação, contendo os campos exigidos, com o seu resumo impresso; explica por que o resumo do registro precisa ser guardado fora do host; 2 = registro sem resumo; 1 = tentativa; 0 = nada.

Síntese do capítulo

Automatize as verificações que nunca mudam: coletar, calcular hash, comparar com um manifesto aprovado e classificar as diferenças. Aja de modo diferente sobre os itens aprovados, não aprovados, novos e ausentes — preserve antes de reverter e restrinja a correção automática a uma lista curta que nunca toque o processo. Proteja a automação como a ferramenta poderosa que ela é.

Continue estudando — capítulo 14 de 18

← Capítulo 13 · Índice de capítulos do curso · Capítulo 15 →

Siga para a próxima lição escrita.