匿名(垃圾)邮件的根源[原创]

发表于:2007-06-08来源:作者:点击数: 标签:
匿名(垃圾)邮件的根源 ——网络上几乎所有服务器都不可避免的“漏洞” 作者:刘宏光(iceblood) E-Mail:[email protected] 日期:2003-1-19 我的一点思考:大家在看到这篇文章的小标题的时候,或许很多人都知道了这个“漏洞”,而有的人在看文章的过程中,知

匿名(垃圾)邮件的根源
                                     ——网络上几乎所有服务器都不可避免的“漏洞”
作者:刘宏光(iceblood)
E-Mail:[email protected]
日期:2003-1-19
我的一点思考:大家在看到这篇文章的小标题的时候,或许很多人都知道了这个“漏洞”,而有的人在看文章的过程中,知道这个“漏洞”,也有的人或许会惊诧,因为小标题好像说得太过严重,不过不管看这篇文章的人是什么样的水平,或什么样的心理,我的目的只是把网络上这个缺陷进行一个更细节的介绍,因为我相信,只有大家都看到了这样的“漏洞”,网络才会慢慢的改善,才会有进步。
发送匿名邮件在Inte.net上已经是一个古老的话题,很多电子邮件服务器的管理员都采取了很多措施来防止匿名邮件的发送,比如:IP漫游记录,SMTP认证等,并且取得了相当不错的效果,但是近日通过我对发送邮件的过程的追踪,尽管有了以上方法能防止一部分人发送匿名邮件,但实际上仍然可以畅通无阻的发送的匿名邮件,这种漏洞到目前为止应该是100%的邮件服务器的通病,并且是无法避免的“漏洞”,这主要是因为现在的SMTP服务的不完善造成的,实际上很多发送垃圾邮件的工具,其原理也就是我在这篇文章里所介绍的原理。目前国内的邮件服务器应该都有这样的漏洞,包括网易、新浪、搜狐等大型网站都无法逃脱,假如这几大网站的管理员看到了这篇文章,有兴趣的话,可以跟着我来测试。
首先我来简单的说一下电子邮件传送的原理,假定自己的邮件服务器的DOMAIN为cdefg.com,要发送一封 [email protected] 的电子邮件,电子邮件的正常的传送都需要靠DNS的MX纪录来查找对应服务器的的IP地址,然后再开始发送邮件,同理cdefg.com邮件服务器会查找 abcd.com 的邮件纪录,然后把邮件发送到 abcd.com所对应的IP地址,假设找到了xxx.xxx.xxx.xxx这个IP,并且xxx.xxx.xxx.xxx有smtp服务,这时服务器会连接到xxx.xxx.xxx.xxx的25号端口(SMTP服务所监听的端口),并且把邮件发送进去。
说到这里或许有很多人等不急了吧?好了,让我开始介绍“漏洞”吧,Internet上的任何服务器都会无条件的接受匿名邮件、垃圾邮件,任何人的电子邮件也都可以被伪造,或许有些人惊诧的想,能伪造所有的?他们是如何做到的?可能也有人说这不是漏洞,只是邮件传输的机制。但这确实能对Internet构成很大的威胁,比如伪造电子邮件,网络上伪造一个人的电子邮件实在太简单,它不象现实中的书信,能看笔迹。而在网络,所有的笔都是键盘,唯一能进行识别的就是数字认证,但在经济还不发达的我国,想要每个人都拥有数字认证,是非常困难的事,所以只有完善SMTP服务才是最好的办法。
网络上是如何实现这个匿名邮件、伪造邮件发送的过程的呢?很简单,我来给大家介绍,比如伪造 [email protected] 给 [email protected] 发送一封电子邮件,首先由于要给 [email protected] 发送邮件,所以先找要到这个邮件地址的SMTP服务器,在命令行下使用nslookup这个小工具很快就能查出来,如下:
C:\>nslookup
Default Server:  ns.hncsptt.net.cn
Address:   202.103.96.68   //开始运行nslookup,并且默认的DNS服务器为该IP地址。
>set type=mx    //设置显示类型为MX纪录。
>domainname.com    //查询domainame.com 的MX纪录。
domainname.com    MX preference = 10, mail exchanger = mail.domainname.com
mail.domainname.com     internet address = xxx.xxx.xxx.xxx
>exit
很快通过上面的命令就查出了domainname.com这个域的STMP服务器地址为xxx.xxx.xxx.xxx
好了,让我们继续,
C:\>telnet xxx.xxx.xxx.xxx 25
会出现:
220 mail.domainname.com
在这里也可能是别的,因为可能默认域不是domianname.com的域,而且其他的,但不管这些,你只要看到220这个数字就行了。
现在再接着输入命令:
HELO domain.com
返回:
250 mail.domainname.com Hello [x.x.x.x]
这里表示和邮件服务器握手成功,其中x.x.x.x就是你的IP地址。
好了,我们冒充的最关键地方开始了:
MAIL FROM: [email protected]
250 OK
这里告诉服务器,我们将用 [email protected] 这个电子邮件来发送这封电子邮件,很可惜任何的SMTP服务器都不会验证这个电子邮件的真实性,所以这里就被服务器给认可了,于是服务器返回250 OK,表示接受,继续等待下面的命令。
RCPT TO: [email protected]
250 OK
告诉服务器邮件发送给 [email protected] ,但是服务器在这里仅仅只检查domainname.com这个域是不是在自己的转发列表里,由于我们是直接查的dommainname.com这个域的SMTP服务器,所以当然也绝对会在列表了,所以服务器的返回OK,而不会做更多的验证。
DATA
354 Start mail input; end with <CRLF>.<CRLF>
这里输入DATA,告诉服务器要开始输入邮件内容了,邮件服务器会返回354信息,以及上面说的邮件以“.”结束。
开始输入邮件内容了,但一般邮件都会有邮件头,为了更真实的伪造邮件,我们可以按下面的输入:
From: [email protected]    //让Outlook,foxmail等这样的客户端工具显示发送者为 [email protected]
To:[email protected]    //同样让客户端工具显示接收者为 [email protected]
Subject: send anonymous mail       //邮件主题
Test                        //邮件内容,这里想怎么写就怎么写了。
.                //最后输入一个“.”结束邮件。
250 send OK
服务器返回250,说邮件发送成功,这时你就成功的冒充 [email protected] 给 [email protected] 发送了一封邮件,不过如果对方看邮件头,能看到你的IP地址,可是很可惜的是100%以上的电子邮件用户根本就不会在乎发送电子邮件的人的IP是什么的,而且更多的人是没有这样的专业知识,所以他们只能凭邮件内容来辨别真伪,可是又有多少人很快的想到他现在看的这封邮件是一封伪造的呢?同样的既然能伪造邮件,自然也就能发送匿名邮件了,因为都是同一个方法。而网络上所使用的那些专门发送匿名邮件,以及广告邮件用的工具软件,所利用的原理基本都是这样。
看到这里大家也都知道了吧,只要你知道谁的电子邮件地址,然后根据邮件地址的域,查出SMTP服务器,就能很快的给他发送一封匿名的电子邮件,或伪造的电子邮件,因为所有的SMTP服务器都不会去验证发送者是真还是假,而服务器对于发送到它自己的用户的所有邮件,也不会做任何的验证,这就是SMTP服务的不完善,而导致了这样一个非常严重的“漏洞”,也正是这个漏洞,使得网络上的垃圾邮件,广告邮件越来越猖狂,可以说是匿名(垃圾)邮件的根源。
声明:利用文章所介绍的技术发送恶意的垃圾邮件、伪造邮件是违法的,文章中发送邮件的内容仅供网络管理员参考使用,请勿做其他用途,否则后果自负!!

 littlebob 回复于:2003-03-04 14:27:58
