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…