06 - Garantia de Integridade e Privacidade
video: https://youtu.be/... no frontmatter da nota.Garantia de Integridade e Privacidade
No protocolo SSH, a segurança não se resume a esconder os dados (privacidade); é igualmente vital garantir que a informação chegue ao destino exatamente como foi enviada, sem alterações acidentais ou maliciosas (integridade). Estes dois pilares funcionam em conjunto para criar o que chamamos de "túnel seguro".
1. Garantia de Privacidade (Confidencialidade)
A privacidade no SSH é alcançada através da cifragem de dados. Uma vez estabelecida a chave de sessão simétrica entre o cliente e o servidor, todo o tráfego é transformado em texto cifrado (ciphertext).
- Ocultação de Metadados: O SSH cifra não apenas o conteúdo dos comandos (ex:
rm -rf /), mas também os nomes de utilizador e as respostas do sistema. Um atacante que intercepte os pacotes na rede verá apenas um fluxo de dados aleatórios. - Prevenção de Eavesdropping: Mesmo que um administrador de rede mal-intencionado utilize um sniffer (como o Wireshark) no meio do caminho, ele não conseguirá extrair nenhuma informação útil da sessão.
Cifras Simétricas Suportadas
| Cifra | Tamanho de Chave | Performance | Recomendação |
|---|---|---|---|
| AES-128-CTR | 128 bits | Alta | Recomendada |
| AES-256-CTR | 256 bits | Alta | Recomendada (default OpenSSH) |
| AES-128-GCM | 128 bits | Alta + AEAD | Recomendada (moderna) |
| AES-256-GCM | 256 bits | Alta + AEAD | Recomendada |
| ChaCha20-Poly1305 | 256 bits | Muito alta (sem AES-NI) | Recomendada (móvel) |
| 3DES-CTR | 168 bits | Baixa | Obsoleta, desativar |
| Blowfish-CTR | 128 bits | Média | Obsoleta, desativar |
| ARCFOUR (RC4) | 128 bits | Alta | Insegura, banida |
2. Garantia de Integridade
A integridade assegura que os dados não foram modificados durante o trânsito. O SSH utiliza mecanismos matemáticos para validar cada pacote recebido.
- MAC (Message Authentication Code): Para cada pacote enviado, o SSH calcula um "valor de verificação" (hash) baseado numa combinação dos dados do pacote, um número de sequência e a chave de sessão partilhada.
- Verificação no Destino: Quando o servidor recebe o pacote, ele realiza o mesmo cálculo. Se o resultado for diferente do MAC enviado, o SSH assume que o pacote foi corrompido ou adulterado por um terceiro e encerra a ligação imediatamente por razões de segurança.
- Proteção contra Injeção: Este mecanismo impede que um atacante insira comandos extras numa sessão ativa ou altere o destino de uma transferência de ficheiros.
Algoritmos de MAC
| Algoritmo | Saída | Status |
|---|---|---|
| HMAC-SHA1 | 160 bits | Histórico, evitável |
| HMAC-SHA2-256 | 256 bits | Recomendado |
| HMAC-SHA2-512 | 512 bits | Recomendado |
| UMAC-64/128 | 64/128 bits | Mais rápido, moderna |
| HMAC-RIPEMD160 | 160 bits | Obsoleto |
| AEAD (GCM, Poly1305) | variável | Padrão moderno |
3. Proteção contra Ataques de Replay
A integridade e a privacidade sozinhas não impedem que um atacante capture um pacote cifrado válido e o envie novamente mais tarde para tentar repetir uma ação (como uma transferência bancária ou um comando de execução).
- Números de Sequência: O SSH atribui um número de sequência único e incremental a cada pacote dentro da sessão cifrada.
- Rejeição de Duplicados: Se o receptor receber um pacote com um número de sequência que já foi processado ou que está fora de ordem, o pacote é descartado e a sessão é interrompida. Isto garante a frescura dos dados.
4. Algoritmos de Integridade Comuns
Antigamente, o SSH utilizava algoritmos como o HMAC-MD5 ou HMAC-SHA1. Atualmente, por questões de segurança técnica, as implementações modernas preferem:
- HMAC-SHA2-256/512: Versões robustas de algoritmos de hash.
- AEAD (Authenticated Encryption with Associated Data): Cifras modernas como AES-GCM ou ChaCha20-Poly1305 que realizam a cifragem (privacidade) e a autenticação (integridade) simultaneamente num único processo, sendo mais rápidas e seguras.
5. A Tríade da Segurança Aplicada ao SSH
| Pilar | Definição | Mecanismo SSH | Consequência se Ausente |
|---|---|---|---|
| Confidencialidade | Sigilo dos dados | Cifra simétrica (AES, ChaCha20) | Vazamento de senhas e comandos |
| Integridade | Dados inalterados | MAC ou AEAD | Comandos adulterados (ex: rm em vez de ls) |
| Autenticidade | Identidade comprovada | Assinatura digital (RSA, Ed25519) | Ataque Man-in-the-Middle |
| Não-Repetição | Frescor garantido | Número de sequência por pacote | Ataque de replay |
6. Fluxo de Estabelecimento do Túnel Seguro
Cliente Servidor
| |
| --- TCP handshake porta 22 ----------> |
| --- SSH-2.0-OpenSSH_8.4 -------------> | (banner de versão)
| <--- SSH-2.0-OpenSSH_8.4 ------------- |
| |
| --- KEXINIT (cifras suportadas) -----> | (negociação algoritmos)
| <--- KEXINIT ------------------------- |
| |
| --- Diffie-Hellman (KEX) ------------> | (troca de chaves)
| <--- Diffie-Hellman ----------------- |
| |
| ==== CHAVE DE SESSÃO GERADA (DH) ==== | (secreta, jamais transmitida)
| |
| --- NEWKEYS (ativa cifra) ------------> | (a partir daqui: cifrado)
| <--- NEWKEYS ------------------------- |
| |
| --- USER_AUTH_REQUEST (chave pública) > | (autenticação)
| <--- USER_AUTH_SUCCESS --------------- |
| |
| --- CHANNEL_OPEN (shell) ------------> | (canal de dados seguro)
7. Exemplo de Configuração Recomendada
Em /etc/ssh/sshd_config:
# Apenas protocolo SSH-2
Protocol 2
# Cifras modernas (AEAD preferidas)
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr
# MACs modernos
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com
# Algoritmos de troca de chave (KEX)
KexAlgorithms curve25519-sha256,curve25519-sha256@libssh.org,diffie-hellman-group16-sha512
# Host keys (preferir Ed25519)
HostKey /etc/ssh/ssh_host_ed25519_key
HostKey /etc/ssh/ssh_host_rsa_key
8. Vulnerabilidades Históricas Mitigadas
| Vulnerabilidade | Ano | Causa | Mitigação |
|---|---|---|---|
| ROCA (CVE-2017-15361) | 2017 | Chaves RSA fracas em hardware Infineon | Auditoria de chaves |
| Terrapin (CVE-2023-48795) | 2023 | Manipulação de prefixo no handshake | Atualização + desativar algoritmos afetados |
| CBC padding oracle | 2008 | Modo CBC vulnerável a chosen-plaintext | Adoção de CTR/GCM |
| Debian PRNG bug | 2008 | Entropia fraca gerou chaves previsíveis | Re-gerar chaves afetadas |
9. Auditoria e Diagnóstico
# Verificar algoritmos suportados pelo servidor
ssh -Q cipher; ssh -Q mac; ssh -Q kex; ssh -Q key
# Testar conexão com verbose completo
ssh -vvv alice@servidor.empresa.com
# Auditar configuração do servidor
sudo sshd -T | grep -i -E "cipher|mac|kex"
# Verificar fingerprint da chave do servidor
ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub
# Capturar tráfego cifrado para validar opacidade
sudo tcpdump -i eth0 -X 'port 22' | head -20
# Saída esperada: bytes aparentemente aleatórios (ciphertext)
10. Resumo da Proteção
| Recurso | Técnica Utilizada | Objetivo |
|---|---|---|
| Privacidade | Cifragem Simétrica (AES, ChaCha20) | Impedir a leitura por terceiros |
| Integridade | MAC ou AEAD | Impedir a alteração dos dados |
| Autenticidade | Cifragem Assimétrica (RSA, Ed25519) | Garantir a identidade das partes |
| Não-Repetição | Número de sequência por pacote | Impedir ataques de replay |
| Sigilo da Chave | Diffie-Hellman / Curve25519 | Chave de sessão nunca trafega pela rede |
11. Conclusão
Desta forma, o SSH garante que o administrador possa gerir sistemas remotos com a confiança de que as suas ordens são privadas, exatas e únicas. A combinação de criptografia simétrica para sigilo, MACs para integridade, criptografia assimétrica para autenticação e números de sequência para frescor cria um pipeline de defesa em profundidade que resistiu a décadas de análise criptográfica. Para manter esse nível de segurança, é imprescindível manter o software atualizado, desativar algoritmos legados (CBC, SHA1, RC4) e migrar para curvas modernas como Ed25519 e X25519, garantindo que o túnel permaneça imune mesmo a ataques de força bruta com recursos computacionais contemporâneos.