我试了啊。。。对网易,新浪,21cn,163.net都不行啊。。。但是在我自己的邮件服务器上好使啊。。。。。。完了。。。郁闷了。。。。。

 littlebob 回复于:2003-03-04 15:41:33
那我应该怎么办呢?smtp对本域又没有作用。。。我是菜鸟。。。

 quicksand 回复于:2003-03-04 17:35:08
不过,SMTP这样也并不一定就是坏事,我以前还用你现在说的这个方法验证SMTP是否是正常的。

 tutux 回复于:2003-03-04 19:33:48
[quote:3905e6a712="iceblood"]
这里表示和邮件服务器握手成功,其中x.x.x.x就是你的IP地址。
好了,我们冒充的最关键地方开始了:
MAIL FROM: [email protected]
250 OK
这里告诉服务器,我们将用 [email protected] 这个电子邮件来发..........[/quote:3905e6a712]

RFC没有要求在“HELO domain.com ”时检查此时的domain.com的ip地址是否client连接服务器的地址,也不会试图对client地址反解来验证client地址是否对应domain.com,有一些补丁可以做这两件事;问题在于,很多smtp server的ip没有反解的,这样很多的信就会被拒绝~哎~~

 solarisfan 回复于:2003-03-05 05:59:17
为了增强Sendmail服务器的安全性,禁止用户telnet 到端口25作vrfy ,and expn操作。可以更改sendmail.cf如下: 
O PrivacyOptions=authwarnings change to: 
O PrivacyOptions=authwarnings,noexpn,novrfy

 wangrujun 回复于:2003-03-05 16:26:25
