網關終極武器:反垃圾反病毒之Bayesian貝葉斯過濾演算法

在反垃圾反病毒過濾器中,現在表現最好的應該是基於評分(score)的過濾器,評分系統過濾器是一種最基本的演算法過濾器,基本構成了貝葉斯演算法的雛形。

貝葉斯過濾演算法原理就是檢查垃圾郵件中的詞或字元等,將每個特徵元素(最簡單的元素就是單詞,複雜點的元素就是短語)都給出一個分數(正分數),另一方面就是檢查正常郵件的特徵元素,用來降低得分的(負分數)。最後郵件整體就得到一個垃圾郵件總分,通過這個分數來判斷是否spam。

這種評分過濾器盡量實現了自動識別垃圾郵件的功能,但是依然存在一些不適應的問題:

1、特徵元素列表通過垃圾郵件或者正常郵件獲得。因此,要提高識別垃圾郵件的效果,就要從數百郵件中來學習,這降低了過濾器效率,因為對於不同人來說,正常郵件的特徵元素是不一樣的。

Advertisements

2、獲得特徵元素分析的郵件數量多少是一個關鍵。如果垃圾郵件發送者也適應了這些特徵,就可能讓垃圾郵件更象正常郵件。這樣的話,過濾特徵就要更改了。

3、每個詞計算的分數應該基於一種很好的評價,但是還是有隨意性。比如,特徵就可能不會適應垃圾郵件的單詞變化,也不會適應某個用戶的需要。

貝葉斯理論現在在計算機行業中應用相當廣泛,這是一種對事物的不確定性描述,比如Google計算中就採用了貝葉斯理論。貝葉斯演算法的過濾器就是計算郵件內容中成為垃圾郵件的概率,它要首先從許多垃圾郵件和正常郵件中進行學習,因此,效果將比普通的內容過濾器更優秀,錯報就會更少。貝葉斯過濾器也是一種基於評分的過濾器。但不僅僅是一種簡單的計算分數,而更從根本上來識別。它採用自動建立特徵表的方式,原理上,首先分析大量的垃圾郵件和大量的正常郵件,演算法分析郵件中多種特徵出現概率。

Advertisements

貝葉斯演算法計算特徵的來源通常是:

l郵件正文中的單詞;

l郵件頭(發送者、傳遞路徑等);

l其他表現,比如HTML編碼(如顏色等);

l片語、短語;

lMeta信息,比如特殊短語出現位置等;

比如,正常郵件中經常出現單詞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%的垃圾郵件。大多數目前應用的反垃圾郵件產品都採用了這樣的技術。比如Rich firewall反垃圾安全網關中的貝葉斯過濾。

局限性和缺點

現行的很多採用過濾器技術的反垃圾郵件產品通常都採用了多種過濾器技術,以便使產品更為有效。過濾器通過他們的誤報和漏報來分等級。漏報就是指垃圾郵件繞過了過濾器的過濾。而誤報則是將正常的郵件判斷為了垃圾郵件。完美的過濾器系統應該是不存在漏報和誤報的,但是這是理想情況。

一些基於過濾器原理的反垃圾郵件系統通常有下面的三種局限性:

1、可能被繞過。垃圾郵件發送者和他們用的發送工具也不是靜態的,他們也會很快適應過濾器。比如,針對關鍵字列表,他們可以隨機更改一些單詞的拼寫,比如(強悍、弓雖悍、 強-悍)。Hash-buster(在每個郵件中產生不同的HASH)就是來繞過hash過濾器的。當前普遍使用的貝葉斯過濾器可以通過插入隨機單詞或句子來繞過。多數過濾器都最多只能在少數幾周才最有效,為了保持反垃圾郵件系統的實用性,過濾器規則就必須不斷更新,比如每天或者每周更新。

2、誤報問題。最頭痛的問題就是將正常郵件判斷為垃圾郵件。比如,一封包含單詞sample的正常郵件可能因此被判斷為垃圾郵件。某些正常伺服器不幸包含在不負責任的組織發布的block list對某個網段進行屏蔽中,而不是因為發送了垃圾郵件。但是,如果要減少誤報問題,就可能造成嚴重的漏報問題了。

3、過濾器複查。由於誤報問題的存在,通常被標記為垃圾郵件的消息一般不會被立刻刪除,而是被放置到垃圾郵件箱裡面,以便日後檢查。不幸的是,這也意味著用戶仍然必須花費時間去察看垃圾郵件,即便僅僅只針對郵件標題。

儘管過濾器技術存在局限,但這是目前最為廣泛使用的反垃圾郵件技術。(更多信息關注微信Richinfotech)

Advertisements

你可能會喜歡