觀點

ANTI-SPAM技術剖析

2005 / 11 / 04
高銘鍾
ANTI-SPAM技術剖析

防治垃圾郵件氾濫的難處
垃圾郵件(SPAM)的問題日益嚴重,但至今仍無一針見血的防範或者是過濾機制,有許多的人會問:「難道沒有辦法像防毒軟體一樣,使用防垃圾郵件軟體,就讓我的垃圾郵件一掃而空嗎?」很遺憾的,事情並不如想像中容易。試著思考一下,甚麼樣的信件對您來說是SPAM呢?不請自來的信?病毒信?還是不需要的廣告信?朋友轉寄來的冷笑話?心情不好時不想看的信?其實這些都有可能,那麼請把你定義下的垃圾郵件與你的朋友或家人討論看看,或許對他們來說,部份不請自來的郵件還讓他們買到了特價商品了呢!當然,在此不是要強調垃圾郵件的好處,只是垃圾郵件它有時候並不像病毒郵件般,完全沒有人希望收留它!(當然病毒研究員例外!)這點,也造成了無法「絕對」判斷出垃圾郵件的盲點之一,因為垃圾郵件有一定的主觀性。
另一個盲點就是,現今許多流行的垃圾郵件,其實跟一般郵件並無太大的差別。舉個簡單的例子:我認為對我推銷東西就是垃圾郵件,我有個很久不見的朋友,他可能剛從事某項商品買賣,為了推廣他的產品,他很簡單的寫了一封信與我連絡並寒暄了一下,最後希望我支持一下他推廣的產品。對我來說,這已經算是垃圾郵件了,但他與一般好友的來信並無異!對於RFC及通訊協定的基本的規範上,垃圾郵件也只是一般的電子郵件!
由此看來,面對垃圾郵件的議題不就束手無策了嗎?事實上還未到達如此不樂觀的地步,因為垃圾郵件發送技術也存在著許多無法擺脫的特性,藉這些特性我們才有機會透過技術層面,將垃圾郵件濾除。


垃圾郵件的特性
在更進一步了解所有垃圾郵件防堵原理前,讓我們先了解垃圾郵件與一般正常的通信郵件有哪些差異:
1.垃圾郵件之所以存在,是因為有雇主(Sponsor)希望透過此一方式進行低成本的行銷,所以發垃圾郵件者必須滿足低成本這個要求,故垃圾郵件的計價通常都是需達一定程度的大量,甚至要保證有效開信率,才能夠向雇主索取費用。所以垃圾郵件必須要「大量且自動發送」,才能符合成本效益。
2.再者,發送後不能輕易被管理者追蹤,否則就必須面對法律問題,所以變換IP防止被檢舉,或是以被木馬入侵電電腦、設定不良有Open Relay問題的郵件伺服器進行轉送或代發垃圾郵件,都是「偽造來源」的好素材。
3.也不能太容易被收件者看穿,否則容易遭到封鎖或直接被刪除,就不容易達到有效開信率,所以「偽造寄件者或內容」,可以瞞騙或吸引一般收信者閱讀。同時也容易突破一些偵測軟體的防線。
4.為了避免收信者收到垃圾郵件不進行回覆或購買,無法統計開信率,所以於其中偷夾帶一些不法連結,當收信者所使用的收信軟體(MUA)並不是很安全時,就容易在預覽該垃圾郵件時,不知不覺的贊助幫了垃圾郵件發送者一個大忙。

發信連線的阻絕
在阻止垃圾郵件入侵的方法中,若能在垃圾郵件發出前進行阻絕,會是最有效率的辦法。一般來說,若能夠鎖定發送垃圾郵件的來源,直接利用防火牆鎖住該IP或是利用郵件伺服器本身的黑名單功能,就能將之封鎖。但要掌握有效且固定的垃圾郵件來源確不是那麼容易的事,所以也可以引用第三方搜集的RBL(Real-Time Black List)。透過查詢RBL資料庫可查詢某一個IP的A紀錄是否曾是發送垃圾郵件的來源,若是,則不允許該來源送信,可視為一種相當方便的第三方黑名單。但使用RBL有許多缺點,如台灣及中國大陸許多網段,可能都直接遭到部份國外的RBL直接封鎖,若貿然引用不適合的RBL會導致收信不正常。
除了依靠黑名單,也可以利用垃圾郵件大量發送的特性,當送信量或是連線數突然異常高過可接受的值,就直接予以暫停、暫時封鎖或永遠阻絕,這樣的機制,能防址過多信件或連線造成伺服器過於繁忙而拒絕服務(Denial of Service,DoS)。

