Mostrando entradas con la etiqueta anti-spam. Mostrar todas las entradas
Mostrando entradas con la etiqueta anti-spam. Mostrar todas las entradas
Dando pelea al SPAM: Sender Policy Framework (SPF)
Cuando realicé mi anterior artículo sobre técnicas antispam no conocía una técnica muy interesante y bastante usada actualmente, la cual es Sender Policy Framework (SPF).
SPF es un sistema de validación de e-mail que permite lidiar contra los e-mails que falsifican la dirección de origen, algo muy común entre los spammers. Esto es, con esta técnica podemos verificar que un e-mail que dice venir de @gmail.com, viene realmente de un servidor de gmail y no de un falsificador.


Algo de Background (SMTP)

Para entender cómo es posible que alguien falsifique una dirección de e-mail, necesito que conozcan un poco del protocolo SMTP. SMTP (Simple Mail Transfer Protocol) es el protocolo encargado de transmitir los e-mails entre servidores. Cuando un usuario desea enviar un e-mail, éste se conecta, ya sea directamente o por interfaz web, a un servidor SMTP y provee sus datos así como el cuerpo del mail.
El protocolo SMTP es simple (le queda bien su nombre) y al estar basado en texto podemos utilizarlo con telnet o netcat conectándonos directamente.
Los datos básicos para enviar un e-mail son la dirección electrónica de origen, la de destino, y el cuerpo del e-mail. Debido a que todos estos campos pueden ser entrados a mano, uno puede enviar un mail colocando cualquier dirección de correo como el origen.
Un ejemplo de conexión SMTP es la siguiente:

root@bt:~# telnet mail.ejemplo.com 25
<<< 220 mail.ejemplo.com ESMTP Postfix
>>> HELO mail.ejemplo.com
<<< 250 mail.ejemplo.com
>>> MAIL FROM: godzilla@ejemplo.com
<<< 250 Ok
>>> RCPT TO: kingkong@ejemplo.com
<<< 250 Ok
>>> DATA
<<< 354 End data with .
>>> gorilon inutil, te aplasto como cucaracha
>>> .
<<< 250 Ok: queued as 12345
>>> QUIT
<<< 221 Bye

Las entradas marcadas con <<< son las respuestas del servidor, y las marcadas con >>> son los comandos ingresados por el cliente. Como se ve, primero saludamos educadamente al servidor con un HELO, luego decimos quién es el emisor del mail (MAIL FROM), a continuación entregamos la dirección del receptor (RCPT TO) y luego ponemos el cuerpo del mail, comenzando con el comando DATA y terminando con un "."
En un servidor sin configurar o mal configurado, o configurado especialmente para enviar SPAM, no existe ninguna restricción a la hora de escribir la dirección de orígen. Tranquilamente podría haber puesto support@microsoft.com o admin@gmail.com.


Cómo funciona?

Ahora si, con la pequeña introducción al protocolo SMTP ya tienen una idea de qué trata el spoofing de direcciones de e-mail, es hora de hablar sobre cómo funciona SPF.
SPF utiliza un principio muy simple para verificar direcciones, el cual es consultar al dominio de donde supuestamente viene el e-mail preguntando si la dirección IP desde donde nos llegó el mail pertenece a sus servidores.

Para aclarar un poco más las cosas, pensemos en los datos que tenemos al recibir un mail. Por un lado tenemos el "from", el "to" y los datos, todo falsificable como pudieron observar en el ejemplo anterior, pero a su vez contamos con la dirección IP del servidor que nos envía el e-mail.
Supongamos que recibimos un mail de admin@gmail.com, con IP de orígen 192.168.1.1 (dirección de ejemplo, nunca recibiremos un mail con esa direccion, al menos no de un servidor externo). El servidor que recibe el e-mail consulta al servidor de DNS de google y le pregunta "cuáles son las IPs de los servidores autorizados a enviar mails a nombre de google.com?", a lo cual google.com responderá con las IPs autorizadas. Si entre las IPs entregadas por google no figura 192.168.1.1 entonces sabremos que el mail ha sido falsificado.

En la imagen puede verse mejor cómo funciona SPF. En el paso 1 el emisor (bueno o malo) envía un e-mail a nuestro servidor. Cuando el servidor recibe el mail, éste consulta al servidor DNS del dominio al cual "supuestamente" pertenece el mail (paso 2). En el paso 3 el servidor DNS contesta con los IPs autorizados a enviar mails a nombre de su dominio. Cuando el servidor de mail recibe la respuesta del DNS, éste decide si el mail es válido o no. Si no es válido puede optar por rechazarlo o simplemente informarselo al usuario que recibe el mail.


