2008.03.23.
Félreértések a statisztikai szűrők kapcsán
Nemes Dániel egy érdekes elÅ‘adást tartott a tavalyi Hacktivity-n “A SPAM-ektÅ‘l az összetett fenyegetésekig – technológia támadástól védekezésig” cÃmmel. (Az elÅ‘adás videoja a Hacktivity 2007 oldaláról letölthetÅ‘)
A védekezés lehetőségeinél szóba került a bayes-i (=statisztikai) elv, amelynek kapcsán pár dolgot helyre szeretnék tenni. Ki tudja? Talán az idei Hacktivity 2008-on lehetőségem lesz rá.
Az előadó az alábbi problémákat látja a Bayes elv használatában (nem szó szerint idézve):
1. Meg kell húzni egy határértéket [hogy mettől tekintjük spamnek a levelet], de hol húzzuk meg? Nehéz pontosan meghatározni. Ha túl magasan húzom meg, akkor kevés spamet ismer fel, ha pedig túl alacsonyan húzom meg a határt, akkor a jó levelekre is harap a szűrő.
A legtöbb statisztikai algoritmust használó spamszűrőben egy jól eltalált alapértelmezett érték van,
a clapf-nál ez 92% (0.92). Ha a felhasználó módosÃtani akarja, szÃve joga, azonban a legtöbb esetben a 92% megfelelÅ‘. Hihetetlenül hangzik, de a határ meghúzása valójában kevéssé lényeges. Ennek az az oka, hogy (megfelelÅ‘ tanÃtás után) a jó levelek spam valószÃnűsége 0.00xx (0-1%) körül, mÃg a spam levelek valószÃnűsége a 0.99xx (99-100%) körül szóródik. A bogofilter-ben található finomhangoló program pl. akár 55%-nál is képes meghúzni a spam határt (más paraméterek egyidejű módosÃtása mellett).
Hogy mégis van némi szerepe a a spam határ megválasztásának, az azért van, mert (különösen a magyar levelezők életében) vannak olyan jó levelek, amelyek úgy néznek ki, mint egy spam, és olyan spamek is vannak, amelyek úgy néznek ki, mint a jó levelek. Ha mindezt grafikonon ábrázoljuk, akkor egy kettős haranggörbét kapunk. Jól látható, hogy van egy bizonytalan zóna (unsure felirattal), amelybe mind jó levelek, mind pedig spamek is esnek. Ez abban az esetben fordulhat elő, ha a levél teljesen ismeretlen, vagy ha közel hasonló számú jó ill. spam levélre jellemző tokent tartalmaz.

A Death2Spam projekt kategorizálta ~117k levél spam valószÃnűségének eloszlása.
Forrás: http://www.death2spam.com/d2s2/images/UserProbsDistrib.gif
Egy másik grafikon az inverz khi-négyzet nevű statisztikai összegzÅ‘ algoritmus okozta tipikus eloszlást mutatja. A vÃzszintes tengelyen a levelek spam valószÃnűsége látható, mÃg a függÅ‘leges tengelyen a levelek száma (logaritmikus skálán). Noha az elÅ‘bb emlÃtett bizonytalan zóna itt is megfigyelhetÅ‘, azonban ez – ha lehet fokozni – még drámaibb módon választja szét a jó és a spam leveleket. A jó levelek zömének a spam valószÃnűsége 3% alatt van, mÃg a spam levelek valószÃnűsége 98% felett van.

