釣魚郵件攻擊是社會工程學攻擊中的一種常見的手段,其目的是欺騙受害人來進行一些操作,最終控制受害人。一般來說,釣魚郵件從后續的攻擊手段來說,可以分為兩類:
純粹利用社會工程學手段對受害人進行進一步的欺騙,和電信詐騙的手段更加類似
使得受害人點擊一些鏈接,然后使用CSRF,XSS,偽造登錄網站等技術方式來進行進一步的攻擊
這篇文章主要介紹第二種情況的一些猥瑣的技巧和策略,以求能使得更多的人不被這些手腕所迷惑和欺騙,也希望能給安全人員一些啟發。
0×01 釣魚郵件鏈接
這是一種最為基礎的方法,就是在郵件中放入一個鏈接,期待用戶來點擊,而這個鏈接可以鏈接到一個帶有反射性XSS的網站,或者是一個CSRF,或者是偽造的登錄入口。

如上圖
但是在今日,人們的安全意識已經是大大的提升了,能夠意識到不可靠郵箱發來的郵件中的鏈接最好不要輕易的點擊。
因此,攻擊者發明了一些更加猥瑣的手段,來對用戶進行欺騙和攻擊。
下面將依次介紹幾種方法。
0×02 利用鏈接的顯示與實際不同進行欺騙
這種欺騙方法很好理解,就如同html中的a標簽一樣,郵件的發件一般是在一個富文本編輯器中進行的,一個超鏈接有兩部分,一部分是顯示出來的文本,另一部分是這個指向的URL,通常,我們會將鏈接的描述填寫在顯示出來的文本中,就像這樣:
點擊此處跳轉到百度
攻擊者也可以像這樣,放置一個鏈接,就像0×00中的那樣,比如:
點擊此處查看詳細信息 但是,這種鏈接,是很容易引起用戶的警覺的,尤其是一個陌生的,不那么靠譜的郵箱發來的郵件中。于是,攻擊者產生了一種更加猥瑣的辦法,請看下面這個鏈接:
http://www.baidu.com/
上面這個鏈接,看上去是一個百度的鏈接,實際卻跳向了必應(本來想放谷歌,怕有些師傅沒翻墻)這就是利用了這個技巧。
來看一個郵件中的例子

如果是這樣的一個鏈接,完全就是淘寶網的域名,而且是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:
250 a@b.com....Sender OK
-> RCPT TO:
250 xxx@hotmail.com
-> DATA
354 Start mail input; end with .
-> 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 Queued mail for delivery
-> QUIT
221 SNT004-MC8F12.hotmail.com Service closing transmission channel
=== Connection closed with remote host.
發送成功后,我們可以在自己的郵箱中收到這一封郵件,這次,我們偽裝自己是 a@b.com

讀者可以把目標郵箱換成自己的郵箱進行嘗試。
0×05 利用子域偽名造的郵件
為了防止郵件偽造,郵件廠商也采取了一些措施,比如SPF,原理大致是一個反向的DNS,將郵箱地址和固定的IP源綁定。
郵件接收方的收件服務器在接受到郵件后,首先檢查域名的SPF記錄,來確定發件人的IP地址是否被包含在SPF記錄里面,如果在,就認為是一封正確的郵件,否則會認為是一封偽造的郵件進行退回。[3]SPF 記錄允許郵件系統管理員指定哪些郵件服務器可以使用該域名來發送郵件,接收服務器會在收到郵件時驗證發件人在 SMTP 會話中執行 MAIL FROM 命令時的郵件地址是否與域名 SPF 記錄中所指定的源 IP 匹配,以判斷是否為發件人域名偽造。

(圖片來自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:163.com>
250 Ok
-> RCPT TO:
250 Ok
-> DATA
354 End data with .
-> 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:.163.com>
250 Ok
-> RCPT TO:
250 Ok
-> DATA
354 End data with .
-> 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 總結
郵件的釣魚和偽造的技巧有很多,本文只是略微介紹一些比較淺薄的方法,希望給各位安全人員提供一些攻擊和防御的靈感和思路,同時也給用戶提供一些防范此類攻擊的想法。
|