今天使用最廣的E-mail傳輸協議是簡單郵件傳輸協議(SMTP)。每天,SMTP用於傳輸成千上萬的E-mail消息到世界各地。 SMTP服務器工作規程很少: 接收進來的消息。 檢查消息的地址。 如果消息的地址為本地地址,保存消息以便檢索。 如果是遠程地址,轉發該消息。 SMTP服務器功能同包路由器一樣,除了SMTP服務專用於郵件。大部分SMTP服務器可以按需要存儲以及轉發消息。 SMTP服務器在兩個不同任務上提出了安全要求: 保護服務器以免被攻破。必須給服務器加上防護盔甲防止外部進攻,如果外部進攻成功會使進攻者未經授權便能進入你的系統。 保護SMTP服務以免錯誤使用,例如外人利用你的電子郵件服務器發送假的郵件和垃圾。 在這當中第二項問題更為可怕。有些人不假思索地使用未受保護的SMTP服務器來向Internet郵件帳號轉發成千份的廣告。如果他們使用了你的機器就會使網絡負擔過重。 除非特別指明,否則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發起攻擊主要是因為: sendmail是公共服務,一旦它運行,任何人都能連接和使用它。 sendmail通常以root身份運行。因此如果入侵者發現了一個可利用的漏洞,就可獲得優先級高的訪問權限。 sendmail非常難配置,入侵者因此假設你會在安裝中出問題(通常都成功)。 以下是一些典型的sendmail攻擊: 首先是MIME緩沖溢出漏洞。這種攻擊不影響sendmail本身,而是sendmail發送郵件的客戶。在這裡,sendmail是工具而不是目標。計算機緊急反應小組是這樣描述該攻擊的: 攻擊者向一個脆弱的系統發送一個精心設計的郵件消息,在某種情況下,攻擊者選擇的代碼會在該系統上執行。另外,攻擊者可以是脆弱的郵件程序突然崩潰。根據郵件客戶正在運行的操作系統以及有問題的郵件客戶程序的用戶權限,攻擊都可以使整個系統崩潰。如果一個權限高的用戶用一個容易受攻擊的郵件用戶代理來閱讀郵件,那麼攻擊者就可以獲得進入系統的管理權限。 再來看一下HELO緩沖溢出。在早於sendmail8.9的版本中,攻擊者可以利用HELO命令傳送非正常長度的字符串來偽裝自己的發起的地址。如果一個攻擊者發送HELO後面有至少1024字節的abc,那麼消息頭會如下所示: From
[email protected] Web Feb 5 22 31:51 1998 Received: from abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcab→abcabcabcabcabcabc Date: Wed, 5 Feb 1998 12:32:22 +0300 From
[email protected] 非正常字符串隱藏了應正常顯示發信者IP地址的信息。這種攻擊方法,盡管不具危險,但攻擊者可以利用它讓sendmail轉發郵件垃圾和創建難以跟蹤的郵件。 還有口令文件/Root訪問,這是一個更可怕的攻擊,它影響的是sendmail8.8.4。本地用戶可以利用鏈接來獲得root訪問。這種攻擊方法依賴於sendmail在/var/tmp/dead.letter後保存未投遞的消息。 所有用戶都可對/var/tmp進行寫操作,因此本地攻擊者可在/etc/passwd和/var/tmp/dead.letter間創建一個硬鏈接。然後向sendmail服務器發送一個不能投遞的消息。在該消息體內,攻擊者插入可被加到口令文件的一個用戶帳號。 當消息標記為不可投遞,就會加到/var/tmp/dead.letter裡面,而在/var/tmp/dead.letter有一個與/etc/passwd的硬鏈接。這就導致產生一個擁有Root權限的新系統帳號。 Sendmail作為一個突出並且訪問頻繁的服務器,經常是攻擊的目標。最近的一個攻擊方法集中在sendmail報頭解析代碼上的一個漏洞。通過創建有大量TO:報頭的消息,進攻者可使服務器停止運行。這種攻擊方法對sendmail8.9.2和更早的版本有效,因此連最近安裝的sendmail也受到影響。