0×00 引言

钓鱼邮件攻击是社会工程学攻击中的一种常见的手段,其目的是欺骗受害人来进行一些操作,最终控制受害人。一般来说,钓鱼邮件从后续的攻击手段来说,可以分为两类:

  • 纯粹利用社会工程学手段对受害人进行进一步的欺骗,和电信诈骗的手段更加类似
  • 使得受害人点击一些链接,然后使用CSRF,XSS,伪造登录网站等技术方式来进行进一步的攻击

这篇文章主要介绍第二种情况的一些猥琐的技巧和策略,以求能使得更多的人不被这些手腕所迷惑和欺骗,也希望能给安全人员一些启发。

0×01 钓鱼邮件链接

这是一种最为基础的方法,就是在邮件中放入一个链接,期待用户来点击,而这个链接可以链接到一个带有反射性XSS的网站,或者是一个CSRF,或者是伪造的登录入口。

深度截图20170429204748.png

如上图

但是在今日,人们的安全意识已经是大大的提升了,能够意识到不可靠邮箱发来的邮件中的链接最好不要轻易的点击。

因此,攻击者发明了一些更加猥琐的手段,来对用户进行欺骗和攻击。

下面将依次介绍几种方法。

0×02 利用链接的显示与实际不同进行欺骗

这种欺骗方法很好理解,就如同html中的a标签一样,邮件的发件一般是在一个富文本编辑器中进行的,一个超链接有两部分,一部分是显示出来的文本,另一部分是这个指向的URL,通常,我们会将链接的描述填写在显示出来的文本中,就像这样:

点击此处跳转到百度

攻击者也可以像这样,放置一个链接,就像0×00中的那样,比如:

点击此处查看详细信息 但是,这种链接,是很容易引起用户的警觉的,尤其是一个陌生的,不那么靠谱的邮箱发来的邮件中。于是,攻击者产生了一种更加猥琐的办法,请看下面这个链接:

http://www.baidu.com/

上面这个链接,看上去是一个百度的链接,实际却跳向了必应(本来想放谷歌,怕有些师傅没翻墙)这就是利用了这个技巧。

来看一个邮件中的例子

深度截图20170429220253.png

如果是这样的一个链接,完全就是淘宝网的域名,而且是https的,大部分人都不会有什么迟疑,而攻击者的目的也就达到了。

0×03 利用近似URL来进行欺骗

上面一种欺骗方法有一个严重的缺点,就是只能在邮件内进行欺骗,一旦跳转到了浏览器内,就很容易被发现,因此攻击者需要找一种方法,使得进入浏览器,看到URL之依旧能够欺骗用户,防止用户警觉,不方便下一步的攻击。

最初的方法:相近字符替换

比如说像下表一样的:

仿冒的url
http://www.taoba0.com/
http://www.ba1du.com/
http://www.g00gle.com/
http://mail.l63.com/
http://www.g00gle.com/
http://www.tmitter.com/

进阶的方法:利用子域名

假设攻击者有一个 abc.com的域名,那么他可以注册如下的子域名进行仿冒和欺骗:

仿冒的url
http://taobao.abc.com/
http://baidu.abc.com/
http://google.abc.com/

但是近些年来大家都知道看根域名了orz,所以这种方法也逐渐销匿了踪迹。

猥琐的方法:仿冒子域名

大家都明白,只要根域名保证了正确,下面的子域名就基本上可以确定是没有问题的,比如:

http://mail.qq.com/  http://wx.qq.com/  http://news.qq.com/ 

这些,形如xxx.qq.com都可以认为是鹅场的网站。

但是,重点来了!如果你看到下面的url:

最猥琐的仿冒url
http://secure-taobao.com/
http://center-taobao.com/
http://service-taobao.com/
http://mail-qq.com/
http://user-taobao.com/
http://sale-taobao.com/
http://mail-163.com/

还会有那么多怀疑吗?这种用连接线来混淆视听假装自己是子域名的伪装策略,可以欺骗过大多数人的眼睛。

0×04 邮件伪造

我们现在邮件系统的实现大多是使用SMTP协议,SMTP协议中,使用HELO字段来向接受服务器标识发送方的身份。

但是,由于HELO标识是由发送方提供的,也就是说,这个标识是可以被伪造的。

我们使用kali的swaks工具可以进行邮件伪造。

