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

08 - Fundamentos

video explicativo
Video explicativoEspaco reservado para o video desta anotação — adicione video: https://youtu.be/... no frontmatter da nota.

Fundamentos do Protocolo SSH

O SSH (Secure Shell) é o protocolo da Camada de Aplicação que substituiu com segurança os antigos rsh, rlogin, telnet e rsh. Definido pelas RFCs 4250-4256 (2006) e atualizado pelas RFCs 5656, 6668, 8268, 8308, 8709 e 8731, o SSH provê canal criptografado, autenticado e com integridade sobre uma rede não confiável (como a internet). É hoje o padrão de fato para administração remota de sistemas Unix/Linux, transferência segura de arquivos (SFTP/SCP) e tunelamento de portas.

1. Características Fundamentais

Atributo Valor
Camada OSI 7 (Aplicação)
Protocolo de transporte TCP
Porta padrão 22
Modelo Cliente-Servidor
Estado Stateful (sessão persistente)
Cifragem padrão ChaCha20-Poly1305, AES-GCM
Troca de chaves Curve25519, ECDH, DH
RFCs principais 4250, 4251, 4252, 4253, 4254, 5656, 8731, 8709

2. Camadas do Protocolo SSH

O SSH é estruturado em três camadas internas:

Camada RFC Função
Transport Layer 4253 Estabelece canal seguro, troca de chaves, criptografia
Authentication Layer 4252 Autentica o usuário (senha, chave pública, Kerberos)
Connection Layer 4254 Multiplexa canais (shell, exec, X11, port-forwarding)

Essa separação permite que cada camada use algoritmos independentes negociados dinamicamente.

3. Etapas de uma Conexão SSH

  1. TCP Handshake: cliente abre conexão TCP na porta 22.
  2. Version Exchange: cliente e servidor trocam strings de versão (ex: SSH-2.0-OpenSSH_9.6).
  3. Algorithm Negotiation: troca de pacotes SSH_MSG_KEXINIT listando algoritmos suportados (KEX, host key, cipher, MAC, compression).
  4. Key Exchange (KEX): Diffie-Hellman ou ECDH. Ambos derivam chave de sessão compartilhada sem transmiti-la.
  5. Server Authentication: servidor assina o hash H com sua chave privada. Cliente verifica contra ~/.ssh/known_hosts (Trust On First Use - TOFU).
  6. New Keys: pacote SSH_MSG_NEWKEYS ativa as chaves derivadas e cifras.
  7. User Authentication: usuário prova identidade (senha, chave pública, GSSAPI/Kerberos, etc).
  8. Channel Opening: aberto canal de sessão (shell, exec, subsistema SFTP).
  9. Dados criptografados: comandos e respostas trafegam com confidencialidade e integridade.

4. Negociação de Algoritmos

Categorias Negociadas

Categoria Exemplos Modernos
Key Exchange (KEX) curve25519-sha256, ecdh-sha2-nistp256, diffie-hellman-group16-sha512
Host Key ssh-ed25519, rsa-sha2-512, ecdsa-sha2-nistp256
Cipher chacha20-poly1305@openssh.com, aes256-gcm@openssh.com, aes256-ctr
MAC (modo CTR) hmac-sha2-256-etm@openssh.com, umac-128-etm@openssh.com
Compression none, zlib@openssh.com
# Lista algoritmos suportados pelo cliente
ssh -Q kex
ssh -Q cipher
ssh -Q mac
ssh -Q key

# Força algoritmo específico (debug)
ssh -o KexAlgorithms=curve25519-sha256 \
    -o Ciphers=chacha20-poly1305@openssh.com \
    -o MACs=hmac-sha2-256-etm@openssh.com \
    user@host

5. Métodos de Autenticação

Por Senha (password)

Senha é enviada pelo canal criptografado. Seguro contra sniffing, mas vulnerável a brute-force.

Por Chave Pública (publickey)

  • Recomendado pela RFC 4252 e NIST SP 800-63B.
  • Cliente prova posse da chave privada respondendo a um desafio assinado.
  • Servidor verifica a assinatura contra ~/.ssh/authorized_keys.
Algoritmo Tamanho Recomendação
Ed25519 (RFC 8709) 256 bits Recomendado (rápido, seguro)
RSA-SHA2 (RFC 8332) 3072-4096 Aceitável (use SHA-2, não SHA-1)
ECDSA 256/384/521 Aceitável (curvas NIST)
DSA 1024 Obsoleto (removido do OpenSSH 9.0+)
Ed25519-SK 256 + FIDO2 Hardware token (YubiKey, etc)

Por Teclado Interativo (keyboard-interactive)

Permite múltiplos desafios (incluindo 2FA via TOTP, OATH).

GSSAPI/Kerberos

