今天使用最广的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 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
非正常字符串隐藏了应正常显示发信者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也受到影响。