SMTP服務器工作規(guī)程:
接收進來的消息。
檢查消息的地址。
如果消息的地址為本地地址,保存消息以便檢索。
如果是遠程地址,轉發(fā)該消息。
SMTP服務器功能同包路由器一樣,除了SMTP服務專用于郵件。大部分SMTP服務器可以按需要存儲以及轉發(fā)消息。
SMTP服務器在兩個不同任務上提出了安全要求:
保護服務器以免被攻破。必須給服務器加上防護盔甲防止外部進攻,如果外部進攻成功會使進攻者未經授權便能進入你的系統(tǒng)。
保護SMTP服務以免錯誤使用,例如外人利用你的電子郵件服務器發(fā)送假的郵件和垃圾。
在這當中第二項問題更為可怕。有些人不假思索地使用未受保護的SMTP服務器來向Internet郵件帳號轉發(fā)成千份的廣告。如果他們使用了你的機器就會使網(wǎng)絡負擔過重。
除非特別指明,否則LINUX在安裝時會把sendmail作為你的郵件傳輸代理。可以用telnet到端口25來觀察確定sendmail的版本。輸出結果的例子如下:
[jray@pointy jray] $ telent poisontooth.com 25
Trying 24.93.119.226…
Conneted to poisontooth.com.
Escape character is
220 pointy. poisontooth.com ESMTP Sendmail 8.9.3/8.9.3
→Sat, 10 Jul 1999 16:27:14-0400
這里可以看出pointy.poisontooth.com正在運行sendmail/8.9.3。
入侵者對sendmail發(fā)起攻擊主要是因為:
sendmail是公共服務,一旦它運行,任何人都能連接和使用它。
sendmail通常以root身份運行。因此如果入侵者發(fā)現(xiàn)了一個可利用的漏洞,就可獲得優(yōu)先級高的訪問權限。
sendmail非常難配置,入侵者因此假設你會在安裝中出問題(通常都成功)。 以下是一些典型的sendmail攻擊:
首先是MIME緩沖溢出漏洞。這種攻擊不影響sendmail本身,而是sendmail發(fā)送郵件的客戶。在這里,sendmail是工具而不是目標。計算機緊急反應小組是這樣描述該攻擊的:
攻擊者向一個脆弱的系統(tǒng)發(fā)送一個精心設計的郵件消息,在某種情況下,攻擊者選擇的代碼會在該系統(tǒng)上執(zhí)行。另外,攻擊者可以是脆弱的郵件程序突然崩潰。根據(jù)郵件客戶正在運行的操作系統(tǒng)以及有問題的郵件客戶程序的用戶權限,攻擊都可以使整個系統(tǒng)崩潰。如果一個權限高的用戶用一個容易受攻擊的郵件用戶代理來閱讀郵件,那么攻擊者就可以獲得進入系統(tǒng)的管理權限。
再來看一下HELO緩沖溢出。在早于sendmail8.9的版本中,攻擊者可以利用HELO命令傳送非正常長度的字符串來偽裝自己的發(fā)起的地址。如果一個攻擊者發(fā)送HELO后面有至少1024字節(jié)的abc,那么消息頭會如下所示:
From attacker@attack.place.net Web Feb 5 22 31:51 1998
Received: from abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcab→abcabcabcabcabcabc
Date: Wed, 5 Feb 1998 12:32:22 +0300
From attacker@attack.place.net
非正常字符串隱藏了應正常顯示發(fā)信者IP地址的信息。這種攻擊方法,盡管不具危險,但攻擊者可以利用它讓sendmail轉發(fā)郵件垃圾和創(chuàng)建難以跟蹤的郵件。
還有口令文件/Root訪問,這是一個更可怕的攻擊,它影響的是sendmail8.8.4。本地用戶可以利用鏈接來獲得root訪問。這種攻擊方法依賴于sendmail在/var/tmp/dead.letter后保存未投遞的消息。
所有用戶都可對/var/tmp進行寫操作,因此本地攻擊者可在/etc/passwd和/var/tmp/dead.letter間創(chuàng)建一個硬鏈接。然后向sendmail服務器發(fā)送一個不能投遞的消息。在該消息體內,攻擊者插入可被加到口令文件的一個用戶帳號。
當消息標記為不可投遞,就會加到/var/tmp/dead.letter里面,而在/var/tmp/dead.letter有一個與/etc/passwd的硬鏈接。這就導致產生一個擁有Root權限的新系統(tǒng)帳號。
Sendmail作為一個突出并且訪問頻繁的服務器,經常是攻擊的目標。最近的一個攻擊方法集中在sendmail報頭解析代碼上的一個漏洞。通過創(chuàng)建有大量TO:報頭的消息,進攻者可使服務器停止運行。這種攻擊方法對sendmail8.9.2和更早的版本有效,因此連最近安裝的sendmail也受到影響。