垃圾郵件的判斷
發信連線的阻絕雖然是最有效率的,但發信連線的阻絕未必能全面撲殺垃圾郵件,垃圾郵件仍可能產生而闖入。這些闖入的垃圾郵件因信件本體已經產生,包含的資訊相較於發信連線時僅能獲得的IP、Domain、寄件者、收件者還要多,因為它還具備了完整的信件標頭(Header)及本體(Body),若我們可以得知這其中有任何特徵、關鍵字或是發信習慣等,則我們可以條件或運算式來判斷垃圾郵件並加以隔離或刪除。這些判斷的方式有下列幾種:
1. 固定的條件:如果垃圾郵件很單純,且有固定的規則或條件可循,如:固定某個寄件者、同種主旨、信件內容的固定的某段字、同個IP來源,甚至是交叉的條件,如:某主旨跟IP同時成立的話等,就可設定固定的過濾方法加以攔阻。進階的運用,也可搭配正規表示法(Regular Express)阻絕規則可被類推的垃圾郵件,如:垃圾郵件的主旨為re:[1]、re:[2]圪..re:[112]?。
2.貝氏演算法:貝氏演算法通常搭配一定量的中性規則,並投入垃圾郵件及非垃圾郵件,分別交予貝氏演算法進行「訓練」,並產生適當的機率規則自動分辨出垃圾郵件與正常郵件!只要投入分析的郵件量越大,且越逼近現況,貝氏演算法的準確度就越高。但貝氏演算法所整理出的資料庫並非一通用法則,而是僅適合「當下及當時的環境」,為確保它的攔截精確度,例行性的訓練是不可或缺的。
3.內容過濾技術:透過掃描垃圾郵件的一些關鍵字詞、所夾帶URL、Header特性等方式,與包含這些特徵的資料庫進行比對,藉此判斷出垃圾郵件的可能性,為內容過濾方法的應用。若希望提升對垃圾郵件的判斷能力,則除了比對之特徵資料庫需定時更新外,比對引擎的速度及取辭斷字的方法也是一項關鍵因素。
4.外部資料庫引用:Razor─主要的功能為取比對郵件中不當字詞、垃圾郵件字詞隨機取樣、編\解碼判斷、防誤判(false positives)、附件檔案分析及多引擎判斷,再配合多方搜集垃圾郵件特徵回報資料,可建立即時更新的指紋資料庫。
DCC(Distributed Checksum Clearinghouse)─它的理念在於強調,用戶應收取他們願意收的郵件,以「白名單」的觀念,透過多個用戶回報收到的電子郵件加密程式碼(或稱分數)。DCC伺服器及用戶端不停的相互更新回報,對於進來的郵件會在郵件標頭(Header)的部份標上一個累加回報總分數,當進來的郵件不符合DCC白名單資料庫並且超過限定的分數,就會被丟棄或拒收。
Pyzor─與Razor相同,但它是開放原始碼的軟體,使用者可自行架設獨立的資料庫。
5.SPF、Domain Keys及Sender ID等認證防偽方法:
SPF(Sender Permitted From)─一般的MX Record所儲存的是這個網域有哪些合法的郵件伺服器,而SPF則可以讓網域管理者對外公布哪個IP位址才是該網域合法的寄件伺服器。當收到一封新信件時,郵件伺服器先至DNS查詢SPF記錄,以確定該信件是否真的由信件中所宣稱的域名寄出,若不是,則很可能是假冒的。目前已有數千個網域公布了這項記錄。但若有個合法的Domain並一樣透過SPF流程對外公布某個IP位址才是發信的,只能確定沒有偽造來源,但卻還是能發送垃圾郵件。
Domain Keys─網域管理者先產生一對公鑰放在DNS伺服器上,用來驗證郵件的網域,而私鑰放在郵件伺服器上,所有由該郵件伺服器寄出的電子郵件都加以簽章。寄出信件時,合法的使用者所寄出的信會被郵件伺服器以私鑰簽章,附在信件上。當收件者的郵件伺服器收到時,會先從信上所宣稱的網域的DNS伺服器取得公鑰並驗證簽章,確定信件的確是從該網域所寄出而非偽造的。這樣的做法可用以避免許多垃圾郵件常偽造網域的特性,但如果是真的從該網域發出的垃圾郵件就沒辦法了,所以對於有Open Relay問題的郵件主機,這個方法一樣無法阻絕垃圾郵件來犯,且目前有採Domain Keys認證的主機不多,所以大多數的電子郵件伺服器還是得接收沒有Domain Keys認證的電子郵件。
Sender ID─其基本原理與SPF是一樣的,由微軟所公布。

未來趨勢及結論
其實,防堵垃圾郵件的方法相當多,除了上述方法,也有各家防垃圾郵件公司自行開發出來的獨到技術及資料庫,各有其優缺點。一般實用的防堵技術多採混合方法,並以多層次判斷技術,融合各種偵測方法的優點,並減低缺點所帶來的漏洞,以達到高攔截率及零誤判的效果。當然,垃圾郵件的發送技術及防禦技術不停的演進中,也有些技術有重大漏洞而面臨淘汰,所以一般垃圾郵件防堵工具的開發,就好似防毒軟體一般,可能都需要有「線上更新」的能力,才能比較即時且省力的攔阻垃圾郵件。垃圾郵件的氾濫與日劇增,採用了好的防範機制只是讓您「看不到」垃圾郵件,但它依舊於網路中消耗不必要的頻寬及困擾無辜的收件者,要消弭這個問題,唯有垃圾郵件發送的贊助商必須明白,垃圾郵件這種不當的行銷方式並不是不需要成本,而是將成本轉嫁於他人或是社會,因此選用行銷方式需三思。