不好意思要打击楼主一下。
楼主在哪里看了最简单的smtp协议的入门的东西,很多概念没清楚,就乱说一气。

匿名发信和垃圾邮件是两回事!

邮件中继和接收匿名邮件也是两回事!
系统管理员要防止的是自己的邮件转发被打开而不是别的。

如果垃圾邮件厂商用自己的邮件服务器发送邮件,那是可以查出的。我们要做的是不要openrelay!

防范垃圾邮件的关键在于立法,其次才是技术。

本文行文象是科普文章,那么只要用一句话就可以了:outlook的帐号设置的常规选项中,用户电子邮件地址是可以随意设置以隐藏用户信息的。

希望本文不要加精,否则会被笑死

 iceblood 回复于:2003-03-05 20:39:16
如果垃圾邮件厂商用自己的邮件服务器发送邮件,那是可以查出的。我们要做的是不要openrelay! 


      就这一句话我也不怕打击你一下,我的文章说的是最简单的原理,文章里的有些东西聪明的人,变通一下,可以让整个网络混乱,我也不会把最有危害性的一面直接写出来,而你却还是井底之蛙,单纯得就知道不要openrelay。谁打击谁还不知道呢。

 seabillow 回复于:2003-03-06 08:31:59
RFC就没有一个补救的措施吗?
也学学micro打个补丁也行呀

 wangrujun 回复于:2003-03-06 10:53:52
[quote:5806785fa6="iceblood"]如果垃圾邮件厂商用自己的邮件服务器发送邮件,那是可以查出的。我们要做的是不要openrelay! 


      就这一句话我也不怕打击你一下,我的文章说的是最简单的原理,文章里的有些东西聪明的人,变通一下,可以让?.........[/quote:5806785fa6]

呵呵,楼主生气了。
对于有关smtp的东西,我只能说我阅读过 rfc821和rfc1869,对它有一定了解。
互联网上的知识太多,楼主说我一句井底之蛙,我想也是实话。

但是我对您的帖子的看法还是没有变,它最多只算是科普性的东西。给内行人看太浅;给外行人看又容易误导。

关于垃圾邮件的讨论,已经不是一年两年了。大部分垃圾邮件,你都能找到是谁在做广告,从内容看他们都不是匿名的,而且会留下详细的联系方法。立法是第一要素已经是公认的原则。技术只是追查来源,确认证据。

所以在我们这个专业论坛里,我还是建议取消精华。如此而已。

 wangrujun 回复于:2003-03-06 10:56:42
另外我之所以在mail服务器而不是系统安全的论坛中发这个贴(虽然您在两边都置了精华),我是觉得这边的人气比较少,所以和您讨论这个事情。对您个人没有什么意见。您本来也是好意才写的文章。

 polo 回复于:2003-03-06 12:04:13
你举的例子是没有加smtp验证和允许第三方relay的情况吧。
如果telnet到自己的邮件服务器上,telnet 0 25端口是发信是不需要smtp验证的,telnet ip 25这样是需要验证的。
而且现在防止垃圾邮件的目标是阻止收到大量的垃圾邮件,而不是阻止被别人利用发垃圾邮件(当然也很重要)。

 wangrujun 回复于:2003-03-06 15:18:55
[quote:e17f095b28="polo"]你举的例子是没有加smtp验证和允许第三方relay的情况吧。
如果telnet到自己的邮件服务器上,telnet 0 25端口是发信是不需要smtp验证的,telnet ip 25这样是需要验证的。
而且现在防止垃圾邮件的目标是阻止收到大量..........[/quote:e17f095b28]

对,目标是不要收到大量邮件。这个问题的对策是立法。其次如果所有的邮件服务器都不让垃圾邮件转发,垃圾邮件商必须建立自己的邮件服务器来发送邮件。这样我们比较容易找到垃圾邮件商的证据。

