相信大家和我一样,在日常生活中收垃圾邮件也算是一份固定的工作了吧?收到垃圾信件后,如何追踪垃圾邮件发送者呢?很多朋友会毫不犹豫的说,当然是查出寄信人的IP了。其实,在对付垃圾邮件方面,主要有两种形式:防御与追踪。防御主要是强调对垃圾邮件的过滤或者是阻止垃圾邮件的产生,而追踪则强调主动地追查垃圾邮件来源,并对其进行警告或者采取其它措施。本文将主要介绍对邮件的追踪方面的技术,通过针对邮件头进行分析,并查询到最接近源头的地址,以揭开垃圾邮件发送者的“庐山真面目”。
邮件头及传输过程
首先,我们通过一次反垃圾邮件的测试来看看什么是邮件头。因为大多数情况下,服务器都会把寄信人的相关信息附在邮件的文件头。比如,利用Tom.com的免费邮箱,给spamemail@china.com.cn发一个邮件,然后进入http://mail.china.com.cn/邮箱,收到后打开看看(如图1所示):
javascript:resizepic(this) border=0>
图1
点击信箱上面的“邮件头信息”,可看到这样的信息:
Return-Path: <pwbpub@tom.com>
Delivered-To: spamemail@china.com.cn
Received: from 210.72.21.22 (HELO eqmanager2.china.org.cn) (envelope-from pwbpub@tom.com)
by mx.china.com.cn (quarkmail-1.2.1) with SMTP id S918541AbULBMFs
for spamemail@china.com.cn; Thu, 2 Dec 2004 20:05:48 +0800
X-scanvirus: By Sophos Scan Engine
X-scanresult: CLEAN
X-Received:unknown,202.108.255.195,20041202195628
Received: from unknown (HELO tom.com) (202.108.255.195)
by localhost with SMTP; 2 Dec 2004 11:56:28 -0000
MIME-Version: 1.0
Message-ID: <41AF02AE.000113.05427@bjapp25>
Date: Thu, 2 Dec 2004 19:55:26 +0800 (CST)
From: "=?gb2312?B?cHdicHVi?=" <pwbpub@tom.com>
To: spamemail@china.com.cn
Subject: =?gb2312?B?wKy7+NPKvP6y4srU?=
X-Priority: 3
X-Originating-IP: [211.99.190.5]
X-Mailer: 163net
Content-Type: Multipart/Alternative; boundary="Boundary-=_yvxueODEqwFokhipGevKzuojgYQF"
对方是从不同的邮件服务器上发来的,中间自然有转信过程,每转一次都会在文件头顶部加信息。下表列出了一部分表头的相关含义,对我们分析垃圾邮件具有事半功倍的效果。
From: 邮件从哪里发送的。很容易被伪造,在分析中,非常不可信任。
From 不同于From:域,这行并不通常是邮件头的一部分,但是邮件转发程序经常插入这一行,表明邮件什么时候被接收的。这一行总是邮件头的第一行,也可以被伪造,但并不一定。
Reply-To: 回复时发送的地址。很容易被伪造,但常常提供线索,比如有些垃圾邮件经常用该域指向一个合法的邮件地址,以便spammer能够接收到回复的邮件。
Return-Path: 与Reply-To:相同
Sender: 消息发送者。这通常都是伪造的
Message-ID: 邮件系统在创建邮件时的唯一标记。也是最容易被伪造的地方。正常情况下,“Message-ID:”能确定发送者所登录的系统,而不仅仅是创建邮件的系统。Message-ID 的结构同邮件服务器程序有直接关系,不同的邮件服务器产生的ID 也不一样,有时,相同邮件服务器的不同处理也会产生不一样的ID。多数邮件服务器会包含日期、时间、DNS等,有的甚至包含邮件用户信息。如0040409085748.91B1.SAN@test.com,就是由日期、时间、标识、邮件用户和DNS构成。
In-Reply-To: 在回复的时候可能存在,通常指向原邮件的Messgae-ID。
Received: 最可信赖的头。一般会有几条,形成站点列表,这些信息表明达到目的地过程中邮件所经过的服务器,该域都是邮件服务器自动插入的,spammer可以伪造,但是在被伪造的那个点之后的是无法伪造的。这个列表从下往上表明了服务器路径,最上面的一条Received:是最终目的的系统或邮件服务器。
通常的邮件传递主要步骤由下面过程完成:
Sender →MUA →MTA → (routing) → MTA →MDA →{filtering}→ MUA →receiver
脚本小子:MUA(Mail User Agent)表示邮件客户端程序,比如Foxmail、Outlook、Mutt等;MTA(Mail Transport Agent or Message Transfer Agent)表示消息传输代理,这部分程序负责存储和转发、发送E-mail,它从MUA或者其他的MTA 接收到邮件后,就存在于本地,并分析收件人或者转发到其他的MTA,在处理过程中,它通常会编辑、添加邮件头内容,比如Sendmail、Exchange等;MDA(Mail Delivery Agent)表示邮件发送代理,这个程序负责将邮件发送给用户,通常处理某种特定发送操作。
了解了这些环节,我们就可以顺藤摸瓜,探测垃圾发送者的老巢了。
垃圾邮件追踪实例
SMTP协议对我们来说,应该是再熟悉不过的了,但是,这个协议在创建的时候并没有考虑到未来的邮件会成为垃圾,因此安全性很差,邮件头可以任意创建、伪造和修改,而邮件服务器一般不检查发送者的内容,而只关心接收者。这就给了垃圾邮件发送者可乘之机,比如,通过Outlook就可以伪造邮件头。为了对付ISP监控垃圾邮件,这些垃圾邮件发送者通常用一些邮件程序将邮件转发到其他的邮件服务器,并且修改和伪造邮件头,避免被追踪。所以,我们现在的关键任务是识别伪造内容并获得真实信息,根据真实信息进行查询。
1.邮件头追踪
一般来说,邮件内容、Reply-to、最终邮件服务器的Received的内容都有助于我们追踪垃圾邮件的来源。对于“Received:”域来说,我们可以从时区出错、时间误差、IP地址错误这几个方面来追查。试想,一个邮件经过了几天甚至更长时间来传递,正常吗?下面就是一个修改了邮件地址和IP地址的邮件头:
Return-Path: <spamemail@test.com.cn>
Delivered-To: pwbpub@test.com
Received: from mail.test.com.cn (unknown [211.167.xxx.xxx])
by test.com (Postfix) with ESMTP id 590F2160A9 for<pwbpub@test.com>; Thu, 8 Aug 2004 16:48:46 +0800 (CST)
Received: from mail.test.com.cn ([127.0.0.1]) by localhost (mail[127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 30543-01 for<pwbpub@test.com>; Thu, 8 Aug 2004 16:47:14 +0800 (CST)
Received: from risker.debian.org (unknown [218.18.xxx.xxx]) bymail.test.com.cn (Postfix) with ESMTP id 32E0817DC17 for<pwbpub@test.com>; Thu, 8 Aug 2004 16:47:06 +0800 (CST)
Date: Wed, 5 May 2004 14:36:13 +0800
From: wlj <spamemail@test.com.cn>
To: pwbpub@test.com
Subject:
Message-Id: <20040505143613.25dd214b.spamemail@test.com.cn>
Mime-Version: 1.0
Content-Type: multipart/mixed;
X-Virus-Scanned: by amavisd-new at test.com.cn
上面的邮件头,明显经过了篡改,包括在MUA 发送邮件时添加的头内容和经过MTA过程中添加的内容。现在,关键的任务就是要检查“Received:”的传递过程了。
第一步:找到如下内容:
Received: from risker.debian.org (unknown [218.18.xxx.xxx]) by mail.test.com.cn (Postfix) with ESMTP id 32E0817DC17 for <pwbpub@test.com>; Thu, 8 Aug 2004 16:47:06 +0800 (CST)
仔细分析,我们可以看到,这是第一个MTA 从MUA 接收邮件时插入的头内容。MUA 的机器名是Risker.debian.org(这不是MUA 的DNS,而只是机器名),(unknown[218.18.xxx.xxx])表示该机器的IP地址,但是查询的DNS是unknown的。该邮件被mai.test.com.cn接收,邮件服务器采用Postfix,而且采用的是ESMTP(扩展的SMTP),分配的ESMTP id是32E0817DC17,传递目标是pwbpub@test.com,接收时间为Thu,6 May 2004 16:47:06,时区是+0800 (CST)。
第二步:查找第二个Received:内容。具体如下:
Received: from mail.test.com.cn ([127.0.0.1]) by localhost (mail[127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 30543-01 for <pwbpub@test.com>; Thu, 8 Aug 2004 16:47:14 +0800 (CST)
这是邮件服务器内部程序进行的一个处理过程,因此IP 地址为127.0.0.1,并且是Localhost处理,(amavisd-new, port 10024)表明这个处理程序是使用的Amavisd-new,amavisd-new是一个用于邮件服务器的杀毒、过滤等的接口。
第三步:查找第三个Received:内容。具体如下:
Received: from mail.test.com.cn (unknown [211.167.xxx.xxx]) by test.com (Postfix) with ESMTP id 590F2160A9 for <pwbpub@test.com>; Thu, 8 Aug 2004 16:48:46 +0800 (CST)
该过程表示邮件从服务器名为Mail.test.com.cn 传递出去,IP 地址为211.167.xxx.xxx,接收邮件的服务器是Test.com,采用Postfix服务程序,也通常使用的ESMTP,传递的目标是pwbpub@test.com,日期为Thu,8 Aug 2004 16:48:46,时区是+0800(CST)。
从这个例子可以看出,邮件的传递过程是:
risker.debian.org(MUA)→mail.test.com.cn(MTA)→localhost(MTA中的amavisd-new)→test.com(MTA)
整个过程经历了将近两分钟,不过,在追踪垃圾邮件过程中,这个传递过程中的Received:存在被篡改的可能,也就是说,发送者可能使用了“障眼法”,因此,要炼就一双火眼金睛,判断哪些信息是伪造的,哪些是真实的。对于Received:来说,最后的站点是接收者自己的邮件服务器,因此最后的Received是真实可靠的,除非自己的服务器已经不安全了。
2.垃圾广告邮件追踪
现在,垃圾广告邮件尤其猖獗。对于这类邮件来说,内容中有联系人、联系电话、联系Email、邮编等,追查就很直接。一个典型的此类邮件头内容如下:
Return-Path: <fault@spamemail.com>
Delivered-To: pwbpub@test.com
Received: from spamemail.com (unknown [221.232.11.40])
by test.com (Postfix) with ESMTP id 399521C124
for <pwbpub@test.com>; Mon, 24 May 2004 11:07:41 +0800 (CST)
From: "bbcss" <fault@spamemail.com>
Subject: =?GB2312?B?0KGxvrS0tPPStcrmtvmxptXQycw=?=
To: pwbpub@test.com
Content-Type: multipart/mixed;
boundary="=_NextPart_2rfkindysadvnqw3nerasdf";charset="GB2312"
MIME-Version: 1.0
Reply-To: reply@yahoo.com.cn
Date: Mon, 24 May 2004 11:07:45 +0800
X-Priority: 3
Message-Id: <20040524030745.399521C124@test.com>
现在来对该邮件进行简单的分析。首先找到这一段:
Received: from spamemail.com (unknown [221.232.11.40])by test.com (Postfix) with ESMTP id 399521C124 for <pwbpub@test.com>; Mon, 24 May 2004 11:07:41 +0800 (CST)
本例中,测试用的邮件服务器Test.com是可信的,因此这一条Received信息也是可靠的,但其中的一些内容可能并不是真实可靠的。邮件来自一个机器名为spamemail.com的,IP 地址为221.232.11.40,邮件接收时间是Mon, 24 May 2004 11:07:41 +0800 (CST)。简单检查Spamemail.com,可以得出IP地址为Spamemail.com [203.207.*.*],很容易可以知道这个spamemail.com只是一个名字而已。该邮件的发送者是From: "bbcss" <fault@spamemail.com>,而回复地址是:Reply-To:reply@yahoo.com.cn。实际上,我们就可以推测:fault@spamemail.com就是伪造的了,但是回复地址却可能是真实的;另外,他们肯定使用了一些垃圾邮件发送工具,能够伪造发送者地址、机器名,并且可以直接传递邮件。
3.追捕
经过上述分析测试,我们就可以得到一些有用的数据了。通过对邮件的分析,我们一般能够找到可能接近源头的某个邮件地址或者一个IP地址(这个IP地址可能是一个受害者),用这些信息来追查,依然存在很多难度,毕竟有些事情不是某个人可以完成的,但是却在某些特殊应用方面能够提供不小的帮助。现在,假如我们看到的信来自163.net服务器(bjmx4.163.net),再追下去是从263.net服务器发来的(smtp.x263.net),再下去是来自IVAN (unknown [218.70.*.*]),是谁呢?毫无疑问应该是寄信人了,他的IP就是218.70.*.*,用一个查地理地址最好用的软件“追捕”查查看(如图2所示):
javascript:resizepic(this) border=0>
图2
那就是来自重庆。通过很多优秀的工具,我们就可以来揭开对手的庐山真面目了。如果对方在聊天室或论坛上,我们怎样查到他的IP呢?其实也简单,下载一个孤独剑客的作品Iphunter,软件下载地址为http://www4.skycn.com/soft/1122.html,运行它后,就会把连接到你电脑的IP捕获下来,而让对方来连接你的电脑,当然要让他不知不觉的来连接,而最好的方法就是在聊天室或论坛上放一幅图片,图片的网址必须是你的IP,如 [img] /pic/8/2005-11-15-1615l.jpg [/img],只要对方看到这个(要吸引他的眼球),他的电脑就会自动来打开这个图,当然就会找到你的电脑上来,呵呵,正好中计,Iphunter就可以把他的IP捕获了!剩下的,就是要考虑一下怎么教训他了!