Duração: 75 minutos (explicação 20, prática guiada 45, verificação 10). Resultados dos TdR trabalhados: Protecção de dados e identidades: MFA e cifra; Serviços de rede: DHCP, DNS, VPN, NAT, VLAN e autenticação.
Objectivos
- Aplicar boas práticas de palavras-passe segundo NIST SP 800-63B.
- Explicar autenticação multifactor e o funcionamento de TOTP.
- Separar contas de uso diário das contas de administração.
Senhas que resistem
Orientações actuais (NIST SP 800-63B): preferir frases longas a regras de complexidade arbitrárias; comparar com listas de senhas comprometidas; não obrigar a mudanças periódicas sem motivo, mas mudar logo que haja suspeita; limitar tentativas; nunca guardar em texto claro. Um gestor de senhas aprovado pela instituição ajuda a ter senhas únicas.
MFA combina algo que se sabe (senha), algo que se tem (telemóvel, chave física) e algo que se é (biometria). TOTP (RFC 6238) gera um código de 6 dígitos a partir de um segredo partilhado e da hora actual, mudando a cada 30 segundos. Chaves físicas resistem melhor ao phishing que códigos. Administradores usam conta nominal separada, com MFA, só para administração.
Caso fictício
Na DPE (fictícia), todos os técnicos entram nos equipamentos com a conta «admin» e a mesma senha, que está num papel colado ao monitor.
Prática guiada em rede isolada
Rede de prática fictícia, criada dentro de um computador de prática com o script base (módulo 1, lição 1). Nunca use estes passos na rede de produção nem contra endereços reais. As saídas mostradas são exemplos didácticos, não resultados de uma execução.
Topologia (descrição em texto)
- Só o computador de prática, sem rede. Implementação TOTP didáctica com a biblioteca padrão do Python (não é para uso em produção).
Passos
Crie o gerador TOTP didáctico conforme a RFC 6238 (HMAC-SHA1, 30 s, 6 dígitos).
cat > /tmp/totp.py <<'EOF' import base64, hmac, hashlib, struct, time, sys def totp(segredo_b32, t=None, passo=30, digitos=6): k = base64.b32decode(segredo_b32) c = int((time.time() if t is None else t) // passo) h = hmac.new(k, struct.pack('>Q', c), hashlib.sha1).digest() o = h[-1] & 0x0F n = (struct.unpack('>I', h[o:o+4])[0] & 0x7FFFFFFF) % 10**digitos return str(n).zfill(digitos) # Vector de teste da RFC 6238 (segredo ASCII '12345678901234567890', t=59) deve dar 287082 print(totp(base64.b32encode(b'12345678901234567890').decode(), t=59)) print(totp('JBSWY3DPEHPK3PXP')) # segredo de prática, fictício EOF python3 /tmp/totp.pySaída de exemplo (didáctica):
287082 (um código de 6 dígitos que muda a cada 30 segundos)Verifique a força relativa de duas senhas pelo número de combinações (cálculo, não medição).
python3 -c "import math; print(round(8*math.log2(94)), 'bits para 8 caracteres aleatórios'); print(round(5*math.log2(7776)), 'bits para 5 palavras aleatórias de uma lista de 7776')"Saída de exemplo (didáctica):
52 bits para 8 caracteres aleatórios 65 bits para 5 palavras aleatórias de uma lista de 7776
Critérios de sucesso
- O vector da RFC dá 287082 (prova de que a implementação está conforme).
- O formando explica porque o código muda e porque depende da hora certa (módulo 5).
Como desfazer (reversão)
- rm -f /tmp/totp.py
Alternativa em papel: tarefas e respostas esperadas
- Proponha a correcção do caso.
- Contas nominais por técnico; senhas únicas e longas guardadas em cofre/gestor aprovado; MFA para administração; desactivar ou renomear a conta genérica «admin»; retirar o papel; registo de quem acede.
- Porque o TOTP falha se o relógio do telemóvel estiver 2 minutos atrasado?
- O código depende do intervalo de 30 s actual; com 2 minutos de diferença cliente e servidor calculam intervalos diferentes (os servidores só toleram pequena margem).
- Frase-passe ou senha curta complexa: qual e porquê?
- Frase longa com palavras aleatórias: mais combinações e mais fácil de lembrar, se não for uma frase conhecida.
Verifique o que aprendeu
Questão 1
Segundo o NIST SP 800-63B, forçar mudança de senha a cada 30 dias sem motivo é:
- Recomendado
- Desaconselhado; mudar quando há indício de comprometimento
- Obrigatório
- Irrelevante
Ver resposta comentada
Resposta: Desaconselhado; mudar quando há indício de comprometimento
Mudanças forçadas levam a senhas previsíveis (Maio2026!, Junho2026!).
Questão 2
Qual factor resiste melhor ao phishing?
- Código por SMS
- Chave física FIDO2 ligada ao domínio
- Pergunta secreta
- Senha longa
Ver resposta comentada
Resposta: Chave física FIDO2 ligada ao domínio
A chave física só responde ao sítio verdadeiro; um código pode ser escrito numa página falsa.
Em leitura fácil
- Use frases longas e diferentes em cada sítio.
- Use um segundo factor, como um código no telemóvel.
- Cada técnico tem a sua conta.
Fontes
- NIST SP 800-63B — Digital Identity Guidelines: Authentication (https://pages.nist.gov/800-63-4/sp800-63b.html)
- IETF RFC 6238 — TOTP: Time-Based One-Time Password (https://www.rfc-editor.org/rfc/rfc6238)
- Python 3 — módulo ipaddress e subprocess (documentação oficial) (https://docs.python.org/3/library/ipaddress.html)
