“Tarvitsisimme kaikkien yliopistolaisten osoitteet…”

Tämä on melkinpä FAQ, usein kysytty kysymys:

Tutkimuslaitos X toteuttaa omasta toimeksiannostaan yhteistyössä Y:n kanssa valtakunnallisen Z-ryhmän asiakastyytyväisyystutkimuksen, jota varten tarvitsisimme koko organisaationne (Helsingin Yliopisto [sic]) henkilöstön yhteystiedot (tai oikeastaan vain sähköpostit, koska kyselytutkimus toteutetaan webkyselynä).

Miten sen kauniisti sanoisi? Olisiko “EI TIPU!” hyvä?

Jotkut ilmeisesti ihan oikeasti uskovat, että sähköpostiylläpitäjät ovat joko hölmöjä tai laeista piittaamattomia, tai sitten eivät vain itse ymmärrä. Vihje: pyyntöön suostuminen tarkoittaisi ainakin henkilörekisteririkosta.

Emme anna osoitelistoja ulkopuolisille, emmekä edes sisäpuolisille ilman perusteltua ja laillista tarvetta. Ja mistä edes tietäisimme, että X ei aikoisi myydä tietoja eteenpäin.

Ja kyllä, opiskelijarekisteristä (tms.) voi kyllä ostaa esimerkiksi tutkimuskäyttöön osoitelistoja, jotka sisältävät vain niiden osoitteita, jotka ovat suostumuksensa luovuttamiseen antaneet.

Suurta (laillista) massapostitusta varten kannattaa kuitenkin konsultoida myös teknistä postiylläpitoa (meitä), ettei synny odottamattomia ongelmia.

“Tatjana” taas aktiivinen

Viime yönä alkoi taas tulla sähköpostiviestejä otsikoilla Etsin kaveria/rakastajaa/rakkautta. Viestit näyttävät esimerkiksi tältä:

Date: Fri, 4 Apr 2008 01:56:20 +0100
From: lähettäjä
To: vastaanottaja
Subject: Etsin rakkautta

Moi. Nimeni on Tatjana. Olen opiskelija ja tulin Suomeen opiskelemaan.
Etsin ystävää ja seksikumppania. Tarvitsen vain hyvän miehen joka on
kunnollinen,
luotettava ja älykäs. Antakaa minun tietää jos haluatte tavata kanssani.
Edes jos tulette minulle vain hyväksi ystäväksi.

Voitte katsoa valokuviani kotisivullani osoitteella ….

http://eräs (kylläkin toimiva) osoite/

Huomioidaan vain vakavat tarjoukset. Kiitos.

Eli edes ääkkösiä ei ole osattu koodata oikein (edit: mutta hups, blogisofta teki sen sitten). Lähettäjänä on joku satunnainen osoite.

Erinäiset tiedotusvälineet ja CERT-FI ovat noteeranneet tapauksen. Kyseessä on siis haittaohjelma, jonka lähettämässä viestissä mainostetaan osoitetta, josta saa asennettua kyseisen haittaohjelman. Ei kannata.

Roskaposti, virukset, muut haittaohjelmat ja phishing kulkevatkin nykyisin käsi kädessä. Verkkorikollisten työkalupakista löytyy koko repertuaari.

Meillä yliopistolla viestit alkoivat jo yön aikana enimmäkseen tunnistua roskaposteiksi, koska viestien sisältämä www-osoite päätyi ns. URI-listoille. Tein lisäksi aamupäivällä tunnistussäännön (nimeltään “L_TATJANA_SCAM”), jonka perusteella viestien pitäisi tunnistua varmasti. Lisäksi verkkoväki taisi blokata osoitteen palomuurista.

Nyttemmin iltapäivällä tosin viestien tulo näyttäisi tyrehtyneen tyystin. Olikohan se kovin lyhytaikainen kampanja vai onkohan kaikkien koneet niin hyvin suojattuja? Epäilenpä ainakin jälkimmäistä.

ORDB listasi maailman