互联网本来的目的不是以安全为第一的,以此来说明smtp有漏洞实在太不公平,协议在一开始就不是以认证为目的。而且rfc891在1982年就出版了。那时候中国正在做什么呢?

 leaper 回复于:2003-04-03 22:03:41
TO : 风支使者

这个文章在好多地方都发过了,没办法,懂的人太小了,其它按文章的方法,现在是行不通过的,当然要作一下高明的变通一下,还是可以发的。。。
将就一下吧,说明这是不对就行!!!

 w3hx 回复于:2003-04-14 09:49:53
我测试了我们的服务器,也有这个问题,虽然装了smtp认证。有什么办法解决吗?我们已经上了黑名单了,头痛

 emylekao 回复于:2004-11-18 12:32:42
是啊是啊。不管怎么样,这总是一个问题吧。有什么办法能够解决呢?

 platinum 回复于:2004-11-18 13:57:24
这样的方法可以匿名发送
[code:1:a46b71a0c1]
[root@server /]# telnet 192.168.0.1 25
Trying 192.168.0.1...
Connected to test.kmip.net (192.168.0.1).
Escape character is '^]'.
220 test.kmip.net ESMTP
helo
250 test.kmip.net
mail from:<[email protected]>
250 ok
rcpt to:<[email protected]>
250 ok
data
354 go ahead
Date: Sun, 14 Nov 2004 15:50:44 +0800
From: "test" <[email protected]>
To: "postmaster" <[email protected]>
Subject: test
asdf
asdf
asdf
.

.
250 ok 1100756873 qp 1688
quit
221 test.kmip.net
Connection closed by foreign host.
[root@server /]#
[/code:1:a46b71a0c1]
不过smtp.sina.com.cn就不可以,他们做了mail from auth

 emylekao 回复于:2004-11-18 14:13:28
有什么办法可以解决吗?

 love100 回复于:2004-11-18 15:53:09
晕晕晕晕晕晕晕晕晕晕晕晕晕晕晕

 北京野狼 回复于:2004-11-18 17:05:18
[quote:3d15aa9163="iceblood"]
这里表示和邮件服务器握手成功,其中x.x.x.x就是你的IP地址。
好了,我们冒充的最关键地方开始了:
MAIL FROM: [email protected]
250 OK
这里告诉服务器,我们将用 [email protected] 这个电子邮件来发..........[/quote:3d15aa9163]


你好象从另外一个世界来的,你说的根本就是不可能的事情。


创作精神可嘉

 emylekao 回复于:2004-11-18 18:23:30
楼上什么意思?我测试过了,可以这样做的啊。
你说的不可能是什么意思??

 北京野狼 回复于:2004-11-18 22:07:31
[quote:b77350b9e5="emylekao"]楼上什么意思?我测试过了,可以这样做的啊。
你说的不可能是什么意思??[/quote:b77350b9e5]


那是在你的机器上可能,你没加smtp认证

 platinum 回复于:2004-11-18 22:38:31
[quote:67d3e90692="北京野狼"]


那是在你的机器上可能,你没加smtp认证[/quote:67d3e90692]
你可以随便找一个SMTP服务器,然后用匿名的mail from给他本域的机器发信试试
(新浪除外)

就连MIRAPOINT都可以

 北京野狼 回复于:2004-11-18 23:01:40
[quote:88d2a9b5d4="platinum"]
你可以随便找一个SMTP服务器,然后用匿名的mail from给他本域的机器发信试试
(新浪除外)

就连MIRAPOINT都可以[/quote:88d2a9b5d4]

不用试,各大门户网站,几年前就不能了。
真是孤陋寡闻

 platinum 回复于:2004-11-19 01:24:29
[quote:ae04c8933e="北京野狼"]

不用试,各大门户网站,几年前就不能了。
真是孤陋寡闻[/quote:ae04c8933e]
他们是怎么做的呢?

 北京野狼 回复于:2004-11-19 09:55:18
[quote:116e97a3a0="platinum"]
他们是怎么做的呢?[/quote:116e97a3a0]


SMTP认证

 platinum 回复于:2004-11-19 11:30:37
SMTP认证已经做了,给外域的邮件需要EHLO,但是给本域发信就不用
这个是怎么做的

 chris_wan 回复于:2004-11-19 13:09:17
是啊,我也想知道给本域发信的认证方法!

 iceblood 回复于:2004-11-19 13:13:58
[quote:d1e74797d2="北京野狼"]


