Come si fa a riconoscere un messaggio di spam? Di primo acchito, si tratta di una sfida talmente ricca di sfumature e così intimamente basata sulla comprensione del contesto da poter essere vinta soltanto da un essere umano, mettendo invece in profonda crisi anche il computer più potente.
Infatti notoriamente i filtri antispam automatici funzionano malissimo: o lasciano passare comunque troppo spam, oppure peggio ancora cestinano anche alcuni messaggi utili, e pertanto molti utenti non osano adottarli. Dopotutto, ragionano, come può una macchina cogliere i sottili indizi che separano un messaggio pubblicitario indesiderato da un’informazione che ci interessa leggere? Per queste cose ci vuole intelligenza, cosa di cui il computer è notoriamente a corto.
La sorpresa che è emersa dal lavoro dell’informatico Paul Graham è che questi indizi non sono affatto sottili come si crede e sono anzi facilmente rilevabili da parte di un procedimento automatico. La chiave di questa apparente “intelligenza” del computer sta nell’uso dei cosiddetti filtri bayesiani, inventati circa trecento anni fa dal matematico Thomas Bayes.
Questione di sfumature
La differenza fra i filtri antispam tradizionali e i filtri bayesiani è la presenza di “sfumature” nei criteri di valutazione. Un filtro tradizionale contiene regole del tipo “se il messaggio contiene la parola ‘porno’ o ‘viagra’ o altre parole elencate in una lista, è spam” oppure “se il messaggio proviene da un indirizzo che non conosco o che so appartenere a uno spammer, è spam“. Basta che un messaggio soddisfi una di queste regole e verrà considerato spam.
Un ragionamento molto “in bianco e nero”, insomma, la cui nefasta conseguenza è che se per esempio un vostro amico vi manda un e-mail supplicando aiuto per debellare il dialer di un sito porno che gli ha infettato il computer, il suo messaggio verrà cestinato come spam. Il metodo delle parole chiave è oltretutto facilmente aggirabile dagli spammer: basta storpiare la grafia delle parole (“p0rn0” e “v-i-a-g-r-a” sono esempi classici) oppure usare ogni volta indirizzi diversi per il mittente. Il rischio di cestinare messaggi utili senza cancellare quelli indesiderati è quindi altissimo.
Un filtro bayesiano, invece, opera sulle probabilità. Quando lo attivate, il filtro vi chiede di sottoporgli un certo numero di spam che avete ricevuto e analizza automaticamente la frequenza d’uso delle varie parole contenute, includendo anche i codici HTML e i dettagli delle intestazioni (header). Più è frequente una parola nel campione di spam analizzato, più è probabile (ma non certo) che ogni messaggio che la contiene sia spam.
Dopo questa fase di apprendimento, il filtro classifica i messaggi in base alla probabilità complessiva delle varie parole che contengono. Per esempio, se un e-mail contiene una parola ad alto rischio spam ma per il resto è costituito da parole poco usate dagli spammer, non viene classificato come spam. Pertanto la richiesta di aiuto anti-dialer del vostro amico supererebbe indenne un filtro bayesiano: contiene sì una parola ad alto rischio (porno) ma ne contiene tante altre a rischio bassissimo che controbilanciano quella altamente sospetta. Una di queste “parole” è l’indirizzo del mittente, che essendo un vostro conoscente si presume non vi mandi messaggi pubblicitari indesiderati, per cui il suo indirizzo non compare mai nel campione di spam. Il rischio dei “falsi positivi”, ossia di classificare come spam messaggi che non lo sono, è quindi minimo.
Apprendimento automatico
Un concetto relativamente semplice, dunque, eppure sufficiente a stroncare lo spam più sofisticato. Infatti uno spammer non può fare a meno di usare determinate parole, ed è questo il suo punto debole. Se non usa il nome del prodotto e parole come “visita”, “compra”, “clicca”, “rivoluzionario”, “rimborsati”, “promozionale”, “offerta”, “investimento”, “acquistare” e così via, non riesce materialmente a promuovere l’oggetto venduto.
L’altro pregio del filtro bayesiano è la sua abilità di apprendere automaticamente. Invece di dover generare manualmente interminabili elenchi di parole “proibite” (con tutte le relative varianti ortografiche, usate dagli spammer, come “p0rn0” o “v-i-a-g-r-a”) come avviene nei filtri tradizionali, è sufficiente indicare a un filtro bayesiano un messaggio e dirgli “questo è spam” oppure “questo non è spam”. Le parole più ricorrenti verranno automaticamente considerate indicatori di spam e quelle meno frequenti verranno considerate indizi scagionanti. E più spam gli date in pasto, più il filtro diventa preciso.
A un certo punto questa precisione può superare quella umana. Una persona che filtra a mano lo spam ha comunque una certa probabilità di sbagliare: per distrazione, per errore, per noia. Un esperimento di Bill Yerazunis, autore di un filtro antispam di nome CRM114, indica una precisione del 99,84% per un essere umano contro il 99,87% del filtro.
Cosa ancora più importante, il filtro bayesiano è personalizzato. Si basa sul tipo di spam che ricevete voi, non sullo spam generico che circola in Rete. Questo gli permette, per esempio, di evitare gli errori di valutazione che possono capitare in determinate circostanze usando filtri generici: un ginecologo riceverà molti e-mail contenenti la parola “sesso” o altri termini anatomici o attinenti alla sessualità e quindi nel suo filtro bayesiano queste parole avranno una bassa probabilità di indicare spam. Un farmacista non si troverà cestinate automaticamente le risposte ai suoi ordini di sildenafil citrato (Viagra), e così via.
Parole a sorpresa
L’analisi statistica adottata dai filtri bayesiani porta a scoperte inattese. Per esempio, avreste mai detto che la parola “republic” è un fortissimo indice di spam? Lo è grazie al fatto che figura spessissimo nei famosi appelli-truffa da parte di sedicenti funzionari governativi che chiedono il vostro aiuto per sbloccare ingenti somme di denaro. Lo stesso vale per “color”, perché si usa nell’HTML dei messaggi come codice per cambiare il colore del font, e gli spammer adorano i colori sgargianti.
Più in generale, come nota Graham, la sorpresa di quest’analisi dello spam è che gli spammer utilizzano in realtà un sottoinsieme piccolissimo dei vocaboli di una lingua. Sono terribilmente ripetitivi (c’è un limite al numero di modi per dire “compra il mio prodotto”), ed è questo loro tallone d’Achille che consente a un sistema automatico di ottenere questi risultati eccezionali.
Se siete incuriositi da questa nuova frontiera dell’eterna lotta contro lo spam, potete adottare uno dei tanti programmi che includono i filtri bayesiani, come ad esempio Mozilla, oppure i filtri da aggiungere ai programmi di posta che già usate, come SpamBully per Outlook e SpamSieve per Mac.
Spammer sotto tiro
Basteranno i filtri bayesiani a stroncare lo spam? È assai probabile. Come accennato recentemente, gli spammer sono già sotto tiro su più fronti: in vari stati del mondo sono entrate in vigore leggi che vietano la pubblicità indesiderata e ingannevole, e le cause degli Internet provider contro gli spammer per abuso del servizio si moltiplicano. Un filtro antispam facile e preferibilmente integrato nel programma di posta, magari con un bel pulsante “Cestina come spam”, ridurrebbe drasticamente l’efficacia già minima delle loro campagne pubblicitarie, portandola al di sotto della soglia della convenienza economica.
Finora gli spammer hanno sempre risposto agli attacchi dei filtri antispam usando tecniche più sofisticate per aggirarli. Ma nel caso dei filtri bayesiani non hanno molta speranza, anche perché questa tecnologia ha enormi margini di ulteriore miglioramento. Si pensa già per esempio di analizzare la frequenza delle coppie di parole anziché i singoli vocaboli. Il bello è che non lo si è ancora fatto semplicemente perché, come dice Graham, la versione attuale a parola singola funziona già così bene. Cari spammer, la festa è finita.