Roskapostintorjunnan kulmakiven muodostavat monin paikoin niin sanotut mustat listat (eli sulkulistat, DNS-listat, englanniksi access lists, DNS black lists, Real Time Blackhole Lists, jne.). Näitä listoja operoivat ulkopuoliset tahot, joista osa on kaupallisia ja osa vapaaehtoisvoimin toimivia.

Listat sisältävät runsaasti IP-osoitteita, jotka esimerkiksi ovat laajakaistakäyttäjien suoria IP-osoitteita (joista ei yleensä pitäisi tulla suoraan postia kulkematta operaattorin palvelimen kautta) tai vaikkapa tunnettuja roskapostilähteitä.

Ajoittain syntyy uusia listoja, ja kuten arvata saattaa, toisinaan listat myös lopettavat toimintansa. Jälkimmäisestä yleensä seuraa ongelmia.

Listojen olemassaolo loppuu, kun ne käyvät tarpeettomaksi, tai esimerkiksi silloin, kun niiden ylläpitäjältä loppuu voimat. Edellisestä esimerkkinä on Open Relay Database (ORDB), joka listasi avoimia välityspalvelimia (open relay). Vähitellen maailma muuttui, ja roskapostista enää täysin marginaalinen osa tuli avointen releiden kautta. ORDB pani pillit pussiin tehtyään itsensä tarpeettomaksi.

Jälkimmäisestä tapauksesta varoittavan esimerkin antaa Osirusoft-niminen lista. Kerrotaan, että sen ylläpitäjä pimahti ja listasi koko maailman. Se tarkoittaa, että kun listaa käyttävä postipalvelin postia vastaanottaessaan tarkisti listalta minkä tahansa lähettäjän IP-osoitteen, vastauksena oli, että listattu on. Yleensä viesti palautuu tällöin lähettäjälle virheilmoituksen kera. Näin voidaan pysäyttää käytännössä kokonaisten organisaatioiden postinkulku.

Postijärjestelmien ylläpitäjät valitsevat tarpeisiinsa sopivan valikoiman sulkulistoja lukuisien tarjolla olevien joukosta. Näillä ylläpitäjillä ei ole yleensä mitään erityistä yhteyttä listoja ylläpitäviin tahoihin, eikä varsinkaan listojen ylläpitäjillä niiden käyttäjiin. Tämä pahentaa ongelmaa. Lisäksi jotkut postijärjestelmät vain pystytetään eikä niille tehdä mitään sen jälkeen. Ei ylläpitoa (lähes) ollenkaan.

ORDB ilmoitti yli vuosi sitten lopettavansa toimintansa. Päinvastoin kuin Osirusoftin kamalassa tapauksessa, ORDB päätti tyhjentää listansa kokonaan. Näin pitääkin. Ongelma vain on, että kaikkia postiylläpitäjiä tieto ei näköjään vieläkään ole tavoittanut. Nyt onkin kuulunut raportteja siitä, että milloin mikäkin palvelin on muka ORDB-listattu; käytännössä koko maailma (0.0.0.0) on listattu. Tämäkö on ORDB:n tapa ilmoittaa kuolemastaan?

Nämä raportit todistavat ainakin sen, että maailmassa on ihan liian monta postijärjestelmää ilman (ammattitaitoista) ylläpitoa.

Spämmin (ja ei-spämmin) raportointi

Toteutin hiljattain neljälle spämmiä tägäävälle koneelle tietokantareplikoinnin. Tietokannassa on siis dataa bayesiläistä roskapostintunnistusta (ks. edellinen kirjoitus) varten. Replikointi tarvitaan siksi, että koneilla on yhtäläinen käsitys siitä, mikä on roskaa ja mikä ei.

Tällä hetkellä setupissa on yksi master- ja kolme slave-konetta. Master-tietokantakoneelle opetetaan uusi aineisto, muutokset siirtyvät automaattisesti slave-koneille niin, että kaikilla on hetikohta identtinen tietokanta.

Kuten kerroin, tietokantaa täytyy säännöllisesti opettaa, koska postivuon profiili muuttuu; roskapostittajat muuttavat menetelmiään ja tyyliään, ja vähintäänkin aikaleimat viesteissä muuttuvat.

