|
1 引言
sendmail是由Berkeley大學開發的電子郵件收發程序,屬免費軟件,大家可以從因特網上下載自由安裝。經過維護開發人員多年的努力,sendmail的平台適應性大幅度提高,可以運行在大多數UNIX和類UNIX主機上面,包括SunOS,HP-UX,IRIX,AIX,LINUX等。
對一般通信量的用戶來說,sendmail在不考慮宿主服務器性能的前提下,可以支持高達數萬個用戶的電子郵件通信服務,所以,sendmail對一般站點的郵件通信是完全可以勝任的。目前,它承當著大部分因特網上電子郵件的收發工作。
除了sendmail之外,當前使用中的郵件收發程序還有Netscape
Messaging Server, Microsoft Exchange Server, Lotus Domino Notes等,但是它們大多數都是商業程序軟件,應用范圍和影響都還遠沒有sendmail大。
電子郵件服務在WWW出現之前,一直是因特網上最為繁忙的服務,當前電子郵件的信息流量仍然是因特網上最重要的來源之一。作為電子郵件服務的承當者,sendmail的配置和安全運行直接關系到系統服務的提供和安全。
SMTP是因特網上計算機間傳送電子郵件的協議,而sendmail則實現了該協議中的服務器和客戶端兩部分的功能。它最簡單的功能就是將一台主機上某個用戶的郵件傳送到同一台主機上某個用戶的郵箱中,此時sendmail的功能看上去幾乎過簡陋了。但是隨著主機接入Internet,通信雙方的距離以及通信的內容等都開始變得千變萬化,此時sendmail需要查詢域名服務器來得到對方的IP地址,同時為了滿足用戶對電子郵件收發過程中的不同需求,配置文件也變得非常復雜,這些功能的增加使得sendmail程序很快地復雜起來,它的程序源碼變得很長。這種功能過集成的軟件設計成為以sendmail無窮無盡的漏洞的隱患。
作為系統安全防御的一種手段,當發現某個超級用戶身份運行的程序存在安全漏洞,並且暫時沒有相應的補丁時,可以臨時去掉該程序的超級用戶身份置位。但是,sendmail卻不同,它必須以超級用戶的身份運行才能提供服務,因此,上面這種辦法對sendmail行不通。同時其程序源碼在因特網上是公開的,對研究sendmail,尋找其中的安全漏洞並加以利用提供了巨大的方便。sendmail的配置也是系統應用軟件的配置中最為復雜的一例,它的運行還與域名系統的配置密切相關。上述各種因素都使得sendmail經常成為系統安全鏈條中的最為薄弱的一環,也是黑客攻擊的重要目標。針對sendmail的防守和攻擊也是一個長期的、高級的技術過程。
本文在面部分將介紹討論sendmail最近的版本升級情況以及版本升級直接解決的網絡安全問題,通過分析與sendmail有關的文件系統的安全和sendmail的安全特性,為系統管理員提出了一些安全配置方面的建議。
2 sendmail的版本升級
sendmail的版本升級非常頻繁。最近的幾次連續的版本升級分別是1997年10月24日發表8.8.8,1998年5月19日發表8.9.0,同年7月2日發表8.9.1,12月30日發表8.9.2,今年2月4日發表了8.9.3。每次sendmail版本的升級,不僅僅是功能上的提高,更重要的是新版本中改正了以前版本中的某些安全漏洞。例如,最新版的8.9不僅提供了用控制垃圾郵件和匿名轉發等的功能,還修改了對MIME內容的處理模塊,避免某些郵件客戶端在處理郵件時可能會出現的由分段錯而允許遠程攻擊者運行任意命令的安全漏洞。
對系統管理員來說,加強sendmail安全的最有效的辦法就是勤奮地工作,保持自己管理的系統中運行的是最新的版本,並參照有關文檔進行合理的配置。
通常情況下,可以通過telnet到主機的25號端口來判斷該主機使用的sendmail版本號。例如,
%telnet localhost 25
Connected to localhost.
Escape character is '^]'.
220 localhost.localdomain ESMTP Sendmail 8.9.2/8.9.2; Tue, 30 Mar 1999
12:26:10 +0800 (CST)
上述信息表明該主機運行的是sendmail8.9.2。版本號一般由被兩個圓點分開的三個數字組成。當前運行的絕大多數是sendmail
8.x.x,第三個數字的提高表示只有輕微的改進,所以也可以將其視為一種軟件補丁的等級。通常,"8.9"是指包括頭兩位數字是"8.9"的所有補丁等級,而"8.9.x"則只指某個特定的等級。
非常值得注意的是版本8.9對8.8的升級。1998年5月19日發表的sendmail
8.9.0比以前的版本(8.8.8或者更以前)在各個方面都有了很大的改進,尤其是安全相關方面的特性有了大幅度的增強。主要表現在以下幾個方面:
-
新版本中,按照缺省配置,sendmail8.9.0關閉了郵件轉發功能。在這裡,轉發的意思是:服務程序接收來自本域外的郵件並將其轉發至本域外某主機。隨意的轉發功能增加了郵件服務器的運行負擔,同時縱容和方便了垃圾郵件,騷擾郵件,郵件炸彈攻擊等的散發者和發起者,為網絡運行產生了許多不必要的投訴,增加了系統管理員的工作量。同時,通過對新版sendmail提供的多種功能特性的合理配置,管理員可以按照自己的需求和意願來有選擇地為某一部分用戶提供轉發服務,拒收已知的某些域,某一段ip,某些用戶的郵件,保護正常用戶不受郵件幹擾。
-
新版本中增強了屬性安全檢查功能,缺省配置下拒絕對不安全目錄(即允許組用戶甚至所有用戶可寫的目錄)中的forward文件以及:include:文件作任何操作,從而避免惡意用戶通過上述文件運行權限以外的程序,保証了sendmail的安全運行。
-
新版本的sendmail改正了對不安全目錄中的文件進行跟隨鏈接操作的安全漏洞。
-
對HELO/EHLO參數的長度進行了限制,這樣可以防止垃圾郵件或者惡意郵件散發者在郵件頭"received:"域中隱藏其連接。
其中,郵件轉發功能方面的改進非常重要。雖然在原來的8。8版本中,經過合理的配置(增加mail_check_relay,mail_check_rcpt等幾個ruleset)也可以限制郵件的轉發功能,並拒收黑名單上地址的郵件,但是對普通管理員來說,操作過復雜,不容易實現。因此,將sendmail升級到8.9.0以上版本是加強郵件管理、減少郵件幹擾的最為有效的途徑。
3 sendmail與文件系統安全
從版本8.6.5開始,sendmail引入了安全屬性檢查功能,並在以的版本中不斷增強,這表明了文件系統安全與sendmail安全運行的密切關系越來越受到大家的重視。所以,有些用戶發現,本來在8.8版本中允許的目錄和文件屬性,在升級到8.9版本時,sendmail卻拒絕運行。例如下面的操作:
#ls -al /etc/mail
drwxrwxr-x 2 root mail 512 1月 15 15:00 .
drwxr-xr-x 26 root sys 3072 3月 26 17:39 ..
-rw-r--r-- 1 bin bin 153 11月 25 11:36 Mail.rc
-rw-rw-r-- 1 root bin 1219 12月 25 10:39 aliases
-rw-r--r-- 1 root root 0 11月 25 13:02 aliases.dir
…
# newaliases
newaliases: cannot open /etc/mail/aliases: Group writable file
也就是說,對組可寫的/etc/mail目錄或者aliases文件做別名庫更新(#newaliases或者#/usr/lib/sendmail
-bi)時,會被sendmail拒絕。
下面所列的一些目錄、文件和sendmail安全直接相關,它們錯誤的文件屬性可能會導致sendmail的啟動失敗或別名(aliases)庫更新失敗。它們的功能、屬性分別是:
- / :根目錄在安全的許多方面至關重要。它在許多系統中是root的主目錄,允許其他普通用戶可寫會嚴重威脅系統的安全,例如可以通過創建.forward或者.rhosts等等輕易控制系統。因此root必須保持對該目錄的絕對控制。它的屬主應該是root,組也建議設為root,權限建議設置為755。
- /etc
:該目錄中保存著系統的大多數配置。例如resolv.conf定義了域名服務器的位置,nsswitch.conf定義了主機名的查詢次序等等,它們都與sendmail的運行直接相關。屬主應該為root,組為sys,建議也設為root,權限設置為755。
- /etc/mail :該目錄中保存著sendmail的主要配置文件。屬主應該為root,組缺省為mail,權限設置為755。
- /etc/mail/aliases
:該文件定義了主機郵件用戶的假名,通過假名的設置,管理員可以實現郵件列表、郵件轉發等功能。通過對假名設置的篡改,攻擊者可以執行主機的命令、查閱其它用戶的郵件等。該文件屬主為root,權限設置為644。
- /etc/mail/sendmail.cf :該文件是sendmail最重要、最直接的配置文件,內容包括sendmail運行所需的各種類、宏、選項、規則等的定義,非常復雜,往往只有經驗非常豐富的管理員才能對其進行完整地配置。該文件的損壞常常會導致sendmail不能運行,某些情況下只能重新安裝sendmail來產生該配置文件。該文件屬主應該是root,權限為644。
- /usr/lib/sendmail : 該文件是sendmail的執行程序,完成郵件的收發工作。如果該文件被攻擊者控制,則表明系統已經被完全攻克。建議該文件屬主設為root,權限設為4755。
- /var
:該目錄保存著系統中隨時間經常變化的文件和配置,例如,系統日志、用戶的郵件隊列等等。sendmail運行中報告的各種信息通常配置下都保存在目錄下(一般是/var/adm,或者/var/log等)。屬主應該是root,權限應該為755。
- /var/spool和/var/spool/mqueue
:它們在缺省配置下是保存郵件隊列的目錄,屬主應該是root,權限應該為755。
- ~/.forward
:該文件通常保存在用戶的主目錄下,定義了該用戶郵件的轉發操作。通過修改該文件,攻擊者可以以該用戶的身份執行主機上面的命令(前提是該用戶在/etc/passwd文件定義的shell出現在/etc/shells中)。例如,某用戶foo主目錄下的.forward文件內容如下:
\foo,"|/bin/touch /tmp/anyfile"
通過給該用戶發送一封電子郵件,達到了創建文件/tmp/anyfile的目的。系統管理員應該定期地檢查用戶所設的.forward的文件內容,或者通過配置/etc/shells文件和用戶的shell來達到禁止該用戶運行主機命令的目的。
4 sendmail的特性與配置
sendmail提供了許多在編譯期間選擇的功能特性。通常情況下,按照其缺省配置,即可滿足一般用戶的需要。但是,了解研究其提供的特性,可以實現對sendmail許多功能的更為準確的配置使用。從網絡安全的角度考慮,通過合理地配置有關特性,可以在提供服務和保証安全之間找到更為準確的平衡點(配置特性的方法是將需要的特性加入到相應系統的.mc文件中,然利用工具m4生成最終的sendmail.cf文件,具體操作詳見源程序包附帶的說明文件)。
和網絡安全相關的重要特性(FEATURE)有:
﹒ FEATURE(promiscuous_relay):該特性打開任意轉發功能,也即關閉8.9帶來的郵件轉發方面的安全增強控制。此特性的使用會對電子郵件服務的濫用留下許多隱患,建議除非特別情況,不要使用此特性。
﹒ FEATURE(accept_unqualified_senders):缺省情況下,該特性被關閉,即當MAIL
FROM:參數中的地址表明屬網絡連接,但是卻不包含合法的主機地址時,sendmail將拒絕繼續通信。打開此特性則不再根據MAIL
FROM:參數拒絕接收郵件。建議不可輕易使用該特性。
﹒ FEATURE(loose_relay_check) :通常情況下,當郵件使用了源路由功能,例如user%site@othersite,如果othersite屬轉發郵件的范圍,則sendmail將分離othersite,繼續檢查site是否屬轉發范圍.使用該特性將改變上述缺省操作.建議不要輕易使用該特性.
﹒ FEATURE(accept_unresolvable_domains) :通常情況下,當MAIL FROM:參數中的主機地址部分無法解析,即無法判定為合法主機地址時,sendmail將拒絕連接.使用該特性將改變上述操作.
在某些情況下,例如,郵件服務器位防火牆面,無法正常解析外部主機地址,但是仍然希望能夠正常接收郵件時,可能需要利用該特性.
﹒ FEATURE(blacklist_recipients)
:打開接收黑名單功能。接收黑名單可以包括用戶名、主機名、或其它地址。
﹒ FEATURE(relay_entire_domain) :缺省配置下,sendmail只為在轉發控制數據庫(access
db)中定義為RELAY的主機提供轉發郵件服務.
該特性的使用,將使sendmail為本地域內(由$=m類定義)的所有主機上面的用戶提供轉發功能。
5 結論
sendmail郵件程序是目前因特網上面應用最為廣泛的軟件之一.
由其程序設計上面的缺憾,其功能配置非常復雜,往往成為系統安全的隱患.正確合理地配置sendmail可以加強系統安全,減少系統管理員因為電子郵件服務帶來的不必要的工作量.及時地升級sendmail的版本並正確配置是減少sendmail安全漏洞的最為有效的方法.本文簡要分析了對sendmail進行及時升級的必要性,
介紹了最近版本升級在安全方面帶來的益處,以及在安裝配置sendmail過程中幾個重要特性的使用.
希望能夠為使用sendmail的管理員帶來一些幫助.其中不當之處,也希望大家能夠批評指正.
|