淺談SPF配置不當導致的任意郵件偽造漏洞


1.1前提

最開始從其他師傅那里見到這個漏洞,參照一些師傅的博客學習了一下SPF記錄的相關安全問題,今天來聊聊吧,首先要介紹一個協議和兩個記錄。

  • SMTP協議是簡單的郵件傳輸協議,目前郵件還是使用這個協議通信,但是它本身並沒有很好的安全措施。SMTP協議本身沒有機制鑒別寄件人的真正身份,電子郵件的“寄件者”一欄可以填上任何名字,於是偽冒他人身份來網絡釣魚或寄出垃圾郵件便相當容易,而真正來源卻不易追查。
  • MX記錄用於指定負責處理發往收件人域名的郵件服務器。MX記錄允許設置一個優先級,當多個郵件服務器可用時,會根據該值決定投遞郵件的服務器(值越小優先級越高)。SMTP會根據MX記錄的值來決定郵件的路由過程。
  • SPF記錄的全稱為 Sender Policy Framework,中文譯作“發件人策略框架”,它是一套電子郵件認證機制,可以確認電子郵件確實是由網域授權的郵件服務器寄出,防止有人偽冒身份網絡釣魚或寄出垃圾電郵。SPF允許管理員設定一個DNS TXT記錄或SPF記錄設定發送郵件服務器的IP范圍,如有任何郵件並非從上述指明授權的IP地址寄出,則很可能該郵件並非確實由真正的寄件者寄出。

 

這里做一個小總結:配置SPF記錄的目的就是防止隨意偽造發件人

 

1.2語法

查看一個域名的SPF記錄命令:

nslookup -type=txt example.com //windows
dig -t txt example.com //linux

 

SPF記錄會結合“匹配機制”和“限定詞”使用,它其實就是一條有特殊語法的TXT記錄

匹配機制主要用於定義和指定可由該域名發送郵件的主機,其定義方式包括:

  • all 匹配任何主機,它寫在SPF記錄最后以匹配在其前面所列出的主機
  • ip4 匹配 IPv4 地址或網絡范圍
  • ip6 匹配 IPv6 地址或網絡范圍
  • a 匹配主機名或域名
  • mx 匹配域名的MX記錄,當出站與入站郵件為同一服務器時通常采用此種機制
  • ptr 通過DNS反向記錄來匹配發件人IP和域名,由於會增加DNS負載,一般不采用此種機制
  • exists 只檢查域是否在DNS中存在
  • include 將發件人IP和SPF記錄指向另一個域,這種匹配機制通常用於雲服務,如 Exchange Online Protection

 

匹配機制會結合一些限定詞來使用,以告訴服務器找到一條匹配記錄時該怎么辦。常見的限定詞有:

  • + 放行,如果沒有明確指定限定詞,則為默認值
  • - 硬拒絕,直接拒絕來自未經授權主機的郵件
  • ~ 軟拒絕,郵件可被接受,也可被標記為垃圾郵件
  • ? 中性,不考慮郵件是否被接受

 

一些實例(v=spf1 指采用SPF1版本,現在它的最新版本就是第 1 版):

"v=spf1 -all" (拒絕所有,表示這個域名不會發出郵件)
"v=spf1 +all" (接受所有)
"v=spf1 ip4:192.168.0.1/16 -all"(只允許 192.168.0.1/16 范圍內的IP發送郵件)
"v=spf1 mx -all"(允許當前域名的 mx 記錄對應的IP地址發送郵件)
"v=spf1 mx mx:test.example.com -all"(允許當前域名和 test.example.com 的 mx 記錄對應的IP地址發送郵件)
"v=spf1 a mx ip4:173.194.72.103 -all"(允許當前域名的 a 記錄和 mx 記錄和一個給定的IP地址發送郵件)
"v=spf1 include:example.com -all"(采用和 example.com 一樣的SPF記錄)

 

1.3繞過

SPF解析不當

  • 語法錯誤將導致SPF記錄完全失效,https://www.kitterman.com/spf/validate.html 網站輸入域名和SPF記錄,可以檢查SPF記錄是否正確(SPF記錄本質上是一個DNS記錄,所以並不是修改之后立即生效的,通常需要幾個小時的時間)
  • 允許IP段過大,只要攻擊者拿下一台網段內的機器即可繞過
  • ~all 軟拒絕,會接受來信,但可能被標記為垃圾郵件(outlook 郵箱可以接收郵件,qq 郵箱不接收,163 郵箱標記為垃圾郵件)SPF記錄設置硬拒絕,就會有大量的郵件被丟棄或者隔離,影響辦公效率,為了減少業務影響,有些管理員采用軟拒絕的策略,但也會在一定程度上造成安全風險

SPF配置不當

  • 域名增加了SPF記錄,但是郵件服務器不支持SPF檢查或郵件網關未開啟SPF檢測,無法驗證郵件來源。這種情況下,我們聲明了自己是誰,但卻無法驗證對方是誰,SPF檢測無效,可偽造任意用戶發送到你的域名郵箱里
  • SPF解析在公網DNS,郵件服務器配置內部DNS,內部DNS無法進行SPF解析,從而導致繞過,可從公網偽造任意用戶發送郵件
  • 攻擊者在公司內網,內網SMTP服務器開啟匿名郵件發送或者在信任服務器IP段,就可以使用任意用戶發送郵件

高權限用戶繞過

  • Exchange 郵箱系統,擁有 Domain admin 權限的域用戶,可以通過 outlook 直接指定發件人,偽造任意發件人發送郵件並且郵件頭不會顯示真實IP,但是這條沒有什么實際意義,已經擁有 Domain admin 權限就沒必要進行郵件偽造了

郵件客戶端內容解析差異

From 字段特殊字符填充繞過

 

1.4總結

上一小節只講了前三點進行SPF繞過的原理,因為寫這篇隨筆的初衷是如何判斷郵件服務器有無配置SPF,如果沒有或配置不當的話可以直接使用 swaks 偽造郵件發送,思路偏向於防守和挖洞,而后兩點則是運用一些技術實踐任意郵件偽造漏洞,思路偏向於紅隊,接下來會再出一篇實操任意郵件偽造的思路。

 

 

參考文章:

http://www.renfei.org/blog/introduction-to-spf.html

https://zh.wikipedia.org/wiki/%E5%8F%91%E4%BB%B6%E4%BA%BA%E7%AD%96%E7%95%A5%E6%A1%86%E6%9E%B6#cite_note-3

https://www.cnblogs.com/xiaozi/p/12906040.html

https://blog.csdn.net/qq_36119192/article/details/106452010

https://anchorety.github.io/2020/10/18/%E9%82%AE%E4%BB%B6%E5%AE%89%E5%85%A8%E4%B9%8B%E5%8F%91%E4%BB%B6%E4%BA%BA%E4%BC%AA%E9%80%A0/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM