反垃圾反病毒过滤器中,表现最好的应该是基于评分的过滤器。
贝叶斯过滤算法原理就是检查垃圾邮件中的词或字符等,将每个特征元素(最简单的元素就是单词,复杂点的元素就是短语)都给出一个分数(正分数),另一方面就是检查正常邮件的特征元素,用来降低得分的(负分数)。最后邮件整体就得到一个垃圾邮件总分,通过这个分数来判断是否spam。
揭底贝叶斯过滤算法
贝叶斯理论现在在计算机行业中应用相当广泛,这是一种对事物的不确定性描述,比如Google计算中就采用了贝叶斯理论。贝叶斯算法的过滤器就是计算邮件内容中成为垃圾邮件的概率,它要首先从许多垃圾邮件和正常邮件中进行学习,因此,效果将比普通的内容过滤器更优秀,错报就会更少。贝叶斯过滤器也是一种基于评分的过滤器。但不仅仅是一种简单的计算分数,而更从根本上来识别。它采用自动建立特征表的方式,原理上,首先分析大量的垃圾邮件和大量的正常邮件,算法分析邮件中多种特征出现概率。
贝叶斯算法计算特征的来源通常是:
邮件正文中的单词;
邮件头(发送者、传递路径等);
其他表现,比如HTML编码(如颜色等);
词组、短语;
Meta信息,比如特殊短语出现位置等;
比如,正常邮件中经常出现单词XXX,但是基本不在垃圾邮件中出现,那么,XXX标示垃圾邮件的概率就接近0,反之则然。
贝叶斯算法步骤为:
1、收集大量的垃圾邮件和非垃圾邮件,建立垃圾邮件集和非垃圾邮件集。
2、提取特征来源中的独立字符串,例如 XXX等作为TOKEN串并统计提取出的TOKEN串出现的次数即字频。按照上述的方法分别处理垃圾邮件集和非垃圾邮件集中的所有邮件。
3、每一个邮件集对应一个哈希表,hash table good对应非垃圾邮件集而hash table_bad对应垃圾邮件集。表中存储TOKEN串到字频的映射关系。
4、计算每个哈希表中TOKEN串出现的概率P=(某TOKEN串的字频)/(对应哈希表的长度)
5. 综合考虑hashtable_good和hashtable_bad,推断出当新来的邮件中出现某个TOKEN串时,该新邮件为垃圾邮件的概率。数学表达式为:A 事件 ---- 邮件为垃圾邮件;t1,t2 …….tn 代表 TOKEN 串;则 P(A|ti)表示在邮件中出现 TOKEN 串 ti 时,该邮件为垃圾邮件的概率。设P1(ti)=ti 在 hash table_good 中的值;P2(ti)=ti 在 hash table_ bad 中的值;则 P(A|ti)=P2(ti)/[(P1(ti)+P2(ti)]。
6、建立新的哈希表hash table_probability存储TOKEN串ti到P(A|ti)的映射。
7、根据建立的哈希表 hash table_probability可以估计一封新到的邮件为垃圾邮件的可能性。
当新到一封邮件时,按照步骤2,生成TOKEN串。查询hash table_probability得到该TOKEN 串的键值。假设由该邮件共得到N个TOKEN 串,t1,t2…….tn, hash table_probability中对应的值为 P1 ,P2 ,……PN ,P(A|t1 ,t2, t3……tn) 表示在邮件中同时出现多个TOKEN串t1,t2……tn时,该邮件为垃圾邮件的概率。由复合概率公式可得:P(A|t1 ,t2, t3……tn)=(P1*P2*……PN)/[P1*P2*……PN+(1-P1)*(1-P2)*……(1-PN)]。当 P(A|t1 ,t2, t3……tn) 超过预定阈值时,就可以判断邮件为垃圾邮件。
当新邮件到达的时候,就通过贝叶斯过滤器分析,通过使用各个特征来计算邮件是spam的概率。通过不断的分析,过滤器也不断地获得自更新。比如,通过各种特征判断一个包含单词XXX的邮件是spam,那么单词XXX成为垃圾邮件特征的概率就增加了。
这样,贝叶斯过滤器就有了自适应能力,既能自动进行,也可以用户手工操作,也就更能适应单个用户的使用。而垃圾邮件发送者要获得这样的适应能力就很难了,因此,更难逃避过滤器的过滤,但他们当然还是能够将邮件伪装成很普遍的正常邮件的样子。除非垃圾邮件发送者能去对某个人的过滤器进行判断,比如,采用发送回执的办法来了解哪些邮件被用户打开了等,这样他们就可以适应过滤器了。
虽然贝叶斯过滤器还存在有评分过滤器的缺陷,但是它更优化了。实践也证明,贝叶斯过滤器在客户端和服务器中效果是非常明显的,优秀的贝叶斯过滤器能够识别超过99.9%的垃圾邮件。大多数目前应用的反垃圾邮件产品都采用了这样的技术。比如Richmail邮件系统中的贝叶斯过滤。
贝叶斯过滤算法局限性和缺点
这种评分过滤器尽量实现了自动识别垃圾邮件的功能,但是依然存在一些不适应的问题:
1、特征元素列表通过垃圾邮件或者正常邮件获得。因此,要提高识别垃圾邮件的效果,就要从数百邮件中来学习,这降低了过滤器效率,因为对于不同人来说,正常邮件的特征元素是不一样的。
2、获得特征元素分析的邮件数量多少是一个关键。如果垃圾邮件发送者也适应了这些特征,就可能让垃圾邮件更象正常邮件。这样的话,过滤特征就要更改了。
3、每个词计算的分数应该基于一种很好的评价,但是还是有随意性。比如,特征就可能不会适应垃圾邮件的单词变化,也不会适应某个用户的需要。
现行的很多采用过滤器技术的反垃圾邮件产品通常都采用了多种过滤器技术,以便使产品更为有效。过滤器通过他们的误报和漏报来分等级。漏报就是指垃圾邮件绕过了过滤器的过滤。而误报则是将正常的邮件判断为了垃圾邮件。完美的过滤器系统应该是不存在漏报和误报的,但是这是理想情况。
一些基于过滤器原理的反垃圾邮件系统通常有下面的三种局限性:
1、可能被绕过。垃圾邮件发送者和他们用的发送工具也不是静态的,他们也会很快适应过滤器。比如,针对关键字列表,他们可以随机更改一些单词的拼写,比如(强悍、弓虽悍、 强-悍)。Hash-buster(在每个邮件中产生不同的HASH)就是来绕过hash过滤器的。当前普遍使用的贝叶斯过滤器可以通过插入随机单词或句子来绕过。多数过滤器都最多只能在少数几周才最有效,为了保持反垃圾邮件系统的实用性,过滤器规则就必须不断更新,比如每天或者每周更新。
2、误报问题。最头痛的问题就是将正常邮件判断为垃圾邮件。比如,一封包含单词sample的正常邮件可能因此被判断为垃圾邮件。某些正常服务器不幸包含在不负责任的组织发布的block list对某个网段进行屏蔽中,而不是因为发送了垃圾邮件。但是,如果要减少误报问题,就可能造成严重的漏报问题了。
3、过滤器复查。由于误报问题的存在,通常被标记为垃圾邮件的消息一般不会被立刻删除,而是被放置到垃圾邮件箱里面,以便日后检查。不幸的是,这也意味着用户仍然必须花费时间去察看垃圾邮件,即便仅仅只针对邮件标题。
尽管过滤器技术存在局限,但这是目前最为广泛使用的反垃圾邮件技术。