垃圾郵件的來歷和技術根源
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記錄指向反垃圾郵件防火墻此兩種情況都不需要在服務器和客戶端軟件(outlook\foxmail等)做任何更改。