Cómo usamos SPF?

Para poder utilizar SPF necesitamos un servidor de mails que soporte esta tecnología. Actualmente todos los servidores más conocidos traen soporte, ya sea de forma nativa o implementada como plug-in. En la página de openspf pueden encontrar una lista de los servidores que soportan SPF.
Como siempre, a Microsoft le gusta ser distinto y pasarse los estándares por las bol*s, así que decidió crear una versión propia de SPF la cual llamó Sender ID, pero el principio es exactamente el mismo.

Además del servidor con soporte SPF, si queremos que otros no puedan falsificar e-mails con nuestro nombre de dominio, necesitamos configurar una entrada en el/los servidor/es DNS autoritarios para nuestro dominio con un formato predefinido. Para no andar con problemas, se decidió utilizar el registro de tipo texto (TXT) del sistema DNS e incluir ahí los datos necesarios para el funcionamiento SPF.
Este registro contiene la versión de SPF y las IPs que tienen permitido enviar e-mails a nombre del dominio. El protocolo permite cierta flexibilidad y podemos especificar que todos los registros MX del dominio tienen permitido enviar mails, o incluir otros dominios en la lista de posibles emisores.
Para ver un ejemplo, podemos usar a google. Si hacemos un "nslookup -q=TXT google.com" veremos que nos responde con la siguiente entrada:
google.com text = "v=spf1 include:_netblocks.google.com ip4:216.73.93.70/31 ip4:216.73.93.72/31 ~all"
Este registro es bastante completo y contiene los siguientes datos:
- v=spf1 indica que utiliza la version 1 de SPF.
- include:_netblocks.google.com indica que los servidores del dominio _netblocks.google.com tienen permitido enviar e-mails a nombre de google.com
- ip4:216.73.93.70/31 ip4:216.73.93.72/31 indica que los rangos de IPv4 216.73.93.70/31 y 216.73.93.72/31 son emisores válidos para google.
- ~all nos dice que ningún servidor que no esté listado en los datos anteriores es un emisor válido.

Hay varios registros más que podemos utilizar para describir servidores válidos para el dominio, los cuales pueden ver en la página del proyecto SPF.

Si tienen problemas creando las entradas SPF en el servidor DNS no desesperen! existen wizards en páginas web diseñados para solucionarnos la vida. Por un lado contamos con el wizard de openspf y por si no les alcanza, también pueden utilizar el de Microsoft
Seguramente existen varios más, pero estos son los que primero encontre =P


Reflexión final

SPF puede ayudarnos muchísimo a limitar el SPAM que entra a nuestros servidores utilizando un mecanismo simple y ya implementado en los servidores de mails más importantes.
El mecanismo utilizado es muy similar a otros, como el de resolución inversa de IP, donde al recibir un mail de una dada IP el servidor realiza una consulta inversa (registro PTR en DNS) y resuelve si la IP pertenece al dominio de donde dice venir. Lo bueno de SPF es que es mucho más flexible, permitiendo definir distintos registros y dominios válidos.

La peor desventaja que le veo a SPF es el overhead de red. Utilizando este mecanismo tendremos que hacer una consulta DNS por cada e-mail que recibimos, lo cual, si recibimos cientos o miles de mails por día, puede resultar en alto consumo de ancho de banda y delays en la entrega de los mails.

Algo a tener en cuenta es que este sistema no elimina la posibilidad de enviar mails falsificados dentro de un mismo dominio. Si por ejemplo pepe envía un e-mail a nombre de jose@empresa.com utilizando el servidor de empresa.com, el e-mail será perfectamente válido desde el punto de vista de SPF.


Algunas Referencias
Sender Policy Framework Introduction
Sender Policy Framework (wiki)
news: SORBS se cierra
SORBS, uno de los DNSBL más importantes en internet, anunció que deberá dejar de prestar el servicio debido a que University of Queensland decidió terminar el contrato de hosting sin cumplir con lo acordado.
Dado que ahora SORBS no tiene hosting que lo hospede, no puede continuar a menos que consiga otro lugar desde donde funcionar, por lo que Michelle Sullivan ahora pone a la venta el servicio para que otro pueda seguir brindándolo.
SORBS actualmente recibe 30 billones de consultas DNS por día, por lo que el que lo compre deberá contar con una buena infraestructura. Esto muestra lo utilizado que es el servicio.