A SpamBayes projekt egyik felhasználójának ilyen eloszlást mutattak a leveleinek valószÃnűségei inverz khi-négyzet összegzÅ‘ algoritmust használva.
Forrás: http://spambayes.sourceforge.net/images/chi2_graph.png
2. Honnan származik az adatbázis minta, amivel tanÃtom? Ha az enyém, akkor nem reprezentatÃv. Ha egy szervezet gyűjti össze, akkor az én email forgalmam szempontjából irreleváns.
A statisztikai szűrÅ‘k pontossága a tanÃtással arányos. Ezért nagyon fontos, hogy a felhasználó saját levelei megfelelÅ‘en reprezentálva legyenek a statisztikai spamszűrÅ‘ adatbázisában, ellenkezÅ‘ esetben hibákat fog véteni a program. A jó levelekre jellemzÅ‘, hogy ahány felhasználó, annyiféle jó leveleik vannak, továbbá a jó leveleik általában lassan változnak. A spameket viszont ezzel ellentétben nagy tömegben küldik ki, lényegében azonos tartalommal, és a spam gyorsan változik (bár a havi pár ezer spam leveleimben jó, ha 10-féle spam váltja egymást).
EbbÅ‘l az következik, hogy (elvben) az a legjobb, ha a ham adatbázisunkat a saját leveleink alapján állÃtjuk össze, mÃg a spam adatbázist egy nagy, profi és speciálisan ezzel foglalkozó cégtÅ‘l szerezzük be, akik rengeteg spammel találkoznak, Ãgy nagyon reprezentált és aktuális mintával rendelkeznek.
A gyakorlatban ez azonban nem működik, mert aligha van olyan anti-spam gyártó cég, aki a drága áron (értsd: költsége van) összeszedett adatbázisát ingyen (vagy akár térÃtés ellenében) szétosztaná. De nem is van erre feltétlen szükségünk, mert pl. vállalati környezetben bÅ‘ven elég lehet 1-2 hónapnyi összegyűjtött spam levél, ill. egy csapda email cÃm segÃtségével a spammereket is megkérhetjük, hogy segÃtsenek frissen tartani a spam leveleinket (anélkül, hogy a felhasználóinknak találkozniuk kellene az ilyen spamekkel). Hihetetlen, de a spammerek meg is teszik ezt a szÃvességet (persze, nem önszántukból, de ez most mindegy).
3. Folyamatos menedzsmentet igényel. Ki végzi el? A rendszergazda vagy egy 3. fél?
Nem igényel. A saját gépemen futtatott clapf-ot persze folyamatosan szemmel tartom, de ez azért egyedi jelenség, mert a programot én fejlesztem, és – mint fejlesztÅ‘ – új funkciókat tesztelek, csiszolgatom, stb. A felhasználók szempontjából a clapf egy láthatatlan köztes alkalmazás, amely úgy működik, mint az ember veséje, azaz rendesen nem is tudjuk, hogy van olyanunk is.
Ha pedig “folyamatos menedzsment” alatt a folyamatos tanÃtástól félünk, akkor hadd nyugtassak meg mindenkit: ha van egy erÅ‘s kezdeti tanÃtás (amit tipikusan a vállalat rendszergazdája végezhet el – amit elég egyszer megtenni), akkor aligha kell a felhasználóknak folyamatosan tanÃtani a token adatbázist.
4. Bayes mérgezés.
Ez akár még működhet is, de a) ez idÅ‘t és befektetést igényel a spammertÅ‘l, márpedig Å‘k minél hamarabb túl akarnak esni a levélszemét kiküldésén, b) a felhasználónak automatikus tanÃtásra kell beállÃtani a spamszűrÅ‘jét, és c) a spamszűrÅ‘nek fel kell használnia a nem standard levél fejléceket is. Ez implementáció függÅ‘, vannak olyan spamszűrÅ‘k, amelyek csak bizonyos fejléc elemekkel foglalkoznak (pl. Subject, From, To, Received és esetleg a Message-ID), a többit pedig figyelmen kÃvül hagyják. Ebben az esetben aligha fog működni a trükk. Ha pedig mégis átcsúszik végül a spam levél, akkor egyetlen tanÃtás semlegesÃtheti a spammer trójai tokenjeit, és kezdheti a spammer az egész cécót elölrÅ‘l.
5. Töltelékszavak a levél elején, végén, közepén, hogy ezek lerontsák a felismerés hatékonyságát. Spamre nem jellemzÅ‘ szavakat tesznek bele, Ãgy fog átjutni a spamszűrÅ‘n. Ha tanÃtod, akkor mérgezi az adatbázist, sokkal rosszabbul fog működni.
J.G. Cumming végzett egy tesztet, amelyben egy spamként felismert piko spamet módosÃtott úgy, hogy a Wikipedia-ról, a szótárfájlból véletlenszerűen ollózott be töltelékszavakat. Az eredmény: a piko spam tÃzezerszámra küldött mutációiból mindössze 0.04% jutott át. Elhanyagolható.
6. A nem szöveges, pl. kép alapú spamekkel mit kezdenek ezek a programok?
A csak képes mellékletet tartalmazó spam is tartalmaz használható szöveges részt (nem az ilyen levelek végén található kötelezÅ‘ (sic!) szósalátára gondolok), pl. a szükséges HTML részlet, domain nevek, SMTP útvonal (a “Received” fejlécekbÅ‘l), stb. Emellett – ha a spamszűrÅ‘ bizonytalan – a feladó IP-cÃmét össze lehet vetni feketelistákkal, vagy kimondhatjuk azt is, hogy ha valaki képet küld, és a levele nem jó levél (azaz a spam valószÃnűsége egy bizonyos határ alatt van), akkor azt spamnek tekintjük. Ezt az utóbbi elvet használva, jó ha 2 fals pozitÃvom volt az utóbbi hónapokban, cserébe viszont meg tudtam fogni egy nagy halom képes spamet.
7. A Bayes alapú technológiák megbÃzhatósága kétséges, kétségbe vonható.
Megcáfolva. A bizonyÃtást ld. fentebb, ill. a SPAMtelenül cÃmű könyvemben, amely az áprilisi könyvfesztiválon mutatkozik be. Ja, és hogy miért hoztam elÅ‘ a témát? Mert Nemes Dániel megemlÃtette az inverz “csÔ – vagy helyesebben: khi (a görög ABC betűje után szabadon) – algoritmust, és a clapf terméknév is elhangzott (mint ami az elÅ‘bbi nehéz nevű algoritmust használja), amit innen is szeretnék megköszönni. Hátha idén azt is megtudhatja a Hacktivity közönsége, hogy mi az a clapf, és hogyan képes állni a sarat a spammerek trükkjeivel szemben….




