07 - Interação e Comandos
video: https://youtu.be/... no frontmatter da nota.Interação e Comandos SMTP
A Interação e Comandos SMTP constituem a linguagem de conversação síncrona e orientada a texto que governa a troca de mensagens eletrônicas. Baseado em um modelo de comando-resposta estrito, o protocolo SMTP (especialmente na RFC 5321) define uma máquina de estados finitos que deve ser rigidamente seguida para garantir que o transporte de dados seja confiável e passível de auditoria em cada etapa.
1. A Anatomia da Sessão SMTP
Toda interação SMTP segue um ciclo de vida determinístico. A comunicação ocorre em um canal de texto plano (ou elevado via TLS) sobre a Camada de Transporte (TCP).
O Modelo de Comando e Resposta (Client-Server)
A conversação é sempre iniciada pelo cliente (MUA ou MTA Ativo):
- Comando: O cliente envia uma palavra de 4 caracteres (em sua maioria) seguida de argumentos e uma quebra de linha
\r\n(CRLF). - Resposta: O servidor processa o comando e responde com um Código Numérico de 3 dígitos seguido de um texto explicativo.
A sessão completa segue uma estrutura sequencial obrigatória, da qual não se pode desviar:
[Conexão TCP estabelecida]
↓
[Banner 220 do servidor]
↓
[EHLO/HELO do cliente]
↓
[MAIL FROM do remetente]
↓
[RCPT TO do destinatário(s)]
↓
[DATA + corpo da mensagem + <CRLF>.<CRLF>]
↓
[QUIT do cliente]
↓
[Conexão TCP fechada]
2. A Hierarquia dos Códigos de Resposta
Entender os códigos de resposta é fundamental para o diagnóstico de redes e detecção de ataques de segurança. Os códigos seguem o padrão X.Y.Z onde X é a classe principal.
Classe X (Primeiro Dígito)
| Classe | Significado | Ação do Cliente |
|---|---|---|
| 1xx | Positive Preliminary | Raramente usado |
| 2xx | Positive Completion | Comando aceito, pronto para próximo |
| 3xx | Positive Intermediate | Mais dados esperados |
| 4xx | Transient Negative | Erro temporário, tentar depois (retry) |
| 5xx | Permanent Negative | Erro fatal, descartar e notificar remetente |
Classe Y (Segundo Dígito)
| Classe | Categoria |
|---|---|
| 0 | Sintaxe |
| 1 | Informação |
| 2 | Conexão |
| 5 | Sistema de correio |
Classe Z (Terceiro Dígito)
Detalhamento específico do erro/sucesso.
Exemplos Comuns
| Código | Significado | Classe |
|---|---|---|
| 220 | Service ready | 2.2 |
| 221 | Service closing | 2.2 |
| 235 | Authentication succeeded | 2.3 |
| 250 | Requested mail action OK | 2.5 |
| 354 | Start mail input; end with CRLF.CRLF | 3.5 |
| 421 | Service not available, closing | 4.2 |
| 450 | Mailbox temporarily unavailable | 4.5 |
| 451 | Local error | 4.5 |
| 452 | Insufficient storage | 4.5 |
| 500 | Syntax error, unrecognized | 5.0 |
| 501 | Syntax error in parameters | 5.0 |
| 535 | Authentication failed | 5.3 |
| 550 | Mailbox unavailable (user doesn't exist) | 5.5 |
| 551 | User not local; please try forwarder | 5.5 |
| 552 | Exceeded storage allocation | 5.5 |
| 553 | Mailbox name not allowed | 5.5 |
| 554 | Transaction failed | 5.5 |
3. A Sequência Obrigatória de Comandos
O fluxo de comandos não pode ser alterado sob pena de erro de protocolo. A RFC 5321 define a ordem canônica:
- Abertura e Identificação (
HELO/EHLO): Inicia a sessão e negocia extensões. - Definição do Remetente do Envelope (
MAIL FROM): Inicia a transação de correio. - Definição dos Destinatários (
RCPT TO): Pode ser repetido para múltiplos e-mails. - Transferência do Conteúdo (
DATA): O corpo da mensagem e cabeçalhos. - Encerramento (
QUIT): Fecha a sessão SMTP.
Comandos Complementares
- RSET: Aborta a transação atual sem fechar a conexão.
- NOOP: "No operation" — usado para keepalive.
- VRFY: Verifica se um usuário existe (geralmente desativado por segurança).
- EXPN: Expande lista de e-mails (geralmente desativado).
- HELP: Lista comandos suportados.
- STARTTLS: Eleva conexão para TLS.
- AUTH: Autentica o cliente.
4. O Impacto Estratégico do SMTP Estendido (ESMTP)
Embora o SMTP original utilizasse o comando HELO, a modernização trouxe o EHLO (Extended HELO). Quando o servidor recebe um EHLO, ele responde com uma lista de capacidades suportadas:
STARTTLS: Capacidade de elevar para criptografia.SIZE: Informa o tamanho máximo de e-mail aceito.AUTH: Lista os métodos de autenticação suportados (PLAIN, LOGIN, OAuth2).PIPELINING: Permite que o cliente envie múltiplos comandos sem esperar a resposta individual de cada um, otimizando a latência de rede.8BITMIME: Suporte a caracteres 8-bit no corpo.SMTPUTF8: Suporte a endereços Unicode (RFC 6531).
5. Cyber Security: Atacando e Defendendo via Comandos
Para um analista de Cyber Security, a conversação de comandos é o ponto de exploração primário.
Enumeração de Usuários (VRFY e EXPN)
VRFY: Comando original usado para verificar se um usuário existe.EXPN: Usado para expandir listas de e-mails.- Defesa: Servidores modernos desativam estes comandos por padrão (Hardening) para evitar que atacantes colham endereços de e-mail corporativos para campanhas de phishing.
Comandos de Injeção e SMTP Smuggling
A manipulação da sequência de comandos (ex: injetar um novo comando MAIL FROM no meio de uma transação DATA) é uma técnica avançada de contrabando de e-mails que permite bypassar sistemas de segurança sofisticados. O CVE-2023-51764 demonstrou essa vulnerabilidade em vários MTAs populares.
Account Takeover via AUTH
- Ataque de força bruta em AUTH PLAIN/LOGIN: Atacantes tentam milhares de combinações de senha. Defesa: rate limiting, captcha, fail2ban.
- Credential stuffing: Usar credenciais vazadas de outros serviços. Defesa: MFA, políticas de senha forte.
- Downgrade AUTH: Forçar métodos fracos (PLAIN sem TLS). Defesa: exigir STARTTLS antes de AUTH.
6. Laboratório Prático: Diálogo em Baixo Nível
A melhor forma de auditar a interação de comandos é o uso do comando telnet ou nc:
$ telnet mx.receptor.com 25
S: 220 mx.receptor.com ESMTP Postfix
C: EHLO mail.emissor.com
S: 250-PIPELINING / 250-SIZE 10485760 / 250-STARTTLS / 250 AUTH LOGIN PLAIN
C: MAIL FROM:<remetente@emissor.com> S: 250 2.1.0 Ok
C: RCPT TO:<destino@alvo.com> S: 250 2.1.5 Ok
C: DATA S: 354 End data with <CR><LF>.<CR><LF>
C: Subject: Teste de Interacao SMTP
C: Este e um exemplo de texto plano puro.
C: . S: 250 2.0.0 Ok: queued as 4B1Z92
C: QUIT S: 221 2.0.0 Bye
Para auditorias automatizadas com TLS+AUTH, a ferramenta swaks (Swiss Army Knife for SMTP) é recomendada: swaks --to X --from Y --server Z --tls --auth-user USER --auth-password '***'.
7. Latência de Conversação e Performance
Como o SMTP é um protocolo síncrono ("Ping-Pong"), a latência de rede (RTT) afeta diretamente o tempo de envio. Se cada comando exige 100ms de latência, uma transação completa com 5 comandos demorará pelo menos meio segundo apenas em handshakes.
A extensão PIPELINING (RFC 2920) resolve isto: permite ao cliente enviar MAIL FROM, RCPT TO e DATA em sequência, sem aguardar respostas individuais — o servidor responde em lote. Resultado: reduz de 5 RTTs para 2 RTTs o tempo total de uma transação, economizando 400ms por mensagem em links de 100ms. Crítico para provedores que enviam milhões de mensagens por hora.
8. Conclusão
A conformidade total com a máquina de estados do SMTP é a barreira principal contra falhas de entrega. Servidores que operam fora das diretrizes das RFCs (como enviar dados antes do banner de saudação) são frequentemente classificados como "hosts maliciosos" e bloqueados preventivamente por sistemas de reputação global. O domínio da sintaxe de comandos, códigos de resposta, extensões ESMTP e técnicas de otimização como PIPELINING é o que separa um administrador amador de um arquiteto de e-mail capaz de operar infraestruturas de alto volume com confiabilidade e segurança.
| Atributo | Valor |
|---|---|
| RFC principal | 5321 (SMTP), 4954 (AUTH), 3207 (STARTTLS) |
| Portas | 25 (relay), 587 (submission), 465 (SMTPS) |
| Codificação | ASCII 7-bit (texto plano) |
| Término de linha | CRLF (\r\n) |
| Comandos core | EHLO, MAIL, RCPT, DATA, QUIT |
| Término de dados | <CRLF>.<CRLF> |
| Extensões | PIPELINING, STARTTLS, AUTH, SIZE, 8BITMIME, SMTPUTF8 |
| Estado de máquina | RFC 5321 seção 4.1 |