相信大家和我一样,在日常生活中收垃圾邮件也算是一份固定的工作了吧?收到垃圾信件后,如何追踪垃圾邮件发送者呢?很多朋友会毫不犹豫的说,当然是查出寄信人的IP了。其实,在对付垃圾邮件方面,主要有两种形式:防御与追踪。防御主要是强调对垃圾邮件的过滤或者是阻止垃圾邮件的产生,而追踪则强调主动地追查垃圾邮件来源,并对其进行警告或者采取其它措施。本文将主要介绍对邮件的追踪方面的技术,通过针对邮件头进行分析,并查询到最接近源头的地址,以揭开垃圾邮件发送者的“庐山真面目”。
邮件头及传输过程
首先,我们通过一次反垃圾邮件的测试来看看什么是邮件头。因为大多数情况下,服务器都会把寄信人的相关信息附在邮件的文件头。比如,利用Tom.com的免费邮箱,给spamemail@china.com.cn发一个邮件,然后进入http://mail.china.com.cn/邮箱,收到后打开看看(如图1所示):
图1
点击信箱上面的“邮件头信息”,可看到这样的信息:
|
对方是从不同的邮件服务器上发来的,中间自然有转信过程,每转一次都会在文件头顶部加信息。下表列出了一部分表头的相关含义,对我们分析垃圾邮件具有事半功倍的效果。
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监控垃圾邮件,这些垃圾邮件发送者通常用一些邮件程序将邮件转发到其他的邮件服务器,并且修改和伪造邮件头,避免被追踪。所以,我们现在的关键任务是识别伪造内容并获得真实信息,根据真实信息进行查询。