深度剖析 Qmail郵件系統(tǒng)的安全分析和改進研究
本文首先指出了著名的開源郵件系統(tǒng)Qmail在安全方面存在的問題,并借用UNIX系統(tǒng)上現(xiàn)有的安全工具對Qmail現(xiàn)存的安全隱患加以解決,接著介紹了一種比Base64編碼效率更高的Base91編碼技術(shù)對郵件編碼進行改進。最后利用實驗室的平臺基本實現(xiàn)了該高速、簡潔、安全的郵件系統(tǒng)。
引言
郵件服務(wù)是Internet中使用率僅次于WWW的服務(wù),一個郵件服務(wù)器主要包括三個主要的功能:郵件傳輸代理MTA(Mail Transport Agent),郵件分發(fā)代理MDA(Mail Delevery Agent),郵件用戶代理MUA(Mail User Agent)。前兩者是核心模塊,負責郵件收發(fā)和處理。
Qmail是全球安裝使用量僅次于Linux/Unix上缺省安裝的的Sendmail的郵件服務(wù)器軟件,到目前為止Qmail的MTA依然是世界上轉(zhuǎn)發(fā)速度最快的郵件傳輸代理[1],Qmail幾乎兼容所有的Linux/Unix類操作系統(tǒng)。由于在Linux/Unix類型的操作系統(tǒng)中,Sendmail被缺省安裝,所以其使用量在該領(lǐng)域位居首位,但是其配置煩瑣,而且僅僅支持單文件(/var/spool/mail/$USER)方式存儲用戶所有郵件,導(dǎo)致郵件收發(fā)僅能串行處理,效率低下,而且一旦存取該文件出錯,用戶的全部郵件將丟失。而Qmail支持以目錄的形式管理用戶的郵件[3]($HOME/Maildir),在數(shù)據(jù)安全和存取速度上比前者都有明顯的優(yōu)勢。Qmail的整體模塊如圖1[2]所示,主要由MTA、MDA、MUA三大部分組成。
由于體系結(jié)構(gòu)比X.400 MHS(Message Handling System)體系簡單,而且是基于TCP/IP協(xié)議,SMTP(Simple Mail Transfer Protocol)已成為事實上的郵件協(xié)議標準,由于該協(xié)議設(shè)計過于簡單,其報文在網(wǎng)絡(luò)上用明文方式傳輸,給網(wǎng)絡(luò)監(jiān)聽者帶來了極大的方便,Qmail系統(tǒng)的MTA協(xié)議用的就是SMTP,郵件在傳輸途中很容易被截獲。
目前的Internet上垃圾、反動、病毒郵件泛濫,Qmail在設(shè)計時對這三個方面的安全問題考慮不足。
本文針對上述的問題,結(jié)合新的編碼技術(shù)和UNIX系統(tǒng)現(xiàn)有的一些安全工具對其加以研究、改進。
1 問題的提出
垃圾郵件、反動郵件和病毒郵件是目前對所有郵件用戶最大的威脅。從框架圖來看,qmail的MTA和MDA中沒有任何對郵件的檢測和過濾的措施,無疑對上述安全問題沒有任何防護能力。
1.1針對垃圾郵件
Qmail缺省不支持對Smtp用戶的認證,這就是說,任何能訪問該Qmail服務(wù)器的用戶均能利用它來向任何地址發(fā)送郵件,對于那些想利用郵件列表發(fā)布郵件廣告的商人,或想借他人主機發(fā)送大量攻擊性郵件的黑客來說,其可以被輕而易舉地被拿來直接達到目的。事實統(tǒng)計90%的垃圾郵件是從那些打開了開放性轉(zhuǎn)發(fā)(Open Relay)權(quán)限的服務(wù)器發(fā)出的。
1.2針對反動、色情郵件等非法郵件
反動、色情郵件主要是指郵件的內(nèi)容中有違反國家法律的反動信息和黃色信息,這些信息通常也是使用郵件列表進行傳播,其性質(zhì)較商業(yè)廣告垃圾郵件惡劣,對社會產(chǎn)生很大的負面影響。Qmail沒有任何基于內(nèi)容的過濾模塊,不能攔截該類郵件。
1.3針對病毒郵件
病毒郵件是指攜帶了病毒體的郵件報文,該類郵件一般通過附件來攜帶病毒文件,如果要過濾該類惡意郵件,要求MTA、MDA、MUA三個模塊中至少有一個模塊擁有病毒查殺模塊,Qmail設(shè)計中沒有考慮到這一點,這也是Qmail系統(tǒng)存在的一大安全問題。
1.4針對報文的明文傳輸
基于SMTP協(xié)議的Qmail直接進行郵件收發(fā)對報文僅僅進行了簡單的編碼,對于郵件體甚至沒有進行任何編碼,利用網(wǎng)絡(luò)竊聽工具可以輕易獲取郵件內(nèi)容,圖2是用著名的網(wǎng)絡(luò)竊聽器ethereal截獲的郵件報文,從中我們知道這封郵件收發(fā)人的郵件地址、發(fā)送使用的MDA、編碼方式、郵件體的類型、和信件的所有內(nèi)容。如果有附件,我們可以根據(jù)已知的編碼方式對其進行反編碼獲得最后的原始文件,所以毫無保密性可言?! ?/P>
1.5針對用戶的管理
Qmail設(shè)計成和操作系統(tǒng)共用用戶,UNIX操作系統(tǒng)的用戶數(shù)據(jù)庫是一個文件,缺省為/etc/passwd文件,隨之帶來的問題就是添加郵件的用戶必須同時添加一個系統(tǒng)用戶,因為對于服務(wù)器來說多一個系統(tǒng)用戶就等于系統(tǒng)多一個可以被用來入侵的途徑,就等于要多耗費一個用戶配置文件的存儲空間,這將主要導(dǎo)致安全隱患和系統(tǒng)資源的浪費。
1.6針對訪問權(quán)限的控制
Inetd是UNIX操作系統(tǒng)用來調(diào)用一些基本服務(wù)如Ftp、Telnet的特殊守護進程,Smtp和Pop(Post Office Protocol)協(xié)議也可以用其來啟動,Qmail在沒有第三方工具的支持時僅能使用Inetd來調(diào)用。隨Inetd帶來的問題就是不能控制訪問郵件服務(wù)的IP地址的范圍,在已知非法用戶或惡意攻擊者的IP地址的情況下,不能拒絕對他們提供服務(wù),對服務(wù)器安全不利。
2 現(xiàn)有的基于UNIX的安全工具
UNIX系統(tǒng)下有很多開放源代碼的軟件包,他們一般由很多程序員自發(fā)組織進行開發(fā)。在安全領(lǐng)域,已有很多流行軟件包可以解決Qmail存在的大部分安全問題。
2.1密碼認證工具
2.1.1 checkpassword
是一個基于/etc/passwd進行認證的工具,第三方的程序可以將其作為和系統(tǒng)用戶數(shù)據(jù)庫進行交互的代理,對系統(tǒng)用戶進行認證操作。
2.1.2 cmd5checkpw[4]
cmd5checkpw是一個和checkpasswd兼容的支持CRAM-MD5算法進行認證的工具。只要支持checkpasswd進行系統(tǒng)用戶認證的程序均可以使用其來支持CRAM-MD5算法對數(shù)據(jù)進行信息摘要,防止密碼被盜取。
2.1.3 vchkpw
vchkpw是Vpopmail工具集中一個認證工具,
2.1.4 qmail-Smtp-auth[5]
qmail-Smtp-auth是Mrs.Brisby開發(fā)的讓Qmail支持Smtp認證的補丁程序的升級版本,后者僅僅支持基于LOGIN方式的認證,前者加入PLAIN和CRAM-MD5認證機制并且還支持認證方法的后續(xù)添加。
2.2傳輸過程的加密工具
2.2.1 OPENSSL[6]
OPENSSL是由全世界自愿者開發(fā)的開放源代碼的SSL(Secure Sockets Layer)協(xié)議的實現(xiàn)工具集,其支持SSL v2/v3和TLS v1(Transport Layer Security)協(xié)議并擁有一個非常強大的密碼庫。
SSL[7]是一個用將用戶數(shù)據(jù)用非對稱加密方法加密后在互聯(lián)網(wǎng)上進行安全傳輸?shù)膮f(xié)議,使用該協(xié)議能很好地杜絕竊聽者用嗅探器抓取信息明文的事件發(fā)生。
2.3訪問控制工具
2.3.1 Ucspi-tcp[8]
Ucspi-tcp是一個基于UNIX的用來給網(wǎng)絡(luò)應(yīng)用程序提供安全TCP連接的程序,主要包括服務(wù)模塊(tcpserver)和客戶模塊(tcpclient)兩個部分,其中在服務(wù)器模塊中具有訪問控制特性,此特性允許對客戶端的訪問權(quán)限進行限制。
2.4用戶管理工具
2.4.1 vpopmail
Vpopmail是UNIX上的一個創(chuàng)建和管理郵件虛擬域(Virtual Domain)的工具包,包括管理虛擬域、管理用戶的工具和密碼認證模塊,它可以使一個郵件服務(wù)器提供多種“@domain”給用戶選擇,并且支持用數(shù)據(jù)庫來存儲和認證用戶。
2.4.2 Mysql數(shù)據(jù)庫[9]
Mysql是一個全世界使用最多的開源數(shù)據(jù)庫軟件,其運行方式是Server-Client方式,目前基于UNIX的大型應(yīng)用程序均對其支持,包括前面提到的Vpopmail工具包。
#p#
3 問題的分析解決
3.1問題的分析
Qmail產(chǎn)生安全問題的關(guān)鍵在于其僅僅是一個出色MTA和MDA,其僅僅實現(xiàn)了郵件服務(wù)器的基本功能,在于沒有考慮到現(xiàn)實網(wǎng)絡(luò)中的安全問題。利用上面介紹的一些工具,可以把Qmail在安全方面的漏洞一一補全。
3.2 問題的解決
3.2.1針對垃圾郵件的解決方案
qmail-Smtp-auth是針對qmail開放性轉(zhuǎn)發(fā)無法關(guān)閉的漏洞設(shè)計的補丁,使用這個補丁生成的Smtpd守護進程要求郵件發(fā)送者不能直接發(fā)送郵件,必須在發(fā)送時同時提供有效的用戶名和密碼。不過該補丁無法提供用戶身份鑒別功能,所以它必須結(jié)合一個密碼驗證工具作為和用戶驗證數(shù)據(jù)庫之間的代理。
在前面介紹的密碼驗證工具中checkpassword結(jié)合cmd5checkpw作為驗證代理能提供對Linux/Unix的系統(tǒng)用戶進行認證,基于這種方式進行認證的系統(tǒng)允許Linux/Unix操作系統(tǒng)內(nèi)部用戶使用Smtp發(fā)送和轉(zhuǎn)發(fā)郵件;另外一種更好的密碼驗證方法在安裝了vpopmail后可以使用,該方法的用一個可以從Mysql數(shù)據(jù)庫取出用戶數(shù)據(jù)來進行驗證的工具vchkpw來實現(xiàn),該工具比checkpassword好在可以讓Qmail的用戶數(shù)據(jù)不局限于用操作系統(tǒng)的系統(tǒng)用戶,增強了用戶認證的靈活性、安全性和高效性。
3.2.2針對反動、色情郵件等非法郵件
針對這個問題,還很少見現(xiàn)成的基于UNIX的工具可以支持對郵件的內(nèi)容進行過濾,所以在這里本文僅能提一些設(shè)想。
從圖1我們可以看到,在框圖的上部分Qmail的MTA負責把收到的郵件放入排隊隊列,之后排隊程序按照郵件的目的地址決定郵件發(fā)往本地郵箱目錄存儲還是發(fā)往下一個郵件服務(wù)器。在這個排隊隊列的處理程序中,可以加入一些基于文本、圖像、聲音、視頻等內(nèi)容過濾的程序代碼,從而實現(xiàn)對非法郵件的過濾。
3.2.3針對病毒郵件
對付病毒郵件的方法和前面的基于內(nèi)容的過濾方式基本上相同,不過在排隊過程中,郵件必須通過殺毒軟件的檢測,由于殺毒軟件本身涉及龐大的病毒庫,一般直接使用由殺毒軟件公司提供的模塊是比較可行的方案。
3.2.4針對報文的明文傳輸
前面提到的SSL是專門用來對TCP協(xié)議的數(shù)據(jù)報進行用非對稱密碼進行加密傳輸。SMTP是運行在TCP協(xié)議之上的應(yīng)用層協(xié)議,自然可以借助SSL來杜絕明文數(shù)據(jù)傳輸。在UNIX環(huán)境下,借助OPENSSL可以免費地獲得這種服務(wù)。
3.2.4針對用戶的管理
為了節(jié)約系統(tǒng)資源、增強安全性和提高效率,應(yīng)該盡量避免使用系統(tǒng)用戶來作為郵件用戶,vpopmail工具集提供的豐富的用戶管理工具,利用vadduser、udeluser、vpasswd、vadddomain等工具可以輕松地增減郵件用戶、修改密碼和增減虛擬域,而且支持絕大多數(shù)的數(shù)據(jù)庫,包括最著名的開源數(shù)據(jù)庫軟件Mysql。
3.2.5針對訪問權(quán)限的控制
由于Qmail缺省借用Inetd來同外界進行TCP連接,不能對來訪的IP地址進行限定,導(dǎo)致安全隱患諸多。所以必須借助目前UNIX中廣泛使用的TCP連接工具Ucspi-tcp來建立連接,其中的服務(wù)器模塊tcpserver可以設(shè)定deny、allow等參數(shù)來拒絕和允許來訪IP地址。
3.3針對性能的一些改進
由于SMTP的傳輸機制是以7bit的二進制編碼的ASCII字符為基礎(chǔ)的,雖然SMTP擴展允許發(fā)送8bit的二進制數(shù)據(jù),但是有一些非Internet網(wǎng)關(guān)是不能夠正確處理的。因此要確保二進制信息在傳輸過程中的完整性必須先對其進行編碼[10]。目前最常用的編碼是quoted-printable和base64編碼,前者主要針對非附件部分的文本進行編碼,后者主要針對附件進行編碼。由于base64是把6比特二進制數(shù)據(jù)用一個字節(jié)的ASCII碼來表示,其帶寬利用率僅僅為0.75,效率比較低,增加了網(wǎng)絡(luò)的負擔。現(xiàn)在一種名為base91[10]的新編碼方法已在1999被西南交通大學的何大可教授提出了,該編碼使用了92(包括空格)個可打印字符作為映射集,把輸入的消息比特切分為13比特的分組作為映射源,編碼的源字節(jié)數(shù)比較大(大于64K)的時候其編碼的帶寬利用率接近于81.25%,比base64提高了大約6個百分點,所以在對附件(一般大于64K)的編碼方案上base91是Qmail比base64更好的選擇。
3.2.4對Webmail的支持
Webmail是web和mail結(jié)合的產(chǎn)物,其作用是提供一個基于Web界面的MUA,用戶可以登陸郵件服務(wù)器的網(wǎng)站來收發(fā)自己的信件,Qmail沒有Webmail模塊,這部分單獨進行開發(fā)很容易,后臺可以選用PHP、JSP、ASP、CGI等流行動態(tài)網(wǎng)頁編程語言,它們都有相關(guān)函數(shù)對用戶進行認證和對用戶郵箱目錄進行存取并結(jié)合數(shù)據(jù)庫管理郵件用戶的所有數(shù)據(jù)。
3.4 安全郵件服務(wù)器的實現(xiàn)
依照前面的分析,在本文的最后對上述的設(shè)想在作者本人實驗室的服務(wù)器上加以了實現(xiàn)?! ?/P>
該系統(tǒng)運行的操作系統(tǒng)平臺為Freebsd[11], Webmail平臺為Apache服務(wù)器,數(shù)據(jù)庫選擇了Mysql,使用Openssl作為TCP傳輸加密軟件。
從圖3我們可以看到,外部服務(wù)器和客戶端(因為對于本服務(wù)器它們都相當于客戶角色,后面統(tǒng)稱客戶)通過Tcpserver來和本服務(wù)器連接并進行Smtp傳輸, 利用Tcpserver的allow、deny等命令參數(shù)可以限定客戶的IP地址范圍。在建立連接后,轉(zhuǎn)向qmail-smtpd-auth模塊進行認證,qmail-smtpd-auth借助vchkpw來用加密的方式將客戶提供的用戶名和密碼與Mysql數(shù)據(jù)庫進行對比認證,當認證通過后,客戶的郵件報文被放入郵件隊列等待處理。在這個階段,可以加入基于文本、圖像、聲音或視頻的過濾模塊對郵件進行過濾,也可以放置病毒查殺模塊對帶病毒郵件進行處理,合法的郵件將由qmail-send模塊根據(jù)郵件目的地址判斷是轉(zhuǎn)交給郵件外發(fā)模塊還是存儲到本地郵箱目錄,在郵件外發(fā)模塊qmail-remote將Base64編碼方法替換成為Base91,提高了編碼效率。
郵件用戶在發(fā)送郵件的時候可以用基于Smtp的客戶端工具也可以直接使用Webmail,前者的流程剛才已經(jīng)介紹過了,后者的認證依靠Webmail同Mysql用戶數(shù)據(jù)庫進行交互來判斷用戶是否合法,合法的郵件由qmail-inject模塊交付qmail-queue進入郵件隊列,接下來的過程同基于smtp的發(fā)送流程一致。
郵件用戶再收取郵件的時候可以使用Webmail和基于Pop協(xié)議的客戶程序,前者在用戶通過驗證后根據(jù)用戶名去讀取該用戶的郵件信息然后用Web頁面的方式反饋給用戶。后者首先用vchkpw來驗證用戶,然后通過Pop協(xié)議把該用戶郵件下載到用戶機本地磁盤上保存。
經(jīng)過安裝和運行,基本上驗證了該系統(tǒng)的安全性,由于沒有龐大的用戶群來做重負荷測試,對該系統(tǒng)的運行速度和負荷能力還未能測試,但官方的資料顯示Qmail在16MB內(nèi)存486/66級別的機器上擁有日發(fā)7萬封郵件的能力[12]?;镜陌踩珕栴}已經(jīng)解決,如果在過濾和殺毒方面如果能加以很好實現(xiàn),這將是一個非常完善的系統(tǒng)。
通過文章的分析和研究,我們可以清楚的知道如何實現(xiàn)Qmail安全性高,希望對大家有所幫助!
【編輯推薦】