detectar spam de nombres de dominio aleatorios en el encabezado, en .procmailrc

detectar spam de nombres de dominio aleatorios en el encabezado, en .procmailrc

El spam de una organización conocida que vende grandes cantidades de imitaciones de todo, desde drones hasta roombas, utiliza dominios aleatorios en los campos From:, Message-ID:y .Reply-To:todo diferente, sin siquiera un final común xyz.com.
(El correo no spam tiende a compartir nombres de dominio de al menos Message-ID:y Reply-To:.)

¿Puede una receta en ~/.procmailrc detectar dicho spam y luego reenviarlo a una carpeta de spam?

  • ¿Te apetece expresiones regulares con grupos de captura con nombre?

  • ¿Algo sobre encadenar acciones con 'A' o 'a'?

  • ¿Llamar a procmail de forma recursiva, como lo sugiere su página de manual?

  • ¿Un 'filtro' para pasar el encabezado del correo a un script escrito en un lenguaje con mejor procesamiento de cadenas?


Un ejemplo: namebrandwigs.com, mysuburbankitchen.com, aliyun.com.

From [email protected]  Wed Mar 17 09:27:54 2021
Return-Path: <[email protected]>
X-Original-To: ---
Delivered-To: ---
Received: from mysuburbankitchen.com (unknown [5.253.84.113])
        by --- (Postfix) with ESMTP id 332025E236
        for <--->; Wed, 17 Mar 2021 09:27:53 -0500 (CDT)
To: ---
Subject: drone with new features
Message-ID: <[email protected]>
Date: Wed, 17 Mar 2021 08:13:03 +0100
From: "Jake Allen" <[email protected]>
Reply-To: [email protected]
MIME-Version: 1.0
X-Mailer-Sent-By: 1
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: 8bit
Status: RO

<html>
<head>
</head>
<body>
<span style="display: block; text-align: left;"><span style="display:
block; text-align: left;">Hi,<br /><br /><span>Hope all is well.</span><br
/>We are contacting you today to let you know that we have got the
following new drone, ready to ship to worldwide customers.<span><span><br
/><br /></span></span></span></span><span style="display: block;
text-align: left;"><span style="display: block; text-align:
left;"></span></span><span style="display: block; text-align: left;"><span
style="display: block; text-align: left;"><span style="display: block;
text-align: left;"></span></span></span><span style="display: block;
text-align: left;">Explore new places and amp up your videography skills
with the our F9 4K HD camera drone.
...

Otros ejemplos, con formato similar, pero sin texto marcable en el cuerpo del mensaje:

  • un sillón de masaje de cuero de impulsewatch.com / musicalley.com
  • una roomba de mtndewkid.com/myhondafitev.com/constructiongear.com
  • un proyector de vídeo de hairrehablondon.com / hairocean.com / hotmail.com

Respuesta1

Aquí hay una receta de Procmail que implementa lo que yopensarte estarás preguntando.

Usapuntuaciónque es una característica un poco oscura pero ocasionalmente útil. Brevemente, asignamos una puntuación de 1 si hay un From:encabezado con un nombre de dominio (como siempre lo habría), luego restamos uno de la puntuación si el encabezado Reply-To:o Message-Id:tiene la misma cadena después de @.

:0:
*    1^0 ^From:.*@\/[^@<>   ]+
* $ -1^0 ^Message-Id:.*@$\MATCH\>
* $ -1^0 ^Reply-To:.*@$\MATCH\>
suspicious

Predigo que esto tendrá una tasa bastante alta de falsos positivos, pero tal vez pueda brindarle valor si recibe mucho spam con este patrón en particular, especialmente si puede combinarlo con una lista blanca.

Aún así, le recomendaría que revise la suspiciouscarpeta con regularidad y busque cualquier falso positivo en su bandeja de entrada habitual.

Aquí hay una demostración ejecutada con la muestra que proporcionó, con entrega en /dev/nullsu lugar solo para la demostración.

