Kalandok a Cloudmark-kal
Böngészem a netet, vagy éppen egy SpamAssassin lista egyik levele került elém, és mit látok? A Cloudmark elérhetővé tette a szolgáltatását – Cloudmark Authority Engine (CMAE) – az elterjedt SpamAssassinhoz. Mi a CMAE? Egy 2 csomagból álló alkalmazás, amellyel a SpamAssassinba integrálható a Cloudmark kollaboratív vírus/spamszűrője. Az egyik része egy démon, ami a 2703/tcp porton várja a leveleket, a másik pedig egy SA plugin.
Én meg amilyen kísérletező kedvű vagyok, megnéztem a kliens részét, amihez nyilván van egy C library + header fájlok. Mázli, hogy a cmae_client.h
korrekt módon dokumentált, így írni tudtam egy rövid 2 soros C függvényt, ami fog egy levelet, és kideríti, hogy az vírus, spam vagy tiszta levél.
A megoldás egyébként úgy működik, hogy a kliens base64 kódolva elküldi a levelet a démonnak, az pedig az adatbázisa alapján eldönti, hogy az jó levél vagy sem. Mivel a Cloudmark képes valósidőben (real time) detektálni a vírus/spamkitöréseket, ezért nagyon fontos, hogy az adatbázisa up-to-date legyen. Ezt úgy oldja meg, hogy ún. microupdate-ekkel tartja percre frissen az adatbázisát, és csak egy licence kulcs kell hozzá.
A kliens program kb. ennyi:
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <unistd.h> #include <errno.h> #include <sys/stat.h> #include <sys/mman.h> #include <fcntl.h> #include <cmae_client.h> int main(int argc, char **argv){ int ret, fd; unsigned int ScoreOut=0; char *msg=NULL; struct stat st; CMAE_Client_Session SessionOut; if(argc < 2){ printf("usage: %s <messagefile>\n", argv[0]); return 1; } if(CMAE_Client_Open(&SessionOut, "127.0.0.1", 0, 0, 0)){ printf("CMAE_Client_Open()\n"); return 1; } if(stat(argv[1], &st)){ printf("cannot stat: %s\n", argv[1]); return 1; } fd = open(argv[1], O_RDONLY); if(fd == -1){ printf("cannot open: %s\n", argv[1]); return 1; } msg = mmap(msg, st.st_size, PROT_READ, MAP_SHARED, fd, 0); close(fd); if(msg == NULL){ printf("mmap()\n"); return 1; } ret = CMAE_Client_Score(SessionOut, NULL, msg, st.st_size, &ScoreOut, NULL, NULL, NULL, NULL); munmap(msg, st.st_size); CMAE_Client_Close(SessionOut); printf("%s %d\n", argv[1], ScoreOut); return 1; }
Az elvégzett tesztben 1313 ham levél szerepelt a májusi levelezésemből, amiből 9-et tévesen spamként azonosított. Ebből kettőt mondhatunk nem kritikusnak (Sun hírlevelek), de a maradék 7 az üzleti levelezésem része, úgyhogy sajna 7 kritikus fals pozitív hibát is vétett. (FP: 9/1313 = 0.68%)
Kétféle spam mintán is leteszteltem: az egyik a junk mappa tartalma, 2182 levél, amiből csak 5 csúszott át, ez 99.77%-os spam felismerés. A másik minta a csapda email címre érkezett 4468 levélből állt, amiből 20 csúszott át, ami 99.55%-os spam felismerés.
A detektálás folyamata egyébként gyors, a 12 ujjlenyomatot gyorsan levette a levelekről, és kidobta az eredményt, hogy szerinte mi az ábra.
Ja igen, a kaland. A poén kedvéért kértem egy ajánlatot a Cloudmark-tól, hogy mégis mennyibe fájna ez nekem, ha a 30 napos trial után komolyra fordulna a dolog? Potom pénz az egész, évente $5,000, amiért akár 2222 mailboxot is megvédhetek.
Azt is kértem, hogy mutassanak már egy demo C-programot, hogyan kell használni az SDK-jukat? Erre jött a kiváncsiskodás, hogy minek az neked, mire akarod használni? Megírtam, hogy építek egy POP3 proxyt, ami bárki használhat regisztráció után egy féléves pilot erejéig. Aztán megjött a válasz, hogy sajna nem fog menni, csak a SpamAssassin plugint tudják adni. Nem akartam ünneprontó lenni, hogy már régen kész van a cucc…
Leave a Reply