Em. syystä muuten tilastosuodattimelle “opetettavat” viestit täytyy olla samalta ajanjaksolta ja mieluiten samoilta käyttäjiltä. Tai kuvitellaanpa, että tilastolliselle filtterille opetetaan roskapostiksi vain sellaisia viestejä, jotka on tulleet joulukuussa ja ei-roskapostiksi sellaisia, jotka ovat tulleet tammikuussa. Mitä luulette filtterin päättelevän tilanteessa, jossa se näkee viestissä merkkijonon “Dec” tai “Jan”?

Opetus on jatkossa tarkoitus tehdä niin, että master-tietokannan sisältävällä koneella ajetaan säännöllisesti skripti, joka hakee IMAP-palvelimelta tietyistä kansiosta viestit ja opettaa ne suodattimelle.

Tulevaan webmailiin (joka siis on uudistumassa) tulee linkit “Report as spam” ja “Report as innocent”, joilla voi siirtää kansion näihin tiettyihin kansioihin. Itse asiassa sain tämän juuri toteutettua. Se on kuitenkin oma muutos webmailin koodiin, ja sellaisia pitäisi välttää. Pitänee ehdottaa kehittäjille tällaista toimintoa toteutettavaksi. Done.

Raportoituja viestejä ei lue kukaan paitsi automaatti, joka huolehtii opettamisesta. Enintään roskapostikansiota saatetaan monitoroida otsikkotasolla, mutta siitäkään ei käy ilmi kenenkään henkilöys. Näitä ei siis katsota millään normaalilla postiohjelmalla.

Tilastollisesta torjunnasta

Lupasin kertoa lisää bayesiläisestä roskapostintunnistuksesta, joka perustuu viestien sisältämien sanojen (tai muiden merkkijonojen) luokitteluun. Samaa tarkoittaen puhutaan myös oppivasta suodatuksesta.

Thomas Bayesin teoreeman kanssa menetelmällä on vain etäinen suhde, mutta joka tapauksessa kyse on tilastollisesta menetelmästä, jossa tunnistimelle annetaan aineisto, korpus, sekä roskapostista että ei-roskapostista. Tunnistin pilkkoo aineiston avainsanoiksi (token), käytännössä esimerkiksi sanoiksi. Näiden sanojen esiintymisfrekvenssi sekä roskapostissa että ei-roskapostissa tallennetaan tietokantaan, ja tämän datan perusteella jokaiselle viestille lasketaan “roskapostitodennäköisyys” sen sisältämän “sanaston” perusteella. Tarjolla on erilaisia ohjelmia ja näissä erilaisia algoritmeja todennäköisyyden laskemiseen. Meillä käytetään SpamAssassinia ja tätä kirjoittaessa sen naiivia bayesiläistä menetelmää, jonka tästä sovellusmahdollisuudesta ovat kirjoittaneet Paul Graham ja Gary Robinson. SA:ssa olisi käytettävissä myös vähän erilainen chi^2-menetelmä (Robinson), mutta ei nyt mennä siihen.

Menetelmistä voisi kertoa pitempäänkin, ja niin teinkin kandityössäni (ja mahdollisesti tulevassa gradussani). Menetelmä on teoriassa hyvin sitkeä erilaisia kiertoyrityksiä vastaan, koska se oppii tunnistamaan ne (olettaen, että tietokantaa päivitetään automaattisesti tai ainakin usein). Käytännössä kuitenkin ollakseen tarkka menetelmä vaatii erittäin järeää laskenta- ja tallennuskapasiteettia ja palautejärjestelmän virheellisiä tunnistuksia varten. Niinpä toteutukset ovat yleensä, kuten meillä, jonkinlaisia kompromisseja.

Tilastollinen roskapostintorjunta algoritmista riippumatta on tehokkaimmillaan silloin, kun korpus on mahdollisimman yksilöllinen, siis vastaanottajakohtainen. Onhan selvää, että minun postini eivät ole sinun. Tämä kuitenkin edellyttäisi suurta tallennuskapasiteettia, jonka sisältämä data olisi kuitenkin suurimmaksi osaksi päällekkäistä – onhan intuitiivisesti lähes yhtä selvää, että suuri osa sanastosta on samaa eri vastaanottajienkin viesteissä. Lisäksi yksilöllisissä tietokannoissa on muita ongelmia – mitä esimerkiksi tehtäisiin postituslistalle osoitetulle viestille?