bash$ procmail -m VERBOSE=yes /tmp/procmailrc </tmp/sample 
procmail: [16] Fri Mar 19 09:06:29 2021
procmail: Rcfile: "/tmp/procmailrc"
procmail: Assigning "MAILDIR=/home/tripleee"
procmail: Assigning "MATCH="
procmail: Matched "namebrandwigs.com"
procmail: Score:       1       1 "^From:.*@\/[^@<>  ]+"
procmail: Score:       0       1 "^Message-Id:.*@()namebrandwigs\.com\>"
procmail: Score:       0       1 "^Reply-To:.*@()namebrandwigs\.com\>"
procmail: Assigning "LASTFOLDER=/dev/null"
procmail: Opening "/dev/null"
 Subject: drone with new features
  Folder: /dev/null                            1373

Una complicación específica es que esto no permite visitas a subdominios; No sería demasiado difícil permitir un remitente , pero el escenario opuesto es mucho más complicado, porque en el caso general no se puede saber realmente si el nombre de dominio es (como en los TLD y, por ejemplo) o (como en los TLD). , etc. TLD) o incluso más (según sea el caso de algunas prefecturas de Japón, etc.).Message-id: <[email protected]>From: real name <[email protected]>From: sender <[email protected]>labels.here.com.frmany.labels.here.co.uk.com.auk12.place.name.us

Con más detalle, 1^0asigna una 1puntuación para el primer acierto en la primera línea de receta y no asigna ninguna puntuación adicional a los aciertos adicionales. El \/token captura la cadena siguiente de la cadena coincidente, es decir, todo lo que está después del último @signo en el encabezado. Luego, la MATCHvariable se utiliza en las siguientes líneas de receta para hacer referencia a esta cadena capturada; la sintaxis $\MATCHproduce un patrón de expresión regular que coincide con la cadena literal. Las recetas subsiguientes tienen una $bandera para indicarle a Procmail que interpola cualquier variable (es decir, $MATCH) en la condición de la receta, y una -1^0instrucción de puntuación para restar uno por el primer resultado de la condición, y luego nada si coincide nuevamente.

Las páginas de manual explican todas estas construcciones, pero pueden ser bastante densas; tal vez ver también elReferencia rápida de procmailque es aún más denso, pero quizás también más rápido de leer y comprender.

Publiqué esto como una respuesta separada para no mezclar el contenido aquí con mi otra respuesta, que básicamente intenta disuadirlo de crear sus propios filtros de spam usando solo Procmail.

Respuesta2

Basándonos en unos pocos ejemplos limitados, es difícil encontrar algo específico que funcione hoy y siga funcionando mañana. Si tuactualLa pregunta es realmente "¿cómo puedo evitar el spam de Procmail?" La respuesta obvia, simple y bien documentada es "ejecute un filtro de spam de espectro completo como SpamAssassin y examine su resultado". Incluso entonces, su precisión probablemente nunca será del 100%; pero SpamAssassin hace un trabajo decente para una herramienta que básicamente configuras y olvidas. Depende en gran medida de servicios externos que proporcionan información dinámica de reputación para direcciones IP, URL y otros recursos de red utilizados por los spammers, por lo que, de hecho, hay una gran cantidad de acción detrás de escena.

UsadoViaProcmail en la wiki de SpamAssassinTiene más instrucciones. En resumen, una vez que haya instalado y configurado SpamAssassin, intente algo como

:0fw
* < 512000
| spamassassin

:0:
* ^X-Spam-Level: \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
almost-certainly-spam

:0:
* ^X-Spam-Status: Yes
probably-spam

Los segundos dos puntos :0:solo son correctos si realiza la entrega en un buzón que requiere bloqueo (como un archivo mbox, pero definitivamente no es un directorio de Maildir; pero según el ejemplo de su pregunta, parece que está en mbox). Si recibe regularmente grandes mensajes de spam, tal vez elimine la condición de tamaño * < 512000o ajuste el número. El estándar Procmail de SpamAssassin incluye un archivo de bloqueo que es innecesario en su sistema personal y quizás dudoso en hosts compartidos, y un extraño vudú de culto de carga alrededor de Fromlíneas discontinuas que creo que nunca fue correcto.

Si desea un consejo específico para las muestras que proporcionó, comprenda que incluso los hechos profundamente investigados y absolutamente veraces que podrían permitirle descartar estos mensajes específicos con plena confianza de que no habrá falsos positivos serán prácticamente inútiles para manejar cualquier otro. mensajes, y/o obsoletos mañana o la próxima semana.

información relacionada