Integração com Active Directory ou MIT Kerberos (SSO empresarial).

Host-based

Confiança baseada no host de origem (estilo antigo .rhosts, mas criptografado).

6. Connection Layer e Canais

Após autenticado, o SSH multiplexa múltiplos canais lógicos na mesma conexão TCP:

Canal Função
session Shell interativo, comando único, subsistema
direct-tcpip / forwarded-tcpip Port forwarding local (-L) / remoto (-R)
x11 Túnel X11 (aplicações gráficas Unix)
subsystem Subsistemas como sftp

7. Recursos do SSH

Port Forwarding

ssh -L 8080:interno.exemplo.com:80 user@gateway.exemplo.com   # local (-L): acessa serviço remoto via porta local
ssh -R 9090:localhost:22 user@servidor.exemplo.com            # remoto (-R): expõe porta local no servidor remoto
ssh -D 1080 user@servidor.exemplo.com                         # dinâmico (-D): SOCKS proxy

Agent Forwarding vs ProxyJump

ssh -A user@servidor.exemplo.com                 # Agent Forwarding (riscoso — agentes comprometidos no servidor)
ssh -J jump@bastion.exemplo.com user@alvo.exemplo.com   # ProxyJump (recomendado desde OpenSSH 7.3+)

SCP e SFTP

scp arquivo.txt user@host:/tmp/                 # SCP (legado, simplificado)
sftp user@host                                  # SFTP (recomendado, RFC 4251)

8. Configuração do Servidor (sshd_config)

# /etc/ssh/sshd_config
Port 22
Protocol 2
PermitRootLogin prohibit-password
PasswordAuthentication no
PubkeyAuthentication yes
UsePAM yes
# Algoritmos modernos
KexAlgorithms curve25519-sha256,ecdh-sha2-nistp256
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com
MACs hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com
HostKeyAlgorithms ssh-ed25519,rsa-sha2-512,ecdsa-sha2-nistp256
# Limites e isolamento
MaxAuthTries 3
LoginGraceTime 30
AllowUsers admin deploy
AllowGroups sshusers
X11Forwarding no
ClientAliveInterval 300
ClientAliveCountMax 2
# Chroot para SFTP-only
Subsystem sftp internal-sftp
Match Group sftpusers
    ChrootDirectory /home/%u
    ForceCommand internal-sftp
    AllowTcpForwarding no
    X11Forwarding no

9. Vulnerabilidades Históricas e Mitigações

Vulnerabilidade Ano Mitigação
SSH-1 protocol flaw 1998-2001 Migrar para SSH-2 (OpenSSH 7.6+ removeu SSH-1)
ROCA (CVE-2017-15361) 2017 Rotação de chaves RSA Infineon
Terrapin (CVE-2023-48795) 2023 Desativar chacha20-poly1305 afetado, aplicar patch
OpenSSH user enumeration 2018+ MaxAuthTries baixo, fail2ban
Weak DH groups (Logjam) 2015 Migrar para curve25519
CBC padding oracle 2008 Usar CTR/GCM, desativar CBC

10. Ferramentas e Auditoria

nmap --script ssh2-enum-algos -p 22 host          # algoritmos suportados pelo servidor
ssh-audit host                                   # auditar configuração do sshd
ssh-keygen -F host                              # verificar host key (fingerprint)
nc -v host 22                                    # capturar banner SSH (sem logar)
ssh -vvv user@host                              # verbose completo (até 3 níveis)
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null user@host   # TOFU bypass

11. Best Practices de Hardening

  1. Desabilitar SSH-1 (apenas Protocol 2); desabilitar autenticação por senha quando possível.
  2. Usar Ed25519 para chaves de host e usuário; limitar usuários com AllowUsers/AllowGroups.
  3. Desabilitar root direto (PermitRootLogin prohibit-password); configurar fail2ban contra brute-force.
  4. Usar MFA via keyboard-interactive (Google Authenticator, OATH-TOTP).
  5. Rotação anual de chaves de host; monitorar logs (/var/log/auth.log, /var/log/secure).
  6. Patching periódico — SSH é alvo frequente de CVEs críticos.

12. Conclusão

O SSH é uma das ferramentas mais críticas para administradores de sistemas e analistas de segurança. Compreender seus fundamentos — camadas do protocolo, etapas de conexão, algoritmos modernos, métodos de autenticação e mecanismos de tunneling — é essencial para operar infraestruturas seguras e identificar vetores de ataque. Em um mundo que caminha para Zero Trust, o SSH permanece como base de administração remota segura, sendo continuamente atualizado (RFC 8709 Ed25519, RFC 8731 Curve25519 KEX, RFC 8308 Extension Negotiation) para enfrentar novas ameaças como Terrapin (2023).