Meillä onkin käytössä yksi globaali korpus, mutta sellaisen kerääminen on tietysti haaste, koska täytyisi huomioida kaikki eri kieliryhmät, käyttäjäryhmät ja niin edelleen. Satunnaisuus ja suuret volyymit ovat ystäviä tässä tapauksessa. Lisäksi käyttäjien yksityisyyden suoja on lakisääteisesti tiukka, eikä sitä saa vahingossakaan loukata “enempää kuin on tarpeellista välttämättömien tehtävien suorittamiseksi”. Tilastollisten menetelmien käyttö on tuskin ihan niin välttämätöntä, joten ihmisten viestejä voi käsitellä ainoastaan automaattisin menetelmin. Ja hyvä niin.

Aineiston täytyy myös olla ajan tasalla. Tähän tehtävään on useita eri menetelmiä, kuten se, että tunnistimelle opetetaan jatkuvasti ohi virtaavaa (riittävän selvästi tunnistettua) postimateriaalia. Toinen mahdollisuus on opettaa sille ainoastaan väärät tunnistukset – silloin kun roskaposti ei tunnistu roskapostiksi (väärä negatiivinen) tai viesti tunnistuu aiheetta roskapostiksi (väärä positiivinen). Täällä on käytössä näistä jälkimmäinen tapa. Lisäksi tietokanta tarvitsee jonkin verran pohjatietoa.

Meillä on ollut käytössä tietoinen linja, jonka mukaan vääriä negatiivisia suvaitaan paljonkin verrattuna vääriin positiivisiin, joihin on aina suhtauduttava vakavasti. Roskapostintunnistus on aina näiden kahden välillä tasapainoilua.

On oma kysymyksensä, kuinka ylläpito saa haltuunsa väärin tunnistuneet viestit. Tähän asti on ajateltu,että ylläpitäjät saavat roskapostia ihan riittävästi, mutta ei-roskapostia varten on perustettu osoite,johon käyttäjät voivat bounsata viestejä. Käytännössä tapa ei ole tuottanut mielestäni riittävästi ei-roskapostiaineistoa, ja niinpä aineiston keräämiseen on nykyisin tehokkaampi tapa.

Piakkoin (keväällä?) käyttöönotettavassa webmailin uudessa versiossa on kätevähköt linkit viestien raportoimiseksi opetusta varten. Toivon tämän innostavan käyttäjäkuntaa osallistumaan suodattimen kehittämiseen.

Perustietoja roskapostintorjunnasta

Tässä hieman perustietoa roskapostin torjunnasta Helsingin yliopistolla, seuraavien kirjoitusten pohjaksi.

Helsingin yliopistolla roskapostia torjutaan muutamassa eri vaiheessa postinvälitystä. Kun joku lähettää postia talon ulkopuolelta, postia on vastaanottamassa tällä hetkellä kolme konetta. Koneita voidaan kutsua vaikka MX-koneiksi (mail exchanger) tai, kuten meillä on tapana sanoa, rajapostikoneiksi. Nehän ovat postin vastaanottamisen (ja aiemmin myös lähettämisen) näkökulmasta ulkomaailman ja yliopiston rajalla.

Näillä rajakoneilla roskapostista torjutaan valtaosa. Apuna on erilaisia mustia listoja (DNS block lists), jotka sisältävät esimerkiksi tunnettuja roskapostin lähettäjäkoneiden IP-osoitteita. Käytössä on tällä hetkellä esimerkiksi Spamhausin, Trend Micron, SORBSin ja muutamia muita listoja. Lisäksi osa viesteistä torjutaan paikallisiin sääntöihin perustuen, mutta näiden sääntöjen rooli on volyymien puolesta vähenemään päin.

On tärkeää torjua mahdollisimman paljon viestejä jo “kättelyssä” SMTP-tasolla (ja SMTP on postinvälitykseen käytetty protokolla), koska silloin ei tarvitse generoida virheilmoitusviestiä osoitteeseen, jonka roskapostittaja on väärentänyt lähettäjäksi. Aihe voi olla asiaa tuntemattomalle hieman hankala. Lisätietoja hakukoneista hakusanalla “backscatter”.