Para el que no tenga idea de qué es un DNSBL puede leer mi anterior post: SPAM
sex + viagra + porn + drugs = SPAM!
Es tan común recibir SPAM que ciertos términos parecen sinónimo de ello. Quién no ha tenido al menos una dirección de e-mail donde el maldito SPAM les llena la casilla y cuesta separar los mails que nos interesan de los que nos molestan.
Porque al igual que todos estoy re podrido del SPAM (de todo tipo), en éste artículo describiré cómo combatirlo en los e-mails. Antes de empezar, dejo una pequeña definición.


Qué es SPAM?
Y si, alguno podría preguntarse a qué se denomina SPAM. email-SPAM (de ahora en más sólo SPAM) se denomina a todo e-mail no solicitado y que es enviado en masa (muchos receptores). Estos e-mails pueden tener distintas finalidades, como ser, propaganda, phishing, sólo molestar, saturar servidores de e-mail (el clásico Hotmail se Cierra!), esparcir ideologías políticas, religiosas, etc.
Otra forma bien conocida de SPAM es la vista en foros, blogs, fotologs, etc, donde dejan comentarios con sus propagandas.
Por supuesto existen formas de SPAM fuera de internet, como los ya clásicos y ULTRA-molestos mensajes de las compañías de celular con ofertas que nunca nos convienen o premios que nunca ganaremos.
También se puede considerar SPAM a los llamados telefónicos con ofertas de servicios, el reparto de revistas con propagandas, o cartas con propagandas.
Como ven, en la vida estamos saturados de SPAM, algunos quizás hasta sueñan con SPAM.


Cómo saben mi dirección?
Otra pregunta válida es, de dónde sacaron mi dirección de correo???... si se preguntan eso, piensen de nuevo...
Hay muchas formas en las que un spammer puede obtener una dirección. Entre las más comunes tenemos:
- sitios web: si se registraron en una página no muy santa y dejaron el mail, están jodidos. Si tienen un blog, fotolog, red social, página propia, etc, que puede ser accedida por cualquiera y dejaron el mail, están jodidos.
- foros: dejar el e-mail visible por visitantes de un foro es un error fatal.
- salas de chat, grupos de noticias, etc: sucede lo mismo ya mencionado.
- malware: si se infectaron con un virus, éste puede recolectar direcciones de mail que utilicen y las de toooodos los contactos que tengan. Es decir, aunque seamos extra precavidos, el spam nos puede llegar por culpa de un amigo que se infectó.
- servidores de mail mal configurados: si el servidor que utilizan está mal configurado, éste puede enviar SPAM a todas las direcciones que maneja.
- diccionarios: el spammer utiliza diccionarios para crear direcciones de e-mail potencialmente válidas y envía SPAM a ellas. Si tu nombre de usuario forma parte de un diccionario, caes dentro de esta categoría.
- otras: seguro hay otras formas que estoy olvidando citar.


Cómo me defiendo? (usuario final)
Como usuario final lo que podemos hacer es:
- elegir un servidor de e-mail de confianza que cuente con buenos mecanismos antis-spamming, anti-virus, y soporte continuo para solucionar problemas de configuración y vulnerabilidades.
- no dejar nuestra dirección de e-mail en sitios públicos (los mencionados sitios-web, blogs, foros, etc), esto incluye lugares que no estén en la red, como por ejemplo dejar el e-mail a un promotor de la calle.
- utilizar e-mails SPAM-only para el caso en que registrarnos en alguna página requiera dejar un e-mail a donde luego nos envían una confirmación que debemos contestar. Con SPAM-only me refiero a una cuenta de e-mail que no utilicemos nunca, sino que la tengamos sólo para utilizarla en estos casos.
- no contestar a e-mails que son SPAM, lo único que logran con esto es que el spammer sepa que TU dirección de e-mail es válida, colocándola entre los grandes candidatos a enviar más SPAM.
- ayudar a los administradores de los servidores reportando e-mails que son spam.
- instalar una aplicación anti-spam que cuente con técnicas de filtrado por checksum, soporte RDL, filtrado por reglas, filtros Bayesian, las cuales describiré a continuación.


Cómo me defiendo? (administrador del servidor de e-mail)
El administrador del servidor puede hacer varias cosas para limitar la propagación de SPAM. Tal vez la más conocida es utilizar un antispammer (programa dedicado que cuenta con varias técnicas anti-spamming). El problema está en la complejidad del antispammer y el trade-off "eliminar todo el spam" Vs "saturación de recursos" Vs "falsos positivos" (mails válidos rechazados como SPAM por falla en la lógica).
Entre los métodos para lidiar con el SPAM (algunas comúnmente encontrados en los anti-spams), contamos con los siguientes:


