Home Comunidade Eventos YouTube Networks Desafios // produtos Academy News CTI | CVE Contato

07 - Protocolo SSH

video explicativo
Video explicativoEspaco reservado para o video desta anotação — adicione 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

  1. TCP Handshake: Cliente abre conexão à porta 22 do servidor (3-way handshake).
  2. Version String: Ambos os lados trocam suas strings de versão (SSH-2.0-OpenSSH_9.0).
  3. KEXINIT: Cliente e servidor anunciam algoritmos suportados (cifras, MACs, KEX, compressão).
  4. Key Exchange (KEX): Diffie-Hellman ou Curve25519 produz um segredo compartilhado sem nunca transmiti-lo.
  5. Newkeys: Troca de chaves de sessão; todos os pacotes a partir daqui são cifrados.
  6. Autenticação: Cliente prova identidade via publickey (recomendado) ou password.
  7. Channel Open: Cliente solicita abertura de canal de sessão.
  8. Execução: Shell interativo ou comando exec remoto é executado.
  9. Término: Qualquer lado envia SSH_MSG_DISCONNECT com 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.