SMTP
El Protocolo de Transferencia de Correo Simple (SMTP) es un protocolo para enviar correos electrónicos en una red IP. Puede utilizarse entre un cliente de correo y un servidor de correo saliente o entre dos servidores SMTP. SMTP a menudo se combina con los protocolos IMAP o POP3, que pueden recuperar y enviar correos electrónicos. En principio, es un protocolo basado en cliente-servidor, aunque SMTP puede utilizarse tanto entre un cliente y un servidor como entre dos servidores SMTP. En este caso, un servidor actúa efectivamente como cliente.
Por defecto, los servidores SMTP aceptan solicitudes de conexión en el puerto 25. Sin embargo, los servidores SMTP más nuevos también utilizan otros puertos, como el puerto TCP 587. Este puerto se utiliza para recibir correos de usuarios/servidores autenticados, normalmente usando el comando STARTTLS para cambiar la conexión en texto claro existente a una conexión cifrada. Los datos de autenticación están protegidos y ya no son visibles en texto claro a través de la red. Al comienzo de la conexión, se realiza la autenticación cuando el cliente confirma su identidad con un nombre de usuario y una contraseña. Los correos electrónicos pueden ser transmitidos. Para ello, el cliente envía al servidor las direcciones del remitente y del destinatario, el contenido del correo y otra información y parámetros. Después de que el correo ha sido transmitido, la conexión se termina nuevamente. El servidor de correo comienza entonces a enviar el correo a otro servidor SMTP.
SMTP funciona sin cifrar por defecto y transmite todos los comandos, datos o información de autenticación en texto claro. Para prevenir la lectura no autorizada de datos, SMTP se utiliza junto con el cifrado SSL/TLS. En ciertas circunstancias, un servidor utiliza un puerto diferente al puerto TCP estándar 25 para la conexión cifrada, por ejemplo, el puerto TCP 465.
Una función esencial de un servidor SMTP es prevenir el spam mediante mecanismos de autenticación que permiten solo a usuarios autorizados enviar correos electrónicos. Para ello, la mayoría de los servidores SMTP modernos soportan la extensión del protocolo ESMTP con SMTP-Auth. Después de enviar su correo, el cliente SMTP, también conocido como Agente de Usuario de Correo (MUA), lo convierte en un encabezado y un cuerpo y sube ambos al servidor SMTP. Este tiene un Agente de Transferencia de Correo (MTA), la base del software para enviar y recibir correos electrónicos. El MTA verifica el correo para tamaño y spam y luego lo almacena. Para aliviar al MTA, ocasionalmente se le precede un Agente de Envío de Correo (MSA), que verifica la validez, es decir, el origen del correo electrónico. Este MSA también se llama servidor Relay. Estos son muy importantes más adelante, ya que se puede llevar a cabo el llamado Ataque de Relay Abierto en muchos servidores SMTP debido a una configuración incorrecta. Discutiremos este ataque y cómo identificar el punto débil para él un poco más adelante. El MTA luego busca en el DNS la dirección IP del servidor de correo del destinatario.
Al llegar al servidor SMTP de destino, los paquetes de datos se reensamblan para formar un correo electrónico completo. Desde allí, el Agente de Entrega de Correo (MDA) lo transfiere a la bandeja de entrada del destinatario. Cliente (MUA) ➞ Agente de Envío (MSA) ➞ Relay Abierto (MTA) ➞ Agente de Entrega de Correo (MDA) ➞ Bandeja de Entrada (POP3/IMAP)
Pero SMTP tiene dos desventajas inherentes al protocolo de red:
El primero es que enviar un correo electrónico usando SMTP no devuelve una confirmación de entrega utilizable. Aunque las especificaciones del protocolo prevén este tipo de notificación, su formato no está especificado por defecto, por lo que generalmente solo se devuelve un mensaje de error en inglés, incluyendo el encabezado del mensaje no entregado.
Los usuarios no están autenticados cuando se establece una conexión, y por lo tanto, el remitente de un correo electrónico es poco confiable. Como resultado, los relays SMTP abiertos a menudo se utilizan para enviar spam en masa. Los originadores usan direcciones de remitente falsas arbitrarias para no ser rastreados (suplantación de correo). Hoy en día, se utilizan muchas técnicas de seguridad diferentes para prevenir el mal uso de los servidores SMTP. Por ejemplo, los correos electrónicos sospechosos se rechazan o se mueven a cuarentena (carpeta de spam). Por ejemplo, responsables de esto son el protocolo de identificación DomainKeys (DKIM), el Sender Policy Framework (SPF).
Para ello, se ha desarrollado una extensión para SMTP llamada SMTP Extendido (ESMTP). Cuando se habla de SMTP en general, normalmente se refiere a ESMTP. ESMTP utiliza TLS, que se realiza después del comando EHLO enviando STARTTLS. Esto inicializa la conexión SMTP protegida por SSL, y a partir de este momento, toda la conexión está cifrada y, por lo tanto, es más o menos segura. Ahora, la extensión AUTH PLAIN para la autenticación también puede utilizarse de forma segura.
Configuración por Defecto
Cada servidor SMTP puede ser configurado de muchas maneras, al igual que todos los demás servicios. Sin embargo, hay diferencias porque el servidor SMTP solo es responsable de enviar y reenviar correos electrónicos.
Configuración por Defecto de SMTP
El envío y la comunicación también se realizan mediante comandos especiales que hacen que el servidor SMTP ejecute lo que el usuario requiere.
Para interactuar con el servidor SMTP, podemos usar la herramienta telnet
para inicializar una conexión TCP con el servidor SMTP. La inicialización real de la sesión se realiza con el comando mencionado anteriormente, HELO o EHLO.
Ejemplo de Telnet - HELO/EHLO
El comando VRFY puede usarse para enumerar los usuarios existentes en el sistema. Sin embargo, esto no siempre funciona. Dependiendo de cómo esté configurado el servidor SMTP, el servidor SMTP puede emitir el código 252 y confirmar la existencia de un usuario que no existe en el sistema. Una lista de todos los códigos de respuesta SMTP se puede encontrar aquí.
Ejemplo de Telnet - VRFY
Por lo tanto, nunca se debe confiar completamente en los resultados de herramientas automáticas. Después de todo, ejecutan comandos preconfigurados, pero ninguna de las funciones especifica explícitamente cómo el administrador configura el servidor probado.
A veces, podemos tener que trabajar a través de un proxy web. También podemos hacer que este proxy web se conecte al servidor SMTP. El comando que enviaríamos se vería algo así: CONNECT 10.129.14.128:25 HTTP/1.0
.
Todos los comandos que ingresamos en la línea de comandos para enviar un correo electrónico son conocidos de cualquier programa de cliente de correo como Thunderbird, Gmail, Outlook y muchos otros. Especificamos el asunto, a quién debe ir el correo electrónico, CC, BCC y la información que queremos compartir con otros. Por supuesto, lo mismo funciona desde la línea de comandos.
Para enviar un correo electrónico utilizando SMTP, se puede usar la herramienta telnet
para establecer una conexión con el servidor SMTP. A continuación, se muestra un ejemplo de cómo enviar un correo electrónico.
Ejemplo de Telnet para Enviar un Correo Electrónico
La cabecera del correo electrónico es portadora de una gran cantidad de información interesante en un correo electrónico. Entre otras cosas, proporciona información sobre el remitente y el destinatario, el momento de envío y llegada, las estaciones por las que pasó el correo electrónico en su camino, el contenido y formato del mensaje, y el remitente y el destinatario.
Algunos de estos datos son obligatorios, como la información del remitente y la fecha en que se creó el correo electrónico. Otra información es opcional. Sin embargo, la cabecera del correo electrónico no contiene información necesaria para la entrega técnica. Se transmite como parte del protocolo de transmisión. Tanto el remitente como el destinatario pueden acceder a la cabecera de un correo electrónico, aunque no es visible a primera vista. La estructura de una cabecera de correo electrónico está definida por la RFC 5322.
Configuraciones Peligrosas
Para evitar que los correos electrónicos enviados sean filtrados por filtros de spam y no lleguen al destinatario, el remitente puede usar un servidor de retransmisión que el destinatario confíe. Este es un servidor SMTP que es conocido y verificado por todos los demás. Por lo general, el remitente debe autenticarse en el servidor de retransmisión antes de usarlo.
A menudo, los administradores no tienen una visión clara de qué rangos de IP deben permitir. Esto resulta en una configuración incorrecta del servidor SMTP que a menudo encontramos en pruebas de penetración externas e internas. Por lo tanto, permiten todas las direcciones IP para no causar errores en el tráfico de correo electrónico y así no perturbar ni interrumpir la comunicación con clientes potenciales y actuales.
Configuración de Relay Abierto
Con esta configuración, el servidor SMTP puede enviar correos electrónicos falsos e iniciar la comunicación entre múltiples partes. Otra posibilidad de ataque sería falsificar el correo electrónico y leerlo.
Footprinting the Service
Los scripts predeterminados de Nmap incluyen smtp-commands
, que utiliza el comando EHLO para enumerar todos los comandos posibles que se pueden ejecutar en el servidor SMTP de destino.
Nmap
Sin embargo, también podemos usar el script NSE smtp-open-relay
para identificar si el servidor SMTP objetivo es un relay abierto mediante 16 pruebas diferentes. Si también imprimimos la salida del escaneo en detalle, podremos ver qué pruebas está ejecutando el script.
Nmap - Relay Abierto
Para detectar si un servidor SMTP es un relay abierto, podemos utilizar el script smtp-open-relay
de Nmap. Este script realiza 16 pruebas diferentes para determinar si el servidor permite el reenvío de correos electrónicos desde cualquier dirección IP.
El resultado indica que el servidor SMTP está configurado como un relay abierto, ya que ha pasado todas las pruebas del script (16/16). Esto significa que el servidor permite el reenvío de correos electrónicos desde cualquier dirección IP, lo que puede ser un problema de seguridad significativo.
Last updated