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

07 - Interação e Comandos

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

  1. Comando: O cliente envia uma palavra de 4 caracteres (em sua maioria) seguida de argumentos e uma quebra de linha \r\n (CRLF).
  2. 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:

  1. Abertura e Identificação (HELO / EHLO): Inicia a sessão e negocia extensões.
  2. Definição do Remetente do Envelope (MAIL FROM): Inicia a transação de correio.
  3. Definição dos Destinatários (RCPT TO): Pode ser repetido para múltiplos e-mails.
  4. Transferência do Conteúdo (DATA): O corpo da mensagem e cabeçalhos.
  5. 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