Vastaanotetut viestit ohjataan seuraavaksi virustarkistukseen. Virustorjuntaohjelma kylmästi poistaa viruksen sisältämät viestit. Aiemmin niin ei olisi voitu tehdä, sillä liikkeellä oli paljon ns. makroviruksia, jotka piileskelivät sinänsä legitiimien MS Office -tiedostojen kätköissä. Nykyisin tilanne on muuttunut, ja voidaan sanoa, että käytännössä kaikki viruksen tai madon sisältävät viestit ovat myös sellaisen generoimia. Kukaan ei siis jää kaipaamaan näitä viestejä.

Virustarkistuksen jälkeen vuorossa on omasta näkökulmastani kiinnostavin ja haasteellisin osa, roskapostin tunnistus. Roskapostia tunnistetaan sekä sisällöllisin menetelmin että esimerkiksi viestin otsakkeisiin perustuen. Tunnistuksessa on apuna myös mainittuja mustia listoja, koska viestien joukossa on esimerkiksi iki.fi:n kaltaisten palvelujen kautta tulleita roskapostiviestejä, jotka ovat turvassa rajapostikoneiden kontrollilta.

Käytössämme on yleensä uusin versio SpamAssassin-ohjelmistosta, ja se perustuu erilaisten tekniikoiden yhdistämiseen. Mustien listojen lisäksi ohjelma käyttää mittavaa joukkoa säännöllisiä lausekkeita (ns. heuristinen analyysi), ja muitakin tekniikoita on tarjolla. Kaikki eivät ole meillä eri syistä käytössä;tyypillisesti joko tehosyöppöytensä takia tai sitten tekniikka ei vielä ole tarpeeeksi kehittynyttä.

Lisäksi tunnistuksessa on käytössä ns. bayesiläinen menetelmä, tilastollinen roskapostin tunnistaminen. Kerron siitä lisää myöhemmin.

Näistä kaikista tekniikoista lasketaan yhteen pisteet, ja jos viesti kerää riittävästi pisteitä eli riittävän moni testi löytää siitä roskapostimaisia piirteitä, siihen lisätään roskapostiepäilystä kertova otsake (tai kaksi, X-HY-Spam-Status ja -Level). Tämän perusteella käyttäjät voivat sitten tehdä erilaisia suodatustoimenpiteitä.

Käyttäjät voivat omatoimisesti tutkiskella, mitkä kaikki testit laukesivat viestin kohdalla katsomalla viestin X-HY-Tests-otsakkeen sisällön.

Piikki takanapäin

Viikottainen roskapostitilasto

Kun tein syksyllä 2007 kandityötäni roskapostintorjunnasta, olin lyödä itseni ällikällä. Opettelin käyttämään R-tilasto-ohjelmiston piirto-ominaisuuksia ja tein käppyröitä roskapostin määristä. Laskin käppyröiden pohjaksi yhteen eri postinvälityksen vaiheissa torjuttujen viestien määrää, ja suhteutettuna muuhun postiin lukema oli huikean korkea, siinä 96 prosentin hujakoilla ja nousussa.

Nyt tiedämme, että kyseessä oli jonkun botnetin aiheuttama piikki, ja nyttemmin määrä on laskenut. Tätä kirjoittaessa viikkokeskiarvo on “enää” 91 prosenttia.

Avaus

Ajattelin kertoa täällä kuulumisia siitä, mitä kuuluu yliopiston roskapostintorjunnalle. Varmaan samalla tulee käsitellyksi muitakin sähköpostiin liittyviä asioita.

Blogin sisältö on pääosin aika teknistä, enkä ehkä aina jaksa selittää kaikkia asioita. Kommentit ja tarkennus- tai selityspyynnöt ovat erittäin tervetulleita.

Kommenttipuolella voi tietysti myös valittaa ongelmista, mutta jos on jotain oikeasti tärkeää sanottavaa, kannattaa lähestyä atk-posti ät helsinki piste fi -osoitetta.