你好象从另外一个世界来的,你说的根本就是不可能的事情。


创作精神可嘉[/quote:d1e74797d2]
一年前的文章居然被翻出来了。还真是难得。
这位叫“北京野狼”的先生,请问你需要布什或拉灯的电子邮件吗?把你的邮件地址给我,我让他们每人发一封给你。如何?嘿嘿~
当然前提是你的电子邮件服务器只做了这篇文章发表日期前的SMTP认证。也就是SMTP OPEN RELAY认证。

 emylekao 回复于:2004-11-19 13:24:02
楼上能说说怎么解决这个问题吗?

 iceblood 回复于:2004-11-19 13:30:13
一般来说目前有两个方法。
一个是SMTP的MX验证+白名单。
我觉得这个是效果最好的了。
另外一个就是目前用得比较广泛的黑名单。

 北京野狼 回复于:2004-11-19 15:31:01
[quote:7bc50be31a="iceblood"]
一年前的文章居然被翻出来了。还真是难得。
这位叫“北京野狼”的先生,请问你需要布什或拉灯的电子邮件吗?把你的邮件地址给我,我让他们每人发一封给你。如何?嘿嘿~
当然前提是你的电子邮件服务器只做了这篇文..........[/quote:7bc50be31a]


神经病

 北京野狼 回复于:2004-11-19 15:35:27
[quote:8d5912f1a2="platinum"]SMTP认证已经做了,给外域的邮件需要EHLO,但是给本域发信就不用
这个是怎么做的[/quote:8d5912f1a2]

smtp认证早就不分什么外域和本域。你只要连接smtp服务器在
hell之前必须先auth,提供你的用户名和密码。

 emylekao 回复于:2004-11-19 16:01:14
楼上说的还是有问题,qmail.org上的netqmail-1.05至少没有做到这点。不过,还想加一个补丁就可以。我安装了toaster的补丁以后,可以实现给本地发信件也需要验证的功能。

 北京野狼 回复于:2004-11-19 17:30:54
[quote:e9fc728531="emylekao"]楼上说的还是有问题,qmail.org上的netqmail-1.05至少没有做到这点。不过,还想加一个补丁就可以。我安装了toaster的补丁以后,可以实现给本地发信件也需要验证的功能。[/quote:e9fc728531]

qmail本身当然都没这功能。

 iceblood 回复于:2004-11-19 18:46:02
[quote:2d1b2bda9a="北京野狼"]


神经病[/quote:2d1b2bda9a]
说话文明点!!自己看不明白别人说的,就别在这里人身攻击!

 emylekao 回复于:2004-11-20 08:55:14
[quote:35ee8e0b36="北京野狼"]

qmail本身当然都没这功能。[/quote:35ee8e0b36]

楼上是不是从来不认真看别人的帖子,就回贴啊!

我说的是netqmail,上面附带了常见的qmail补丁集合。劳驾以后不要没看清楚就乱说。

再者,同意楼上说的。

 joyaid 回复于:2004-11-20 23:07:40
各位高手,你们说的越来越晕了.

也就是说:smtp_auth没有做用了?对巴?

啥也当不住spam了,对巴?

但是portals的邮件系统咋做的呢?自己写了些啥呢? 他们也防止了匿名和垃圾邮件,对巴?

呵呵~~~~~~

 李暮楚 回复于:2004-12-19 17:01:34
我也看了一下,发现问题真唬人啊,趁着没上黑名单前,请iceblood指点迷津普渡众生:)
[quote:330d4a8d60="emylekao"]楼上说的还是有问题,qmail.org上的netqmail-1.05至少没有做到这点。不过,还想加一个补丁就可以。我安装了toaster的补丁以后,可以实现给本地发信件也需要验证的功能。[/quote:330d4a8d60]
那你用这个方法一试就知道了,toaster不行!我也是按toaster安装的,结果自己也收到了“幽灵管理员”webmaster的信,当然那是我自己测试的

 yjc2688 回复于:2004-12-19 21:25:26
我也装得是netqmail1.05结果测试也是给本地域发信不需要认证导致本地域内的邮件队列数量有2000-3000都在等待着处理你们就别指责了快说说怎么解决!!!

 我菜我怕谁 回复于:2004-12-20 09:05:27
其实qmail有个补丁是进行dns反解,验证域和ip地址是否对应。toaster的方法已经解决了这个存在的问题。不用担心。呵呵!

原文转自:http://www.ltesting.net