OpenCyber Academy
Profissionalizante · Capítulo 7 · Português
Código do curso: OCA-031Capítulo 07: OCA-031-C007

Capítulo 7 — Criptografia e serviços de confiança: controles e verificação

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 07 publicada. Mapa, exemplo, EX031.

flowchart TD
  N0["7.1 Verificando as notificações"]
  N1["Laboratório — Verificação de notificações"]
  N2["7.2 Verificando as configurações de TLS"]
  N3["Síntese"]
  N0 --> N1 --> N2 --> N3
  N3 --> EX["Exemplo resolvido"]
  EX --> Q["Exercício EX031"]

Desenho lógico

flowchart LR
  N0["7.1 Verificando as notificações"]
  N1["Laboratório — Verificação de notificações"]
  N2["7.2 Verificando as configurações de TLS"]
  N3["Síntese"]
  N0 --> N1 --> N2 --> N3 --> Q["EX031"]
[7.1 Verificando as notificações]
    |
    v
[Laboratório — Verificação de notificações]
    |
    v
[7.2 Verificando as configurações de TLS]
    |
    v
[Síntese]
    |
    v
[Exemplo resolvido] --> [Exercício EX031]

Objetivos de aprendizagem

Você vai (1) verificar os controles das notificações de pagamento com HMAC e verificações de replay; (2) verificar as configurações de TLS contra uma linha de base; (3) escrever declarações de verificação com seus limites.

7.1 Verificando as notificações

O site de agendamento da Bayside recebe notificações de pagamento do processador. Cada uma traz uma tag HMAC-SHA-256 calculada com um segredo compartilhado sobre um carimbo de tempo e o corpo da mensagem. O código da agência deve recalcular a tag, compará-la com hmac.compare_digest e rejeitar qualquer mensagem com mais de cinco minutos. Dana não tem permissão para testar o processador em produção, então verifica a lógica num laboratório com mensagens sintéticas: uma autêntica, uma com o valor alterado e uma repetida depois de uma hora. O laboratório abaixo mostra o verificador aceitando apenas a mensagem autêntica, o que corresponde ao comportamento descrito pela agência.

Laboratório — Verificação de notificações

# Verify synthetic payment notifications: HMAC-SHA-256 + 300 s replay window.
import hmac, hashlib
SECRET = b"synthetic-processor-secret"; NOW = 1_772_000_000; WINDOW = 300
def tag(ts, body): return hmac.new(SECRET, str(ts).encode() + b"." + body, hashlib.sha256).hexdigest()
def accept(ts, body, t): return NOW - ts <= WINDOW and hmac.compare_digest(tag(ts, body), t)
body = b'{"booking":"BDG-2207","amount":"85.00"}'
t = tag(NOW - 30, body)
print("authentic:", accept(NOW - 30, body, t))
print("changed amount:", accept(NOW - 30, body.replace(b"85.00", b"8.50"), t))
print("replayed after 1 h:", accept(NOW - 3600, body, tag(NOW - 3600, body)))

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

authentic: True
changed amount: False
replayed after 1 h: False

7.2 Verificando as configurações de TLS

Para o TLS, Dana confere cada endpoint do escopo contra a linha de base: TLS 1.3 oferecido, TLS 1.2 permitido apenas se necessário, versões mais antigas recusadas, cadeia completa servida e nome do certificado correto. Ela usa openssl s_client com opções explícitas de versão, por exemplo tentando -tls1_1 e esperando uma recusa. Cada teste registra o comando, o resultado e o horário. Onde um cliente não pode ser testado diretamente, como uma antiga estação de trabalho de imagens odontológicas, ela registra a lacuna com honestidade em vez de presumir que ela se comporta como as demais. Uma verificação é tão forte quanto os casos de fato testados.

7.3 Declarações com limites

Dana escreve as declarações de verificação numa forma fixa: o que foi verificado, como, quando, o resultado e o que não foi verificado. Por exemplo: a lógica de verificação das notificações aceitou mensagens sintéticas autênticas e rejeitou as alteradas e as repetidas num laboratório em 3 de março; o caminho do código de produção e o armazenamento do segredo não foram revisados. Essa forma protege tanto a Copperleaf quanto o cliente. Os clientes tomam decisões com base nessas declarações, então uma declaração que esconde seus limites pode levá-los a dispensar uma revisão necessária. Marcus confere cada declaração em busca de palavras como seguro ou conforme, que afirmam mais do que o teste mostrou.

Exemplo resolvido

Dana executa o laboratório de notificações, testa as versões de TLS em três endpoints e escreve quatro declarações de verificação, cada uma terminando com o que não foi verificado.

Caso sintético. As mensagens, os segredos e os endpoints são sintéticos.

Erros e limites

Verificações da lógica em laboratório não provam que o código de produção corresponde a ela. A recusa de uma versão antiga não prova que todas as opções fracas estão desativadas.

Exercícios

  • EX031 — Janela de replay. Que limite de idade o verificador impõe às notificações?

    Mostrar critérios de avaliação
    Rubrica: 3 = cinco minutos (300 segundos);; 2 = cinco minutos;; 1 = vago;; 0 = nenhuma.

  • EX032 — Valor alterado. O que o laboratório relatou para a notificação com valor alterado?

    Mostrar critérios de avaliação
    Rubrica: 3 = rejeitada (False) porque a tag deixou de corresponder;; 2 = rejeitada;; 1 = aceita;; 0 = nenhuma.

  • EX033 — Sondagem do TLS 1.1. Como Dana verifica que o TLS 1.1 é recusado?

    Mostrar critérios de avaliação
    Rubrica: 3 = openssl s_client com -tls1_1, esperando falha no handshake;; 2 = comando;; 1 = presume;; 0 = nenhuma.

  • EX034 — Estação de imagens. O que Dana faz quanto à estação de imagens que não pode ser testada?

    Mostrar critérios de avaliação
    Rubrica: 3 = registra a lacuna com honestidade em vez de presumir;; 2 = registra a lacuna;; 1 = presume que está bem;; 0 = nenhuma.

  • EX035 — Palavras proibidas. Que palavras Marcus procura nas declarações, e por quê?

    Mostrar critérios de avaliação
    Rubrica: 3 = seguro ou conforme, porque afirmam mais do que os testes mostram;; 2 = palavras citadas;; 1 = vago;; 0 = nenhuma.

Síntese

A verificação prova um comportamento específico sob testes específicos, e declarações honestas dizem exatamente que casos foram testados.

Respostas comentadas

EX031. Mensagens com mais de cinco minutos, 300 segundos, são rejeitadas como possíveis replays.

EX032. Foi rejeitada, porque o HMAC recalculado deixou de corresponder à tag.

EX033. Executando openssl s_client com a opção -tls1_1 e confirmando que o handshake é recusado.

EX034. Ela a registra como não testada e explica por quê, em vez de presumir que corresponde aos outros endpoints.

EX035. Palavras como seguro e conforme, porque afirmam mais garantia do que um teste específico oferece.