2012年9月25日 星期二

嚴重犯規!談郵件過濾與垃圾信犯規手法

嚴重犯規!談郵件過濾與垃圾信犯規手法

為什麼郵件過濾設定好了卻老是過濾不到東西?其實是垃圾信廠商實在太會鑽了,而您用的郵件過濾軟體又不夠強的緣故。

垃圾信過濾的技術領域當中,內容過濾是透過郵件的標題,寄件人,收件人,以及本文的內容文字,來判斷一封電子郵件訊息是否屬於垃圾信

此種方式碰到極大的一個挑戰,就是文字編碼的問題,在 RFC-2822 (電子郵件訊息格式規範) 制定時,法定了電子郵件的 Header 部分只可有 7bit ACSII 字元,目前我們看到的中文的郵件標題,收件人,寄件人等等這方面的文字,也都是放置在 Header 之內,您肯定也發現了,這些 8bit 中文字是怎麼放進去的呢,原來是透過 RFC-2047 以及 RFC-2231 所規定的編碼方式將 8bit 文字轉為 7bit,透過這種方式,所有電子郵件的 Header 部分都可以被轉為 7bit 並且支援各種語言,此類編碼方式有一個特色,也就是他保持了編碼方式的關鍵字,讓郵件軟體可以輕易地判斷出編碼是屬於哪一種,例如 utf8 或是 big5。

接著就是研究郵件本文的部分了,郵件本文的部分則是透過 MIME 的方式,類似 HTTP 所使用的 Header,來告知本文的編碼方式,但對於內容過濾領域來說,郵件本文不光是要注意文字編碼 "charset" 還得注意到 "encoding",通常一段較複雜的文字會先以 base64 或是 qp 的方式做 encoding,要過濾本文必須先解開 encoding,解開 encoding 之後還必須再判斷其編碼 charset,若是內容為 html 格式,在郵件本文中可能又包含了完整的 html,裡面可能在 http-equivlent 的 meta 部分再去宣告文章的 charset。

不管標題還是本文,郵件過濾器都必須確實的知道其編碼,並且轉換為 unicode 才能夠與設定的關鍵字做比對,若過濾軟體不支援 unicode 想想除了 big5 的東西之外你都過濾不到,那這樣的過濾器根本沒有什麼用。

解釋清楚原理之後,我們就可以了解到垃圾信廠商的手法了!目前郵件過濾有兩大宗流派:

※ 所有郵件一律當作垃圾,只有放行少數被設為非垃圾條件的信件
※ 所有郵件一律放行,只擋掉被過濾掉的垃圾信

當防垃圾策略使用的是第二種的時候,垃圾信手法就可以得逞了,它們的目的就是要你的郵件過濾器根本無法過濾這封信件,最終導致放行,以下是它們常用的策略

※ 郵件 Header 中的寄件人,收件人,主旨文字故意直接使用 big5 中文,不宣告其編碼
※ 郵件內文區塊的 MIME 宣告部分,故意不指定郵件文字編碼 charset,改在郵件內文的 html http-equivlent 之內宣告,而又把 html 以 base64 編碼起來

相信精明的您又有了一個問題,連郵件過濾都過濾不到了,這些非標準的郵件,在郵件軟體如 Outlook 中,看得到東西嗎?

還真的看得到,因為郵件軟體的用戶群眾太廣了,它們的設計理念必須是盡可能的讓一封郵件去顯示出來,因此它們必須透過種種的線索去猜出這封不正常郵件的編碼,如此一來就讓垃圾郵件商得逞了,郵件過濾器濾不到,但郵件軟體看得到!

因此,在選擇郵件過濾軟體的時候,最好要注意以下幾個關鍵點:

※ 是否能解碼各種非 RFC-2822 標準的垃圾郵件手法?
※ 是否能以 UNICODE 設定關鍵字過濾?

轉載自《EVO郵件伺服器 技術團隊》