Filtrado por Checksum
Se mantiene una base de datos con checksums de spams conocidos y se revisan los mails entrantes buscando coincidencias, si el checksum se encuentra en el mensaje, éste se clasifica como spam. El checksum se calcula utilizando partes del e-mail que no varían. El método es bastante efectivo dado que muchos de los mensajes no varían o varían muy poco. Esta función es igual a la realizada por los antivirus.
Si bien el sistema es bastante efectivo, es bastante eludible dado que los spammers pueden insertar caracteres invisibles (osea, no mostrables) en el medio de los mensajes y así evadir el anti-spam.


DNS Black/Blackholes Lists (DNSBL), también conocidas como Real-Time Black Lists (RBL)
Se utilizan black lists con IPs o DNSs de spammers conocidos de forma que si un e-mail recibido proviene de una dirección conocida como spammer, entonces el e-mail trata como spam.
El sistema funciona de la siguiente manera. Se monta un servidor de DNS que sirve como servidor de black list. Dicho servidor debe tener asignada una dirección de DNS que puede ser interna o pública, dependiendo desde donde se acceda (por ej: dnsbl.mired.com). Cuando un servidor de mail recibe un e-mail, este extrae la dirección del emisor (por ej: 192.168.12.133), la revierte (133.12.168.192), le agrega la dirección DNS del servidor DNSBL (133.12.168.192.dnsbl.mired.com) y hace una resolución de DNS utilizando la dirección obtenida. Si la dirección existe (el servidor contesta con alguna dirección IP del rango 127.0.0.0/8), quiere decir que el emisor es un spammer (está listado en la black list). Opcionalmente el servidor de mail puede consultar la razón por la que dicho emisor está en la black list (consultando el registro TXT).
Existen servidores que permiten consultar sus black-lists en busca de spammers. En general estos servicios permiten hasta un cierto número de consultas gratis y si necesitamos de un volumen mayor, tenemos que pagar por el servicio. Algunos de los servicios más conocidos, que además cuentan con consultas on-line, son:
Spamhaus
SORBS
Spamcop
Spamrats

Es interesante el caso de mxtoolbox que realiza la búsqueda sobre 147 DNSBL y nos devuelve el resultado obtenido en cada uno.

Por otra parte, si queremos montar nuestro propio servidor RBL en Linux, podemos seguir los pasos citados en http://www.blue-quartz.com/rbl/

En la página nemx.com citan las características de los RBL y explican brevemente cada una. El informe es algo viejo (algunos de los links en el ya no sirven), pero la descripción general se sigue aplicando.
En http://www.rfc-ignorant.org/how_to_domain.php describen cómo agregar servidores DNSBL en los servidores de mail más conocidos (postfix, exim, sendmail, qmail, etc)

Las black lists se generan utilizando spamtraps, direcciones de e-mail ocultas que sólo los spammers pueden encontrar (como por ejemplo, ocultas en el código HTML, no visibles para el usuario). Todo e-mail que llegue a este mail, es SPAM. Los Spamtraps pueden considerarse honeytokens debido a su naturaleza. También se utiliza el feedback de usuarios que reportan spam. La direcciones que son reportadas por varios usuarios como SPAM son grandes candidatas a ser agregadas en la black list.

Para limitar el número de falsos positivos, las black lists suelen utilizarse con white lists, o listas de direcciones conocidas como buenas. Si un e-mail proviene de una dirección listada en una white list, entonces se deja pasar.

En wiki pueden encontrar una definición más completa sobre los DNSBL


Verificación DNS inversa (registro PTR)
Tal vez uno de los métodos más efectivos, y de los más usados, es hacer una resolución inversa de DNS. Una resolución inversa de DNS es tomar una IP y consultar al servidor DNS por el DNS asociado. De esta forma si la dirección mail.mired.com resuelve a 192.168.1.1, entonces al intentar una resolución inversa de 192.168.1.1 debería resolver a mail.mired.com.
Dado que la mayoría de los spammers no suelen tener registrada la resolución inversa de la IP que utilizan para enviar SPAM, si por cada e-mail recibido requerimos que la dirección IP mapee a la dirección DNS de donde dice venir, evitaremos un altísimo número de e-mails SPAM.