$ swaks --from a@b.com --to xxx@hotmail.com  -heaeder "test" === Trying mx1.hotmail.com:25...
=== Connected to mx1.hotmail.com. <- 220 SNT004-MC8F12.hotmail.com Sending unsolicited commercial or bulk e-mail to Microsoft's computer network is prohibited. Other restrictions are found at http://privacy.microsoft.com/en-us/anti-spam.mspx. Tue, 2 May 2017 23:43:27 -0700 -> EHLO eaeder <- 250-SNT004-MC8F12.hotmail.com (3.21.0.274) Hello [202.119.45.227]
<- 250-SIZE 36909875 <- 250-PIPELINING
<- 250-8bitmime
<- 250-BINARYMIME
<- 250-CHUNKING
<- 250-STARTTLS
<- 250-AUTH LOGIN
<- 250-AUTH=LOGIN
<- 250 OK
 -> MAIL FROM:<a@b.com> <- 250 a@b.com....Sender OK
 -> RCPT TO:<xxx@hotmail.com> <- 250 xxx@hotmail.com 
 -> DATA <- 354 Start mail input; end with <CRLF>.<CRLF> -> Date: Wed, 03 May 2017 14:43:27 +0800 -> To: xxx@hotmail.com
 -> From: a@b.com
 -> Subject: test Wed, 03 May 2017 14:43:27 +0800 -> X-Mailer: swaks v20130209.0 jetmore.org/john/code/swaks/ -> 
 -> This is a test mailing
 -> 
 -> . <- 250 <SNT004-MC8F12ecm9t000a63210@SNT004-MC8F12.hotmail.com> Queued mail for delivery
 -> QUIT <- 221 SNT004-MC8F12.hotmail.com Service closing transmission channel
=== Connection closed with remote host. 

发送成功后,我们可以在自己的邮箱中收到这一封邮件,这次,我们伪装自己是 a@b.com深度截图20170503144654.png

读者可以把目标邮箱换成自己的邮箱进行尝试。

0×05 利用子域伪名造的邮件

为了防止邮件伪造,邮件厂商也采取了一些措施,比如SPF,原理大致是一个反向的DNS,将邮箱地址和固定的IP源绑定。

邮件接收方的收件服务器在接受到邮件后,首先检查域名的SPF记录,来确定发件人的IP地址是否被包含在SPF记录里面,如果在,就认为是一封正确的邮件,否则会认为是一封伪造的邮件进行退回。[3]SPF 记录允许邮件系统管理员指定哪些邮件服务器可以使用该域名来发送邮件,接收服务器会在收到邮件时验证发件人在 SMTP 会话中执行 MAIL FROM 命令时的邮件地址是否与域名 SPF 记录中所指定的源 IP 匹配,以判断是否为发件人域名伪造。

animizer_downloads-00-12-04.jpg

(图片来自wikipedia)

我们在伪造一些大型的邮件提供商的邮件的时候,经常会遇到SPF检查失败,

$ swaks --from baran@163.com --to xxx@qq.com -heaeder "test" === Trying mx3.qq.com:25...
=== Connected to mx3.qq.com. <- 220 newmx13.qq.com MX QQ Mail Server
 -> EHLO eaeder <- 250-newmx13.qq.com
<- 250-SIZE 73400320 <- 250-STARTTLS
<- 250 OK
 -> MAIL FROM:<baran@163.com> <- 250 Ok
 -> RCPT TO:<xxx@qq.com> <- 250 Ok
 -> DATA <- 354 End data with <CR><LF>.<CR><LF> -> Date: Wed, 03 May 2017 15:25:35 +0800 -> To: xxx@qq.com
 -> From: baran@163.com
 -> Subject: test Wed, 03 May 2017 15:25:35 +0800 -> X-Mailer: swaks v20130209.0 jetmore.org/john/code/swaks/ -> 
 -> This is a test mailing
 -> 
 -> . <** 550 SPF check failed. http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=20022&&no=1001445. -> QUIT <- 221 Bye
=== Connection closed with remote host. 

目标邮件服务器返回一个550的状态码,表示SPF检查失败。这种检查一般是极难绕过的,毕竟我们没办法去伪造IP。

但是,我们还有一种混淆视听的猥琐方法:那就是使用邮件域名的的子域名

假如说我们想要伪造发送者abc公司 abc.com的邮件,但是abc.com受到SPF策略的保护,但是我们仍然可以伪造abc.com的子域名的邮件,这样看起来像是abc公司的一个部门,或者一个活动的邮箱。比如说hr.abc.comservice.abc.com

$ swaks --from baran@mail.163.com --to xxx@qq.com -heaeder "test" === Trying mx3.qq.com:25...
=== Connected to mx3.qq.com. <- 220 newmx.qq.com MX QQ Mail Server
 -> EHLO eaeder <- 250-newmx.qq.com
<- 250-SIZE 73400320 <- 250-STARTTLS
<- 250 OK
 -> MAIL FROM:<baran@mail.163.com> <- 250 Ok
 -> RCPT TO:<xxx@qq.com> <- 250 Ok
 -> DATA <- 354 End data with <CR><LF>.<CR><LF> -> Date: Wed, 03 May 2017 15:25:42 +0800 -> To:xxx@qq.com
 -> From: baran@mail.163.com
 -> Subject: test Wed, 03 May 2017 15:25:42 +0800 -> X-Mailer: swaks v20130209.0 jetmore.org/john/code/swaks/ -> 
 -> This is a test mailing
 -> 
 -> . <** 550 Mail content denied. http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=20022&&no=1000726 -> QUIT <- 221 Bye
=== Connection closed with remote host. 

这次返回了一个250成功的状态码,意味着我们伪造成功了。

0×06 总结

邮件的钓鱼和伪造的技巧有很多,本文只是略微介绍一些比较浅薄的方法,希望给各位安全人员提供一些攻击和防御的灵感和思路,同时也给用户提供一些防范此类攻击的想法。

*本文原创作者:sarleon