白当了这么多年程序员, 今天才发现伪造邮件的小秘密
事情要从我某天收到的一封诈骗邮件说起:
文章大意是这样的:我是个黑客,我黑了你的邮箱,黑了你的设备(并没说是什么设备)。你别想跟踪到我,因为我是用你自己的邮箱给你发的信!!你在访问某某网站的时候输入了你的密码,我截获了它,并安装了木马在你的设备上。我获得了你所有的联系人,在你的邮箱或者访问记录中找到了一堆“隐秘”的东西。马上在48个小时内用比特币给我支付850刀,否则就把你的秘密发给你的所有联系人!我收到付款后,你的数据会清除,你设备上的病毒会自动销毁自己。最后,还警告我,别做傻事,警察和你的朋友都不能帮你的。哇卡卡卡。
平时收到陌生的英文信件我不太会去细看的,大部分是垃圾邮件。可是这个邮件的发件人是我自己的,于是我仔细地看完了全文。看完之后还真有点迷惑,第一反应是邮箱密码被盗了。虽然我这么洁身自好的人,邮箱里和浏览记录也没啥秘密,但邮箱密码被盗总是不爽的。于是登录搜狐邮箱,查看了一下最近登录历史和现在的密码,一切正常。登录历史都是自己熟悉的。所以我确信这是一封假的勒索邮件。但是它是如何做到使用我自己的邮箱作为发件人的呢?作为一名程序员,我想探一探究竟。
在必应搜索了一下,输入 How can I send email from a fake sender。有一大堆结果。

不过大部分是需要付费的,我相信我的诈骗邮件肯定也是通过类似的手段来群体发送的。

同时还发现CSDN上这篇使用Telnet通过SMTP伪造发件人的文章。我简单用搜狐邮箱试了一下,似乎并不可以。它会提示发件人和你的地址不一致。我心想,嗯,看来这些简单的安全问题,正规的邮箱还是会Check的嘛。可是接下来的发现让我大跌眼镜。
在当天,一个偶然的机会,我发现在ThunderBird中,只要右键选择别人的邮件,然后使用“作为新消息编辑”的功能,这样其他人收到的邮件就会是伪造的发件人了。

于是我伪造了一个JD作为发件人的邮件发给自己:

看起来没有任何问题,发件人伪装的一毛一样。点击 查看->消息安全信息,会看到没有数字签名的提示。不过真的邮件也是没有数字签名提示的。搞笑的是这里面还安慰我:放心,不会有人伪造发件人的。。。伪造就是如此不经意就会发生了好吗。

只有查看邮件的源代码,才能看到一些异样,左边是真的邮件,右边是假的。

可是对于大多数人,哪里会去辨别这个呢?比如收到某网站的航班取消邮件,如果你真的订了航班,看到发件人一样的话你是不是就更会相信呢?
我尝试了搜狐和263企业邮箱,都有类似的问题存在。难道不能帮用户拦截一下吗?