Filtrado basado en reglas
Se utilizan reglas basadas en listas de palabras o expresiones regulares que no están permitidas en los mensajes, para tratar como SPAM los e-mails que las cumplan. De esta forma se puede rechazar e-mails que contengan las palabras viagra, sexo, porno, etc.
El problema con estas reglas son los falsos positivos, el tiempo que lleva el análisis y que los spammers cambian continuamente las frases y la forma de deletrear las palabras, además de incluir caracteres no visibles para el usuario, pero sí para el filtro. Variaciones como sex0, s3xo, 5exo, sexo (visible como sexo si el mail está formateado en HTML) pueden ser difíciles de detectar. La cantidad de combinaciones posibles es gigantesca e incluirlas todas en la revisión consume demasiados recursos.
Por otra parte, muchos mensajes vienen en formato de imagen jpg, png, etc, de forma que estos filtros no los detectarían.

Otra forma de filtro es el filtrado de headers. La mayoría de los spammers cambian los headers de los mensajes para que parezcan provenir de otros autores, para que parezcan más reales. Estas modificaciones son fácilmente detectables y los mails pueden marcarse como spam.


Filtros Bayesian (también conocidos como filtros de estadística de contenido)
Los filtros Bayesian se basan en estadísticas y aprenden a detectar spam a partir del entrenamiento del usuario. Para cada e-mail recibido, el usuario debe indicarle al sistema si es spam o no. A partir de las palabras incluidas en los mensajes, el filtro crea bases de datos conteniendo palabras que suelen estar en e-mails válidos y palabras que suelen estar en e-mails que son spam.
Cuando el filtro tiene una buena base de datos formada puede distinguir correctamente cuáles palabras pertenecen a cada categoría y decidir si clasificar un e-mail como spam o no. La desición la realiza mediante el análisis de probabilidad computado para todas las palabras incluídas en cada e-mail. Si el total supera un umbral, el e-mail se califica como spam.

Todo esto tiene un fundamento matemático y pueden leer más sobre ello en http://en.wikipedia.org/wiki/Bayesian_spam_filtering
También pueden encontrar una brebe introducción a los filtros Bayesian en http://www.spam-site.com/bayesian-spam-filter.shtml


Verificación SMTP por llamado inverso
Como la mayoría de los spammers utilizan una dirección "From" inválida, una forma de detectar spam es haciendo que nuestro servidor intente conectarse al servidor de mail desde donde supuestamente viene el e-mail. Si la dirección es inválida, se detectará en el intento de conexión y el mensaje puede marcarse como spam.


Forzar el cumplimiento de estándares RFC
Dado que la mayoría de los spammers utilizan soft mal configurado, o sobre el cual no tienen control para enviar los e-mails, muchos de los emisores no cumplen con estándares RFC. Una forma de evitar spam es bloqueando todo e-mail que no es enviado siguiendo dichos estándares. Algunas de las restricciones impuestas son greeting delay, greylists, HELO/EHLO checking, Invalid pipelining, Nolisting, Quit detection.


SPAM en números
En http://barracudacentral.org/ ofrecen gráficas sobre spamming, como el origen, el tipo de contenido y la cantidad de spam recibida en los últimos días. También mantienen una lista negra que se puede consultar para saber si un IP está listado y podemos reportar contenidos de spam. Además ofrece datos de otros malwares.
Como se puede observar, cada dos días se bloquean casi 2 mil millones de e-mails con spam!. Sólo el 6% de los e-mails son aceptados como buenos. El mayor productor de SPAM es USA, seguido por nuestros vecinos brasileros y en 3er lugar los rusos.
A continuación les dejo los gráficos con la distribución del spam en categorías, y también una tabla con los e-mails procesados en los últimos dos días:




Referencias
Pueden encontrar las técnicas anti-spamming con un poco más de detalle en http://en.wikipedia.org/wiki/Anti-spam_techniques_(e-mail) y en http://stason.org/articles/technology/email/junk-mail/index.html en donde incluyen algunas más. En http://www.spam-site.com/anti-spam-techniques.shtml y http://wiki.asrg.sp.am/wiki/Taxonomy_of_anti-spam_techniques también ofrecen una breve introducción a las técnicas más conocidas.
Por supuesto, también es interesante el artículo de wiki sobre SPAM: http://en.wikipedia.org/wiki/E-mail_spam
Por último, dejo la dirección de donde obtuve la imagen para éste artículo: http://www.knowtebook.com/anti-spam-guide-fuer-webmaster-549.htm