01 - Secure Shell
video: https://youtu.be/... no frontmatter da nota.Secure Shell (SSH)
O Secure Shell (SSH) é o protocolo da camada de aplicação que se tornou o padrão global para acesso remoto seguro a sistemas computacionais. Criado originalmente em 1995 por Tatu Ylönen na Universidade de Tecnologia de Helsinque (Finlândia), como resposta direta a um ataque de sniffing de senhas na rede universitária, o SSH evoluiu para se tornar um pilar crítico da administração de infraestrutura moderna. Sua missão técnica é substituir protocolos legados inseguros (Telnet, rsh, rlogin, rcp, FTP), provendo um túnel criptografado persistente onde a confidencialidade, a integridade e a autenticidade são garantias arquiteturais inegociáveis, padronizadas nas RFCs 4250 a 4256.
1. Contexto Histórico
Antes do SSH, a administração remota em Unix era feita pela família de protocolos Berkeley r-commands (rsh, rlogin, rcp), baseada em autenticação por IP confiado (.rhosts) e que transmitia todo o conteúdo — incluindo senhas — em texto claro pela rede. Com a popularização da internet na década de 1990 e o aumento de sniffers como tcpdump e Ethereal, tornou-se urgente um protocolo que protegesse a comunicação administrativa.
Linha do Tempo do SSH
| Ano | Evento | Versão |
|---|---|---|
| 1995 | Tatu Ylönen lança SSH-1.0.0 (software livre) | SSH-1 |
| 1995 | Ylönen funda a SSH Communications Security | Comercial |
| 1999 | OpenBSD fork → OpenSSH 1.2.2 | Livre |
| 2006 | OpenSSH desativa SSH-1 por padrão | 4.3p1 |
| 2017 | OpenSSH remove suporte a SSH-1 | 7.6 |
| 2024 | OpenSSH 9.7 (atual) | SSH-2.0 |
RFCs de Referência
| RFC | Ano | Conteúdo |
|---|---|---|
| 4250 | 2006 | SSH Protocol Architecture |
| 4251 | 2006 | SSH Protocol Overview |
| 4252 | 2006 | SSH Authentication Protocol |
| 4253 | 2006 | SSH Transport Layer Protocol |
| 4254 | 2006 | SSH Connection Protocol |
| 4256 | 2006 | SSH sftp (Secure File Transfer) |
| 5656 | 2009 | SSH ECC (Elliptic Curve Cryptography) |
| 8709 | 2020 | SSH Ed25519 keys |
| 8731 | 2020 | SSH Curve25519 Key Exchange |
2. A Transição SSH-1 vs SSH-2
O protocolo passou por uma evolução fundamental para corrigir falhas de design iniciais da versão 1, implementadas às pressas em 1995.
SSH-1 (Legado e Inseguro)
A primeira versão do protocolo, embora revolucionária, possuía falhas estruturais graves:
- Verificação de integridade fraca: HMAC-SHA1 com truncagem a 128 bits sem incorporar número de sequência no MAC, permitindo ataques de inserção de pacotes (Bellare, 2002).
- Chaves de host curtas: Limite de 1024 bits para RSA, insuficiente para padrões modernos.
- Único algoritmo KEX: Diffie-Hellman group 1 (1024 bits), vulnerável ao ataque Logjam (CVE-2015-4000).
- Sem troca de chaves rekey: A chave de sessão é fixa durante toda a conexão, expondo ao ataque de criptanálise cumulativa.
- Padding Oracle: Vulnerabilidade CBC em
blowfish-cbceaes128-cbc.
O SSH-1 deve ser totalmente desativado em ambientes modernos (Protocol 2 em sshd_config).
SSH-2 (O Padrão Atual - RFC 4251)
Uma reescrita completa que introduziu melhorias massivas em segurança e performance:
- Troca de Chaves Diffie-Hellman: Permitindo que chaves de sessão sejam geradas de forma segura mesmo em canais monitorados, com rekey automático periódico.
- Verificação de Integridade via MAC com número de sequência: Cada pacote inclui o número de sequência de 32 bits no cálculo do MAC, impedindo ataques de replay e de reordenação.
- Suporte a Novas Cifras: AES-256-GCM, ChaCha20-Poly1305, AES-256-CTR — cifras AEAD modernas com proteção contra padding oracle.
- Arquitetura em 3 camadas: Transporte (RFC 4253) + Autenticação (RFC 4252) + Conexão (RFC 4254) modulares.
- Suporte a múltiplos canais: Multiplexação de shells, SFTP, X11 e port forwarding sobre uma única conexão TCP.
3. Contraste Absoluto com Protocolos Legados
Para um profissional de TI, entender a diferença entre o SSH e seus antecessores é uma lição fundamental de higiene digital:
| Protocolo | Porta | Criptografia | Autenticação | Estado |
|---|---|---|---|---|
| Telnet | TCP 23 | Nenhuma | Texto claro | Banido |
| Rlogin | TCP 513 | Nenhuma | .rhosts (IP confiado) | Banido |
| RSH | TCP 514 | Nenhuma | .rhosts | Banido |
| FTP | TCP 21 | Nenhuma (controle) | Texto claro | Substituir por SFTP |
| SSH-1 | TCP 22 | Fraca | Várias | Descontinuado |
| SSH-2 | TCP 22 | Forte (AEAD) | Várias + MFA | Padrão |
Qualquer intermediário na rede pode capturar uma sessão Telnet sem esforço, expondo credenciais administrativas em texto claro. No SSH, toda a comunicação, desde o primeiro byte útil após a negociação inicial, viaja cifrada. Mesmo que um atacante capture os pacotes com Wireshark, ele verá apenas um fluxo de bytes binário indecifrável sem as chaves de sessão efêmeras.
4. Funcionalidades de Gerência Além do Shell
O SSH é muito mais do que um terminal remoto; ele é uma plataforma de transporte de dados segura com múltiplas extensões padronizadas: shell interativo (ssh user@host), execução remota (ssh user@host "cmd"), transferência via SCP/SFTP (RFC 4256), sincronização rsync sobre SSH, ProxyJump (-J), tunelamento Local/Remote/Dynamic (-L/-R/-D), Agent Forwarding (-A), e uso como transporte para ferramentas de automação como Ansible e Jenkins.
# Shell interativo + ProxyJump
ssh -J bastion@jumphost target@internal
# Transferência via SCP/SFTP/rsync
scp arquivo.txt alice@servidor:/tmp/
rsync -avz --delete /local/ alice@servidor:/backup/
# Tunelamento Local (acesso a DB interno)
ssh -L 5432:db.int:5432 user@bastion
# Tunelamento Dynamic (proxy SOCKS5 cifrado)
ssh -D 1080 user@bastion
# Automação Ansible (usa SSH como transporte)
ansible all -m ping -u deploy
5. Perspectiva de Cyber Security e Monitoramento
O serviço SSH é a "Joia da Coroa" de um servidor e, por isso, é alvo de ataques incessantes 24/7 por botnets como Mirai, Mobiquis e SSHSCAN.
Ataques de Reconhecimento e Exploração (RCE)
Atacantes realizam varreduras constantes na porta 22 em busca de banners de servidores desatualizados (ex: SSH-2.0-OpenSSH_7.2p2). Vulnerabilidades históricas graves incluem: CVE-2018-15473 (User enumeration por timing, OpenSSH 7.2-7.6), CVE-2016-0777 (Roaming client info leak, OpenSSH 5.4-7.1), CVE-2017-15361 (ROCA chave RSA fraca em YubiKey 4), e CVE-2023-48795 (Terrapin Prefix Truncation, todas as versões). O profissional de segurança deve manter o servidor sempre atualizado e ocultar a versão exata no banner de conexão (DebianBanner no).
Gestão de Host Keys e o Ataque de MitM
Sempre que um servidor SSH é instalado, ele gera um par de chaves únicas (Host Keys) armazenado em /etc/ssh/ssh_host_*_key. O cliente, na primeira conexão, é alertado da fingerprint e a armazena em ~/.ssh/known_hosts (modelo TOFU - Trust On First Use). Se a chave mudar em conexão futura, o cliente exibe:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Isso indica que o servidor foi reinstalado (chave regenerada) ou que um atacante está realizando um ataque de Man-in-the-Middle para interceptar a sua senha administrativa.
Hardening Recomendado
# /etc/ssh/sshd_config - hardening CIS Level 1
Protocol 2
PermitRootLogin prohibit-password
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
LoginGraceTime 30
AllowGroups ssh-users
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com
MACs hmac-sha2-512-etm@openssh.com
KexAlgorithms curve25519-sha256@libssh.org
6. Auditoria Técnica e Diagnóstico
# Listar cifras, MACs, KEXs suportadas pelo cliente
ssh -Q cipher; ssh -Q mac; ssh -Q kex
# Conectando com verbosidade para ver o processo
ssh -v user@servidor.com
ssh -vvv user@servidor.com # debug completo
# Validar configuração do sshd antes de reload
sudo sshd -t && sudo systemctl reload sshd
# Listar algoritmos efetivamente suportados pelo daemon
sshd -T | grep -E "ciphers|macs|kexalgorithms"
# Inspecionar fingerprint de host keys
ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub
# Detectar algoritmos legados ainda suportados
nmap --script ssh2-enum-algos -p 22 servidor.com
7. Resumo Técnico
| Atributo | Valor |
|---|---|
| Porta padrão | TCP 22 |
| RFCs principais | 4250-4256, 8268, 8308, 8709, 8731 |
| Versão atual | SSH-2.0 (SSH-1 descontinuado) |
| Transporte | TCP orientado a conexão |
| Camadas internas | Transporte + Autenticação + Conexão |
| Algoritmos modernos | Ed25519, Curve25519, AES-256-GCM, ChaCha20-Poly1305 |
| Implementações | OpenSSH, Dropbear, Tectia SSH, Bitvise, lsh |
| Casos de uso | Shell remoto, SFTP/SCP, port forwarding, jump host, automação |
8. Conclusão
O Secure Shell é a ferramenta definitiva que permite a gestão de infraestruturas globais com a confiança de uma conexão local. Sua arquitetura inquebrável, somada à versatilidade de tunelamento e transferência de arquivos, torna-o o protocolo mais importante para a administração de servidores modernos, base de plataformas como Ansible, Git over SSH, Kubernetes API e Jenkins pipelines. Compreender a história (Ylönen, 1995), entender as falhas críticas do SSH-1, dominar a arquitetura em 3 camadas, migrar sistematicamente para cifras modernas (Ed25519, Curve25519, AES-GCM, ChaCha20-Poly1305) e aplicar hardening rigoroso (sem root direto, MFA via PAM, Whitelist via AllowGroups) são competências essenciais para garantir que o acesso permaneça soberano, íntegro e inalcançável por adversários no cenário cibernético contemporâneo.