giovedì, aprile 05, 2007

Bayes questo sconosciuto?

Uno dei problemi più stressanti per chi gestisce un qualsiasi sistema informatico di questi tempi è lo spam.

In questo post chiarisco (o confondo) le idee sullo spam.

Attenzione: questo post è molto lungo e/o contiene imperdonabili inesattezze, andateci piano nei commenti!


1 . Le origini dello spam: perchè c'è lo spam?

Grande diffusione dell'e-mail: dato che la posta elettronica è diventata una killer app, tutti la usano

Comoda: tutti ne sentono immediatamente la mancanza o un malfunzionamento

Pressochè gratuita: l'invio in quantità industriali di posta elettronica ha un costo irrisorio

Difficile rintracciare lo spam: Internet travalica i confini nazionali e la burocrazia di ogni stato riesce appena appena a sopravvivere a se stessa, figurarsi per rincorrere uno spammer taiwanese...

2. Perchè le liste non funzionano più (bene come prima)?

dnsrbl e xbl e altre liste racchiudevano al loro interno gli indirizzi
di server di posta e host internet che inviano spam in quantità. Se qualcuno vuole inviare spam attraverso quel server di posta verso il vostro server che usa le liste antispam, il vostro server rifiuterà perche riconosce l'indirizzo come non affidabile.

Bene, e allora perchè non funzionano bene?


Due motivi:

1)Ultimamente sono state nel mirino di attacchi DDoS (Distributed Denial of Service) quindi non raggiungibili. Se un server implementava solo quel controllo perchè si era fidato di loro ("sai, è molto tempo che funzionano bene, perchè domani non dovrebbero funzionare?") ogni tanto si ritrova con 150.000 , 200.000 e-mail di spam che spingono.

2)Sempre più spesso gli spammer utilizzano macchine windows infettate e controllate da remoto per l'invio di posta elettronica in gran quantità. In questo modo nelle liste antispam si dovrebbero mettere tutti i computer infetti da trojan che vengono usati da remoto per l'invio di spam. Impossibile, sono troppi!

3. E il greylisting?

Ad alcuni non piace aspettare 3-4 ore per un preventivo da un'azienda che non hanno mai contattato, visto che magari il loro MTA riprova dopo 2 ore. E poi il greylisting sembra che abbia problemi con alcuni server "strani". E non rispetta alcuni RFC. Può bastare?

4 E allora?

E allora vai di bayesio!

per un disegno della formula guardate qui

Teorema di Bayes


quello che bayes dice è in sostanza che la probabilità che l'evento A1 succeda sapendo che è successo B è uguale al resto della formula.

Quindi, facendo un esempio,

A1 = nuvoloso

B = piove

P(A1|B) = probabilità che sia nuvoloso sapendo che piove

P(B|A1) = probabilità che piova sapendo che è nuvoloso

La probabilità che sia nuvoloso, sapendo che piove, è uguale alla probabilità che piova sapendo che è nuvoloso per la probabilità che sia nuvoloso, diviso la probabilità che piova.



La formula, come vedete sul sito di wikipedia, prevede che sia possibile una divisione degli spazi, ovvero che esistano tanti A1, A2, A3, eccetera.

Questo prevede che, proseguendo col nostro esempio:

A1= nuvoloso

A2=ieri è piovuto

A3=meno di 15 gradi centigradi

Cosi facendo la formula diventa:

al numeratore uguale

al denominatore la sommatoria di tutti i prodotti costruiti così:

probabilità che piova sapendo che Ax per probabilità che Ax

dove Ax è la prima volta uguale a A1, poi A2 poi A3, poi si sommano tutti i termini (una sommatoria, no?)

I filtri bayesiani si comportano alla stessa maniera.

Prendono come A1, A2, A3, eccetera il fatto che voi nei precedenti messaggi abbiate assegnato a certi messaggi o certe parole il valore "E' SPAM!".

Quindi queste parole vengono collegate ad un valore (che è la probabilità che quella parola sia Spam)

Ogni parola ha un valore, alto o basso.

la formula usata nei filtry bayesiani implementati nei comuni software antispam è questa:

a * b * c
------------------------------- = P(SPAM)
a*b*c + (1-a)*(1-b)*(1-c)


Se siete bravi in matematica, manca qualcosa?

Dai, su che manca!

Le parole non presenti nel nostro database che valore di probabilità hanno?

Solitamente si suole impostarlo attorno allo 0.4, per evitare pericolosi sbilanciamenti.

In conclusione un filtro bayesiano legge le parole di un'e-mail, assegna ad ognuna un valore e poi prende la formula di bayes e chiede: che probabilità c'è che sia spam?

In questo caso le probabilità sono

a b c eccetera le parole della mail, ognuna con la sua probabilità.

P(SPAM) la probabilità che l'e-mail sia Spam

Esempio?

