A la caza de gusanos – Capítulo I

blog-gusano-1

Bienvenidos a esta tercer publicación.

En esta oportunidad vamos a hablar de un medio de propagación de gusanos que sigue siendo muy popular al día de hoy.

Este medio lo utilizamos diariamente para trabajar, estudiar, comprar, etc y es ni más ni menos que el correo electrónico.

La empresa Statista ( https://www.statista.com/ ), la cual ofrece servicios de recopilación, análisis y distribución de datos estadísticos sobre más de 80.000 temas, extraídos de más de 22.500 fuentes procedentes de estudios de mercado y de opinión, publicó un reporte titulado “Number of e-mail users worldwide 2017-2024” ( https://www.statista.com/statistics/255080/number-of-e-mail-users-worldwide/ ), en el cual menciona algunos datos muy interesantes:

.- En el año 2020, el número de usuarios de correo electrónico en el mundo, ascendió a 3900 millones, previendo que el mismo aumente a 4480 millones de usuarios en el 2024

grafico 1

.- En el año 2018, se enviaron y recibieron aproximadamente unos 281 mil millones de correos todos los días en el mundo y se prevee que la cifra aumente a más de 347 mil millones de correos diarios para el 2023.

Estos números hacen que este medio siga siendo muy popular en la propagación de software malicioso.

Hay un detalle importante a aclarar que es el siguiente, dentro de el envío de correo electrónico tenemos que subdividir el mismo de acuerdo a la forma en la cual se hacen dichos envíos.

Hoy en día podemos enviar correo mediante:

.- Un programa cliente de correo, utilizando el clásico puerto TCP/25 (El protocolo SMTP estándar, el cual es inseguro y nos vamos a centrar en él en este artículo)

.- Un programa cliente de correo, utilizando el puerto TCP/465, (la encriptación SSL se inicia de manera automática antes de cualquier nivel de comunicación SMTP).

.- Un programa cliente de correo, utilizando el puerto TCP/587 (Básicamente es un SMTP estándar que puede soportar encriptación SSL)

.- Un servidor de correo en la empresa, utilizando cualquiera de los tres puertos mencionados anteriormente (el 25 que es el que vamos a desarrollar aquí muy utilizado al día de hoy)

.-Un navegador, utilizando webmail (ej. firefox, chrome, etc accediendo a gmail, outlook, etc).

El procolo estándar y original de envío de correos (SMTP), está definido en un RFC número 821 de agosto de 1982, modificado luego por el RFC 2821 de abril del 2001

( https://tools.ietf.org/html/rfc2821 )

Básicamente (como cualquier protocolo), cuenta con una serie de comandos que nos permiten conectarnos a un servidor de correo y enviar un mensaje.

 

Su funcionamiento es muy sencillo y vamos a ver un ejemplo utilizando el comando “telnet”.

alejandro@alejo:~$ telnet i-guardian.biz 25

Trying 144.208.69.31...

Connected to i-guardian.biz.

Escape character is '^]'.

220-biz251.inmotionhosting.com ESMTP Exim 4.93 #2 Thu, 04 Mar 2021 04:35:26 -0800

220-We do not authorize the use of this system to transport unsolicited,

220 and/or bulk e-mail.

ehlo i-guardian.biz

250-biz251.inmotionhosting.com Hello i-guardian.biz [167.57.144.106]

250-SIZE 52428800

250-8BITMIME

250-PIPELINING

250-AUTH PLAIN LOGIN

250-CHUNKING

250-STARTTLS

250 HELP

mail from:alejandro@i-guardian.biz

250 OK

rcpt to:alejandro@i-guardian.biz

250 Accepted

data

354 Enter message, ending with "." on a line by itself

Subject: Mensaje de Prueba de Correo

Aca va el mismo.

Saludos.

250 OK id=1lHnCi-005WTU-B4

quit

221 biz251.inmotionhosting.com closing connection

Connection closed by foreign host.

Lo que está resaltado son los comandos que ejecuté desde mi terminal.

ehlo i-guardian.biz : Con este comando inicio la sesión de envío

mail from: alejandro@i-guardian.biz -> me identifico como el remitente del correo (Noten que este comando que me permitiría identificarme con cualquier dirección de correo)

rcpt to: alejandro@i-guardian.biz -> Hacia quien va dirigido el correo

data -> Aquí va la porción del mensaje

Subject: Es el asunto. Luego va el texto y para finalizar el envío escribimos un punto “.”

 

Es importante aclarar que si bien parece simple lo que detalle recién, en la realidad ocurre que  antes y luego de la conexión se aplican muchos tipos de controles.

Por nombrar algunos, tenemos RBL (Real Time BlackLists - listas negras de direcciones IP),  SPF (Sender Policy Framework), DKIM (Domain Keys), DMARC (Domain-based Message Authentication Reporting and Conformance), sistemas antivirus y antispam en el servidor, etc.

Igualmente el porcentaje de correos que escapan a estos controles sigue siendo muy grande.

Imagínen además que tienen un servidor de correo dentro de su empresa. El hecho de que algún equipo pueda infectarse y comenzar a enviar correos de manera masiva genera que  las direcciones IP desde donde salen los correos legítimos, empiecen a caer en listas negras y por ende sean rebotados por el destinatario.

Esto se podría solucionar denegando a nivel de firewall la salida de correos estándar (puerto 25) a todos los equipos en la red a excepción del servidor, cosa que en muchísimos casos no se hace (por desconocimiento, por incapacidad de realizarlo dado el hardware con el que se cuenta, o por el motivo que sea)

Ahora, como podemos hacer para detectar este tipo de envíos ?

Tenemos tres opciones:

  1. - Si no tenemos posibilidad de contar con un firewall que nos permita operar en línea de comandos capturando tráfico, podemos aplicar una técnica que mencione en el artículo anterior llamada arp spoofing ( https://i-guardian.biz/2020/02/05/pescando-phishing-sin-presupuesto/ ).

Mediante esta técnica podríamos hacer pasar el tráfico de los equipos en la misma red por nuestro equipo y analizar ahí los envíos.

  1. Teniendo acceso a un firewall (utilizaré como ejemplo Linux)
  2. Mediante GuardiaN 😉

 

Ahora bien, la manera más simple para registrar actividad de correos en un firewall linux hacia un puerto destino tcp/25 puede ser usando la herramienta “iptables”.

Esta herramienta permite gestionar el sistema de firewall en Linux y si bien es sumamente completa y extensa, voy a poner un ejemplo muy simple como el siguiente:

/sbin/iptables -I FORWARD -p tcp --dport 25 -j LOG

Este comando agrega al principio de la tabla “FORWARD” (es decir el tráfico de pasada que no viene destinado hacia nosotros), todo lo que sea protocolo “tcp” con puerto destino “25” la acción es registrar en un archivo de registros (log) del sistema “LOG” (normalmente /var/log/kern.log).

La salida de este comando es la siguiente:

Mar  3 16:43:37 guardian kernel: [219509.486307] IN=wlan0 OUT=eth0 MAC=b8:27:eb:20:ab:35:c8:3a:35:c4:ab:56:08:00 SRC=192.168.168.2 DST=144.208.69.31 LEN=60 TOS=0x10 PREC=0x00 TTL=62 ID=11671 DF PROTO=TCP SPT=43706 DPT=25 WINDOW=64240 RES=0x00 SYN URGP=0

Mar  3 16:43:37 guardian kernel: [219509.792827] IN=wlan0 OUT=eth0 MAC=b8:27:eb:20:ab:35:c8:3a:35:c4:ab:56:08:00 SRC=192.168.168.2 DST=144.208.69.31 LEN=52 TOS=0x10 PREC=0x00 TTL=62 ID=11672 DF PROTO=TCP SPT=43706 DPT=25 WINDOW=502 RES=0x00 ACK URGP=0

 

Veamos que datos relevantes podemos observar aquí:

Fecha y hora

IP del equipo

Dirección física (MAC)

 

Mar  3 16:43:37 guardian kernel: [219509.486307] IN=wlan0 OUT=eth0 MAC=b8:27:eb:20:ab:35:c8:3a:35:c4:ab:56:08:00 SRC=192.168.168.2 DST=144.208.69.31 LEN=60 TOS=0x10 PREC=0x00 TTL=62 ID=11671 DF PROTO=TCP SPT=43706 DPT=25 WINDOW=64240 RES=0x00 SYN URGP=0

Esta es la primer manera que tenemos de registro y si bien es de utilidad (ya que cualquier actividad de envío debería ser motivo de atención y por lo menos prender una alarma), no es algo que nos brinde una información abundante ya que los datos indican poco, sabemos que hay un equipo enviando correos pero no tenemos más información.

Como podemos mejorar un poco y tener más detalle ?

Aquí vamos a utilizar otra manera que es mediante la clásica herramienta “tcpdump”.

Esta herramienta, es un analizador de paquetes creada originalmente en el año 1988 por los señores Van Jacobson, Sally Floyd, Vern Paxson y Steven McCanne ( https://www.tcpdump.org ), el cual al igual que iptables es sumamente extenso, permitiendo analizar tráfico aplicando filtros.

A los efectos de poder capturar envío de correos utilizaríamos un comando como el siguiente:

tcpdump -i eth0 -nn -s0 -A port 25

-i eth0 -> la interfaz de red sobre la cual queremos monitorear el tráfico

-nn -> no resolver direcciones y puertos a nombres (esto agiliza el despliegue de información)

-s0 -> Tamaño del paquete (por defecto son 262144 bytes, poniendo en 0 no tiene límite)

-A -> Impirmir cada paqutes en ASCII (esto facilita notablemente la lectura)

port 25 -> El puerto a monitorear

Una vez ejecutado este comando (si bien el contenido original se “limpió” un poco para el artículo ya que los datos a nivel de enlace no se muestran en ASCII y se ven los clásicos caracteres sin sentido), podemos obtener una salida como la siguiente

16:45:37.056765 IP 144.208.69.31.25 > 172.20.10.21.43712: Flags [P.], seq 1:185, ack 1, win 227, options [nop,nop,TS val 2541579420 ecr 3813295893], length 184: SMTP: 220-xxx111.server.com ESMTP Exim 4.93 #2 Wed, 03 Mar 2021 11:45:36 -0800

.}l..JG.220-xxx111.server.com ESMTP Exim 4.93 #2 Wed, 03 Mar 2021 11:45:36 -0800

220-We do not authorize the use of this system to transport unsolicited,

220 and/or bulk e-mail.

16:45:40.106169 IP 172.20.10.21.43712 > 144.208.69.31.25: Flags [P.], seq 1:22, ack 185, win 501, options [nop,nop,TS val 3813299137 ecr 2541579420], length 21: SMTP: ehlo i-guardian.biz

16:45:40.295184 IP 144.208.69.31.25 > 172.20.10.21.43712: Flags [P.], seq 185:394, ack 22, win 227, options [nop,nop,TS val 2541582658 ecr 3813299137], length 209: SMTP: 250-xxx111.server.com Hello rX-X-X-X.dialup.adsl.anteldata.net.uy [X.X.X.X]

250-SIZE 52428800

250-8BITMIME

250-PIPELINING

250-AUTH PLAIN LOGIN

250-CHUNKING

250-STARTTLS

250 HELP

16:45:44.880222 IP 172.20.10.21.43712 > 144.208.69.31.25: Flags [P.], seq 22:58, ack 394, win 501, options [nop,nop,TS val 3813303913 ecr 2541582658], length 36: SMTP: mail from:alejandro@i-guardian.biz

16:45:51.105329 IP 172.20.10.21.43712 > 144.208.69.31.25: Flags [P.], seq 58:92, ack 402, win 501, options [nop,nop,TS val 3813310138 ecr 2541587432], length 34: SMTP: rcpt to:alejandro@i-guardian.biz

16:45:51.325147 IP 144.208.69.31.25 > 172.20.10.21.43712: Flags [P.], seq 402:416, ack 92, win 227, options [nop,nop,TS val 2541593688 ecr 3813310138], length 14: SMTP: 250 Accepted

16:45:52.184942 IP 172.20.10.21.43712 > 144.208.69.31.25: Flags [P.], seq 92:98, ack 416, win 501, options [nop,nop,TS val 3813311217 ecr 2541593688], length 6: SMTP: data

16:45:52.373357 IP 144.208.69.31.25 > 172.20.10.21.43712: Flags [P.], seq 416:472, ack 98, win 227, options [nop,nop,TS val 2541594736 ecr 3813311217], length 56: SMTP: 354 Enter message, ending with "." on a line by itself

16:45:56.765078 IP 172.20.10.21.43712 > 144.208.69.31.25: Flags [P.], seq 98:126, ack 472, win 501, options [nop,nop,TS val 3813315792 ecr 2541594736], length 28: SMTP: subject: Mensaje de prueba

.}.+.J..250 OK id=1lHXRQ-002Vy9-4a

Nótese que tenemos una diferencia importante con el ejemplo anterior, ya que ahora podemos acceder a:

- Fecha y hora

- IP del equipo

- Remitente

- Destinatario

- Asunto

- Texto

Esto nos permite ir armando un mapa y registro cada vez más completo de los correos enviados por los equipos en la red.

Si prestaron atención al título del artículo, verán que se termina con “Capítulo 1”.

Para el capítulo 2, vamos a ver como automatizar acciones al momento de detectar este tipo de actividad, generando notificaciones, alertas, bloqueos automáticos a los equipos infectados, etc.

Espero que el artículo haya sido de vuestro agrado e interés.

Saludos Cordiales

Alejandro Martínez - Director GuardiaN

EnglishSpanish