07 - Protocolo SSH
video: https://youtu.be/... no frontmatter da nota.Protocolo SSH
1. Visão Geral e Posicionamento Histórico
O Secure Shell (SSH) é um protocolo de aplicação que provê canal seguro sobre redes não confiáveis, substituindo historicamente o conjunto vulnerável de ferramentas Berkeley r-commands (rsh, rlogin, rcp, telnet). Sua primeira versão, SSH-1, foi desenvolvida por Tatu Ylönen em 1995 na Universidade de Helsinki como resposta direta a um ataque de sniffing que comprometeu 30 mil senhas na rede acadêmica finlandesa. A versão moderna, SSH-2, foi padronizada pela IETF entre as RFCs 4250 a 4256 (2006) e é a única recomendada em produção, sendo SSH-1 formalmente descontinuado desde o OpenSSH 7.6 (2017).
O SSH tornou-se a espinha dorsal do gerenciamento de infraestrutura em nuvem, data centers e ambientes embarcados. Estima-se que mais de 90% dos administradores de sistemas Linux utilizam SSH diariamente como ferramenta primária de operação remota.
2. Características Técnicas Fundamentais
| Atributo | Valor |
|---|---|
| RFC principal | 4250 a 4256 (SSH-2) |
| Porta padrão | TCP 22 |
| Protocolo de transporte | TCP (não opera sobre UDP) |
| Modelo de cifragem | Híbrido (assimétrica + simétrica) |
| Troca de chaves | Diffie-Hellman, Curve25519, ECDH |
| Cifras simétricas modernas | AES-GCM, ChaCha20-Poly1305 |
| Assinaturas | RSA, ECDSA, Ed25519 |
| Implementação de referência | OpenSSH (BSD), mantida pelo projeto OpenBSD |
O SSH difere de outros protocolos de aplicação por combinar quatro primitivas criptográficas em uma única pilha: confidencialidade (cifra simétrica), integridade (MAC), autenticação mútua (chaves públicas) e sigilo perfeito posterior (Perfect Forward Secrecy via Diffie-Hellman efêmero).
3. Arquitetura em Camadas Internas
O SSH-2 é estruturado em três subsistemas internos com responsabilidades bem definidas:
Camada de Transporte (RFC 4253)
Responsável pelo handshake inicial, negociação de algoritmos, troca de chaves e estabelecimento do túnel cifrado. Opera antes da autenticação. Cifra todos os pacotes subsequentes com a chave de sessão derivada do KEX.
Camada de Autenticação (RFC 4252)
Verifica a identidade do cliente perante o servidor, oferecendo múltiplos métodos (publickey, password, keyboard-interactive, hostbased, gssapi). Só é ativada após o túnel estar cifrado, garantindo que credenciais jamais transitem em texto claro.
Camada de Conexão (RFC 4254)
Multiplexa múltiplos canais lógicos (sessions, port forwards, X11, agent forwarding) sobre a mesma conexão TCP. Cada canal possui seu próprio número de sequência e janela de fluxo, permitindo operações simultâneas como executar comando e transferir arquivo.
4. O Fluxo de Uma Conexão SSH Típica
- TCP Handshake: Cliente abre conexão à porta 22 do servidor (3-way handshake).
- Version String: Ambos os lados trocam suas strings de versão (
SSH-2.0-OpenSSH_9.0). - KEXINIT: Cliente e servidor anunciam algoritmos suportados (cifras, MACs, KEX, compressão).
- Key Exchange (KEX): Diffie-Hellman ou Curve25519 produz um segredo compartilhado sem nunca transmiti-lo.
- Newkeys: Troca de chaves de sessão; todos os pacotes a partir daqui são cifrados.
- Autenticação: Cliente prova identidade via
publickey(recomendado) oupassword. - Channel Open: Cliente solicita abertura de canal de sessão.
- Execução: Shell interativo ou comando
execremoto é executado. - Término: Qualquer lado envia
SSH_MSG_DISCONNECTcom reason code.
5. Funcionalidades Estendidas
Além do acesso a shell remoto, o SSH provê um conjunto robusto de funcionalidades avançadas:
SCP e SFTP
Transferência de arquivos cifrada. scp utiliza o protocolo SCP histórico (obsoleto desde OpenSSH 9.0, substituído por sftp no backend), enquanto sftp é um protocolo completo de gerência de arquivos padronizado na RFC 4251.
Port Forwarding
Encaminhamento de portas TCP através do túnel cifrado, em três modos:
- Local (-L): Porta local alcance host atrás do servidor SSH.
- Remote (-R): Porta no servidor alcance host atrás do cliente.
- Dynamic (-D): Proxy SOCKS5 dinâmico.
X11 Forwarding (-X, -Y)
Permite executar aplicativos gráficos Linux localmente enquanto processam no servidor remoto, tunelando o protocolo X11 pelo canal SSH. Modernamente obsoleto devido à adoção de Wayland, mas ainda útil em ambientes legados.
Agent Forwarding (-A)
Permite encaminhar credenciais do ssh-agent local para o servidor remoto, facilitando saltos entre múltiplos servidores (Jump Hosts) sem copiar chaves privadas.
ProxyJump (-J)
Sucessor moderno do ssh -t bastião ssh destino. Permite declarar explicitamente hops intermediários, simplificando bastiões de segurança.
6. Algoritmos Criptográficos Suportados
Cifras Simétricas Recomendadas (2024)
| Cifra | Modo | Tamanho de Chave | Status |
|---|---|---|---|
aes256-gcm@openssh.com |
AEAD | 256 bits | Preferido |
chacha20-poly1305@openssh.com |
AEAD stream | 256 bits | Preferido para IoT |
aes256-ctr |
CTR | 256 bits | Aceitável |
aes128-ctr |
CTR | 128 bits | Aceitável |
3des-cbc |
CBC | 168 bits | Obsoleto, desabilitado |
blowfish-cbc |
CBC | 128 bits | Obsoleto |
Algoritmos de Troca de Chave (KEX)
| Algoritmo | Base | Status |
|---|---|---|
curve25519-sha256 |
Curve25519 | Preferido |
ecdh-sha2-nistp256 |
NIST P-256 | Aceitável |
diffie-hellman-group14-sha256 |
MODP 2048 | Aceitável |
diffie-hellman-group1-sha1 |
MODP 1024 | Obsoleto |
Algoritmos de Chave Pública
| Algoritmo | Tamanho | Status |
|---|---|---|
ssh-ed25519 |
256 bits | Preferido |
rsa-sha2-512 |
4096 bits | Aceitável |
ecdsa-sha2-nistp256 |
256 bits | Aceitável |
ssh-dss |
1024 bits | Obsoleto |
7. Casos de Uso em Ambientes Modernos
Gerenciamento de Infraestrutura em Nuvem
AWS EC2, Azure VMs e Google Compute Engine expõem exclusivamente SSH para acesso administrativo a instâncias Linux. O par de chaves gerado no console do provedor é injetado via cloud-init em ~/.ssh/authorized_keys.
Automação DevOps
Ferramentas como Ansible, Terraform, Jenkins e GitLab CI utilizam SSH como transporte para executar playbooks, sincronizar configurações e realizar deploys. Chaves de deploy dedicadas (restrict,command="..." em authorized_keys) limitam o escopo de exposição.
Túneis para Bancos de Dados
Padrão de mercado para acessar bancos de dados em VPCs privadas: o operador abre ssh -L 5432:rds-endpoint:5432 bastião e conecta o cliente local como se o banco estivesse na própria máquina.
Acesso Privilegiado com Auditoria (PAM)
Soluções como Teleport, HashiCorp Boundary e Gravitational implementam SSH com proxy de gravação de sessão, satisfazendo requisitos PCI-DSS e SOX para auditoria forense de acesso a servidores críticos.
8. Boas Práticas de Hardening
# Configurações mínimas recomendadas em /etc/ssh/sshd_config
Port 22
Protocol 2
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
PermitEmptyPasswords no
MaxAuthTries 3
LoginGraceTime 30
AllowGroups ssh-users
X11Forwarding no
AllowTcpForwarding yes
ClientAliveInterval 300
ClientAliveCountMax 0
# Auditoria da superfície de ataque
ssh-audit localhost # Avalia cifras e KEX do servidor
nmap -sV -p 22 --script ssh2-enum-algos servidor.com
9. Conclusão
O Protocolo SSH é, sem exagero, o protocolo mais importante da camada de aplicação para administradores de sistemas, sendo utilizado diariamente para operar a maior parte da infraestrutura crítica mundial. Sua arquitetura híbrida (assimétrica para autenticação, simétrica para fluxo), combinada com Perfect Forward Secrecy e múltiplos métodos de autenticação, provê um nível de segurança raramente alcançado por outros protocolos. Domine a sua RFC 4252, utilize preferencialmente chaves Ed25519, desative senhas em produção, adote MFA em servidores críticos e audite constantemente os logs de acesso para garantir que sua infraestrutura permaneça soberana e íntegra em qualquer ambiente de rede, seja ele uma nuvem pública global ou uma rede industrial isolada.