Ok, 2 messaggi e-mail:

Get here your porn for free

Why don't you stay with us for tonight? Some pizza and a dvd?



Database

porn 1
free 1
get 0.8
dvd 0.7
click 0.6
stay 0.4
pizza 0.4


le altre parole le lasciamo stare per questo esempio:

prima mail
1 * 1 *0.8
----------------------------- = 0.8 / 0.8 = 1
1*1 * 0.8 + (1-0)(1-0)(1-0.8)

seconda mail

0.7 * 0.4 * 0.4
------------------------------------= 0.112/0.220 = 0.50
0.7*0.4*0.4 + (1-0.7)(1-0.4)(1-0.4)


Come si può vedere, il rating della seconda mail è molto più basso, la metà.

Col proseguire dell'addestramento, il nostro database diventa sempre più preciso.



5. E gli spammer stanno a guardare....

Se, magari! (Marchio registrato!)

Ultimamente usano:

bayes poisoning:
nella speranza di "avvelenare" il vostro database di parole, mandano e-mail con parole normali mescolate allo spam. In questo modo, se voi dite al vostro filtro che quell'e-mail è spam, abbassate il rating di parole "buone" che lo spammer ha inserito nella mail fasulla, come ad esempio questa:

"To have been claimed by what we see of what
In realms of dingy gloom and deep crevasse
Standing in the way of the truth. A white
To pick up even the quickening of wind
demonstrating their talent for comedy stroke
Homeward into the howling woods, although
Your gloved hands covering your lips' good-bye
Through the back of the picture at the patch of white
With its lament, it often sounds, instead,
Only a whiter absence to my mind,
And half-starved foxes shake and paw
whose soft bristles graze the top-racks.
Père and Mère Chose could be in conversation
Oh, I know. The snow. The effective snow
Toward something that the world is pointing toward
Place of absorbing snow, itself to be
Writhing their stunted limbs,
References
XXI. Flying in the Arctic"

In questo modo hanno alzato il rating della parola "Arctic" perchè io l'ho inclusa nelle parole che accompagnano le e-mail di spam.

Soluzioni: se il filtro è molto allenato (circa 100 giorni di uso normale) questo disturbo è molto basso, infatti dovrebbero includere la parola "Arctic" in altre 100 e-mail.
Se il mio filtro è "giovane" io vedrei molti falsi positivi e sarei costretto ad alzare il punteggio sopra il quale è spam, lasciando passare molti più messaggi di spam.
Quindi allenate i vostri filtri fin da subito il più possibile!




spam via jpeg: se il vostro filtro bayesiano fa faville con le parole, mezzo principale di comunicazione delle idee, purtroppo ha qualche problemino con le immagini.

Sempre più spesso gli spammer si vedono bloccati dai filtri bayesiani e si sono inventati un metodo molto ingenioso: scrivono il loro messaggio di spam dentro un'immagine e poi l'allegano.

O mio Dio ! Ci hanno fregato! Maledetti!

Ma no ma no!

Due contromisure sono state approntate:

1.plugin con capacità OCR ( Optical Character Recognition) che cercano di "leggere" un'immagine e trovare le parole scritte al loro interno, una volta lette le mandano al filtro bayesiano. E lì stiamo abbastanza tranquilli. FuzzyOcr è uno di questi, e si basa su gocr. Purtroppo immagini come i captcha li possono traviare, facendogli leggere molto rumore. In questo modo i filtri non riescono a leggere chiaramente le scritte e vengono bypassati.

2. Questo plugin per SpamAssassin che cerca di leggere le proprietà dell'immagine contenuta nell'e-mail e secondo alcune regolette (altezza, larghezza,

Nel complesso, lo spam basato su immagini è in crescita ma il fenomeno si riesce a limitare impostando regole pesantucce sulle immagini.


però immagini come questa danno da pensare:
http://users.own-hero.net/~decoder/forgiving26.gif

Quando poi un mail server ne riceve 20.000- 30.000 in un ora, beh, cè poco da ridere.

L'uso di risorse è quantomeno smodato.

Ma per fortuna è anche più chiaro che un'immagine come questa non è molto sexy come pubblicità.

Inoltre, non è neppure cliccabile, per via dei filtri che i mailserver implementano sui link ai siti che vendono prodotti spazzatura.

Quidi bisogna mettersi di buzzo buono e scrivere www.rxg0od.com (l'ho scritto sbagliato apposta).

Spero di avere chiarito qualcosa e di non aver creato troppa confusione!

Una sola conclusione: lo spam è una lotta contro persone, gli spammer, che adattano le loro tecniche esattamente come i virus writers le adattano da decenni per battere i produttori di software antivirus. Quindi la fine dello spam, così come quella dei virus, non è certo dietro l'angolo.

buona notte a tutti.


P.S. per chi cerca qualcos'altro:

http://www.dkim.org/

Nessun commento: