垃圾邮件的来历和技术根源
SMTP协议本身是一个简化的邮件递交协议,缺乏很多必要的身份认证,这是SMTP协议造成垃圾邮件泛滥的原因之一。由于SMTP协议中,允许发信人伪造绝大多数的发信人特征信息,如:发信人、信件路由等,甚至在通过匿名转发、开放转发和开放代理等手段后,可以近乎完全的抹去垃圾邮件的发信人特征。目前,绝大多数的垃圾邮件都伪造了其真实的发信来源,这对于发现制止垃圾邮件的传播造成了很大的困难。
SMTP协议还缺少一些必要的行为控制,不能有效的甄别正常的邮件发送和垃圾邮件发送行为,这是造成垃圾邮件泛滥的原因之二。垃圾邮件的发送通常有一定的行为特征,比如在较短的时间内发送极其大量的电子邮件,发信通讯中通常有特定的通讯特征等。
反垃圾邮件技术手段要么是本身带有一定的缺陷,比如在垃圾邮件的判断上不能做到绝对精确,或者需要很大实现成本等等;要么就是由于实际环境的限制而不能应用,比如不能彻底推翻原有的SMTP协议而使用一种新的可以避免垃圾邮件产生和传播的邮件协议。所以,单纯依赖技术手段并不能完全解决垃圾邮件。
反垃圾邮件技术的解析
我们以一款垃圾邮件厂商博威特-梭子鱼反垃圾邮件防火墙所用的防护技术为代表,来分析一下反垃圾邮件防火墙使用了哪些技术。以下是这款反垃圾邮件防火墙使用的防护技术:
1 拒绝服务攻击和安全防护
2 IP阻挡清单
3 速率控制
4 双层病毒扫描
5 用户自定义规则
6 垃圾邮件指纹检查
7 邮件意图分析
8 贝叶斯智能分析
9 基于规则的评分系统
10 解压缩文件的病毒防护
由于速率控制、病毒扫描以及解压缩文件的病毒防护针对病毒的,属于反垃圾邮件的附属功能我们暂不讨论,值得一提的是防火墙的防止DDOS攻击和反垃圾邮件防火墙防止DOS攻击是不一样的。根据博威特技术工程师的介绍:反垃圾邮件防火墙的防止DOS攻击主要是防止往一个邮件地址在一个较短的时间内发送大量的垃圾邮件,从而形成Dos攻击。
而针对垃圾邮件的核心技术有贝叶斯智能分析、垃圾邮件指纹检查、基于规则的评分系统、用户自定义规则,其核心是贝叶斯智能分析、垃圾邮件指纹检查技术。下面我们来逐一分析反垃圾邮件过滤技术:
1 垃圾邮件指纹检查
谈到对垃圾邮件的指纹检查,很多人觉得有些神秘,其实所谓邮件的指纹,就是邮件内容中的一些字符串的组合,又称为快照。就是从类似、但不相同的信息,识别其中已经被确认为垃圾邮件的信息。举例来说:如果您经常受垃圾邮件此地困扰一定对下面的词汇不会陌生:"代理服务"、"招生"、"现金",是不是在你一看到他们就不免联想到垃圾邮件呢?
其实这就是垃圾邮件的指纹,和反病毒技术的特征码识别的思想是共通的。反垃圾邮件防火墙通过识别类似、但不相同的信息,找出其中已经被确认为垃圾邮件的信息,最后完成对垃圾邮件的识别。
当然指纹检查的准确性依赖于垃圾邮件的指纹库,反垃圾邮件防火墙先给邮件中出现的每一个字符赋予一个数值,值得一提的是这个数值的确定是按照特定垃圾的用词规律特点进行分类,再利用统计方法然后再给这封邮件计算出一个综合的数值。也可以根据是否与其他多次收到的邮件相似来判定(多次收到相似的邮件很可能就是垃圾邮件)。
2 贝叶斯智能分析
贝叶斯智能分析的说法在我看来有赶时髦的嫌疑,主要是受上学时人工智能课程的毒害,和对智能字眼满天飞的视觉疲劳,毕竟一个技术如果能和智能挂钩的话,多少显得高深了不少。事实上这个智能分析就是一个统计学定律的应用而已,当然客观的说这个统计学的应用确实让反垃圾邮件聪明了不少。好了闲话说多了浪费大家时间,我们今天不讲贝叶斯定律,直接开始介绍贝叶斯反垃圾邮件算法,通过算法我们可以看出这个智能分析其实是将IP阻挡名单、垃圾邮件指纹检查、统计规律结合起来实现反垃圾邮件的智能分析。
贝叶斯反垃圾邮件算法如下:
1) 收集大量的垃圾邮件和非垃圾邮件,建立垃圾邮件集和非垃圾邮件集。
2) 提取邮件主题和邮件体中的独立字串例如 ABC32,¥234等作为TOKEN串并统计提取出的TOKEN串出现的次数即字频。按照上述的方法分别处理垃圾邮件集和非垃圾邮件集中的所有邮件。
3) 每一个邮件集对应一个哈希表,hashtable_good对应非垃圾邮件集而hashtable_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在hashtable_good中的值)
P2(ti)=(ti在hashtable_ bad中的值)
则 P(A|ti)= P1(ti)/[(P1(ti)+ P2(ti)];
6) 建立新的哈希表 hashtable_probability存储TOKEN串ti到P(A|ti)的映射
7) 至此,垃圾邮件集和非垃圾邮件集的学习过程结束。根据建立的哈希表 hashtable_probability可以估计一封新到的邮件为垃圾邮件的可能性。
当新到一封邮件时,按照步骤2)生成TOKEN串。查询hashtable_probability得到该TOKEN 串的键值。
假设由该邮件共得到N个TOKEN串,t1,t2…….tn,hashtable_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)超过预定阈值时,就可以判断邮件为垃圾邮件。
贝叶斯过滤算法举例
例如:一封含有"法轮功"字样的垃圾邮件 A和 一封含有"法律"字样的非垃圾邮件B 根据邮件A生成hashtable_ bad,该哈希表中的记录为:
法:1次
轮:1次
功:1次
计算得在本表中:
法出现的概率为0.3
轮出现的概率为0.3
功出现的概率为0.3
根据邮件B生成hashtable_good,该哈希表中的记录为:
法:1
律:1
计算得在本表中:
法出现的概率为0.5
律出现的概率为0.5
综合考虑两个哈希表,共有四个TOKEN串: 法 轮 功 律当邮件中出现"法"时,该邮件为垃圾邮件的概率为:
P=0.3/(0.3+0.5)=0.375
出现"轮"时:
P=0.3/(0.3+0)=1
出现"功"时:
P=0.3/(0.3+0)=1
出现"律"时
P=0/(0+0.5)=0;
由此可得第三个哈希表:hashtable_probability 其数据为:
法:0.375
轮:1
功:1
律:0
当新到一封含有"功律"的邮件时,我们可得到两个TOKEN串,功 律查询哈希表hashtable_probability可得
P(垃圾邮件| 功)=1
P (垃圾邮件|律)=0
此时该邮件为垃圾邮件的可能性为:
P=(0*1)/[0*1+(1-0)*(1-1)]=0
由此可推出该邮件为非垃圾邮件
反垃圾邮件防火墙和防火墙的关系
防火墙是一个广义上称呼,从实际应用的角度看防火墙是为了保护企业内部网络资源(如www服务器、文件服务器等等)免受外部安全威胁侵害的防护设备,通过设置不同的防护级别和防护措施对内部网络资源实行实施保护。根据它所防护的侧重点的不同,防火墙可以分为病毒防火墙,DDOS(分布式拒绝服务攻击)防火墙,垃圾邮件防火墙等等。
简而言之,反垃圾邮件防火墙是用来反垃圾邮件的专用防火墙。
防火墙从工作方式上来说都有一个共性:分析出入防火墙的数据包,决定放行还是阻断。在实际部署中,作为专用垃圾邮件防火墙可以放在普通防火墙的前面也可是防火墙的后面,建议放在后面在逻辑上保持和邮件服务器是串联的关系就可以了。
a)安装在防火墙的外面就要修改(或是增加)MX记录,是MX记录能够指向反垃圾邮件防火墙,如果有两条的话,指向反垃圾邮件防火墙的MX记录有优先级要调的高一些
b)安装在防火墙的里面要将SMTP的NAT记录指向反垃圾邮件防火墙此两种情况都不需要在服务器和客户端软件(outlookfoxmail等)做任何更改。