反郵件偽造技術SPF、DKIM、DMARC


一、前言

在寫上篇 https://www.cnblogs.com/wkzb/p/15401932.html 隨筆的時候,留了一個坑說要再寫一篇隨筆實操任意郵件偽造的方式。然而在最近的實驗中,我發現很多文章提到的方式都已經無法復現了,達到最好的效果是可以成功偽造發件人,但是會有一個括號標記由哪個域名代發,類似下圖這樣

 

這相比於SPF記錄配置不當達到的郵件偽造效果差一些,並且我覺得從視覺上使這個域名和想要偽造的域名很像顯然沒有SPF配置不當造成的任意郵件偽造優美(但是視覺上偽造真的有很強的迷惑性,在紅隊中會很好用,可以參考這篇 https://mp.weixin.qq.com/s/tOOBZ1aC6SsjslCM70WKBQ 學習,這里就暫時不實驗了),如果后續我發現了效果完美的偽造方式,會跳出來更新的。接着我又去學習了SPF、DKIM、DMARC的相關原理,想要了解為什么會有“代發”這種郵件偽造方式,這里就淺顯的更新一些我的理解吧(主要是上次立了還要再更一篇郵件偽造隨筆的 flag,不寫點什么心里癢癢)

 

二、SPF

上一篇介紹了SPF的定義、作用和語法,它的作用可以用下圖抽象出來(圖是網上找的)。當定義了域名的SPF記錄之后,郵件接收方的服務器在接收到郵件后,使用檢查域名SPF記錄的方式來確定發件人是否是合法的。例如檢查IP地址是否被包含在域名SPF記錄里面,如果在,就認為是一封合法的郵件,否則認為是一封偽造的郵件進行退回或丟棄處理。

 

但是這樣檢測垃圾郵件的方式有一定的局限性,舉個栗子,域名 aaa.com 設置了SPF記錄,並發送了一封郵件給 beiwo@bbb.com 用戶,這個用戶又想把郵件轉給 yhck@ccc.com 看看,ccc.com 的郵件服務器發現這封郵件來自 aaa.com,但是SPF記錄中沒有發送方 bbb.com 郵服的IP地址,就會將這封郵件誤認為是垃圾郵件。一些郵件服務商解決SPF記錄局限性的方法是,在轉發郵件時修改郵件的發件人,但這在理論上並不優雅,於是誕生了DKIM技術。

 

三、DKIM

DKIM是 DomainKeys Identified Mail 的縮寫,中文譯作“域名密鑰識別郵件”。這是一套電子郵件認證機制,使用公開密鑰加密的基礎提供了數字簽名與身份驗證的功能,以檢測寄件者、主旨、內文、附件等部分有否被偽冒或竄改。一般來說,發送方會在電子郵件的標頭插入 DKIM-Signature 及電子簽名信息。而接收方則通過DNS查詢得到公開密鑰后進行驗證。(查資料得知:目前萬網不支持DKIM,新網支持DKIM)

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

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

 

接着第二節SPF中的情景舉栗子,DKIM要求域名 aaa.com 在郵件服務器中生成一個密鑰對,私鑰保存在 aaa.com 的郵服內,公鑰通過DNS記錄公開。域名 aaa.com 的服務器在向 bbb.com 發送郵件時,使用私鑰對郵件內容簽名,並將簽名與郵件內容一起發送給 bbb.com 的服務器。bbb.com 收到 aaa.com 的郵件時,查詢 aaa.com 的DNS記錄,拿到公鑰,再使用公鑰和簽名驗證郵件內容,如果驗證不通過,則將郵件判定為偽造的郵件。

在第二節SPF記錄會產生局限性的郵件轉發情形內(aaa.com->bbb.com->ccc.com),ccc.com 只需查詢 aaa.com DNS記錄中的DKIM公鑰即可認證郵件是否為偽造郵件了,並且由於 aaa.com 使用了DKIM私鑰對郵件內容簽名,在轉發的過程中也不會出現中間人篡改郵件內容的問題了。

但是,這種方式還是可以繞過的!!

因為SPF記錄定義的發送方地址是 RFC5321.MailFrom 中規定的字段(Return-Path),DKIM則是直接在郵件頭里攜帶了域名字段(DKIM-Signature: d=),借用在知乎看到的一個師傅的解釋:郵件存在信封和信箋兩個不同的概念,信封上的信息是給郵遞員看的,包含了從哪里來到哪里去的尋址信息,而信箋內的信息是給收件人看的,所以信封和信箋上寫的收發件人可以完全沒有關系。套用在電子郵件上,電子郵件的“信封”對於普通用戶通常是不可見的,只對中轉過程中的各種服務器可見。Return-Path 即是信封上的發送方,信封上還標注了DKIM驗證的域名字段 DKIM-Signature: d=fake.com ,只要 fake.com 域名發送郵件並使用 fake.com 的公鑰進行驗證即可通過SPF和DKIM檢查,將該郵件發送到收件人的郵箱,而郵件服務展示給普通收件人的發件地址卻為“信箋”內的 From 字段的內容,實現了偽造郵件的目的,於是誕生了DMARC技術。

Return-Path: admin@fake.com
DKIM-Signature: d=fake.com, b=xxxxxxxxxxxxxx
From: <admin@aaa.com>
To: <beiwo@bbb.com>

 

四、DMARC

DMARC是 Domain-based Message Authentication, Reporting and Conformance 的縮寫,中文譯作“基於域的消息認證,報告和一致性”。

舉栗子,它並沒有規定具體的驗證措施,而是基於SPF和DKIM(或二者之一)。它規定,SPF記錄的發件人(Return-Path)或DKIM記錄的發件人(DKIM-Signature: d=)二者至少需有其一與 From 頭對應,即信封上的兩個發件人最少要有一個與信箋中的發件人一致。當然DMARC技術在實際實現過程中還會有很多細節,這里只是抽象出了一部分易於理解的概念。

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

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

 

五、總結

理解了反郵件偽造技術SPF、DKIM、DMARC的原理后,我在第一節提出的代發郵件是怎么實現的問題就可以在這篇隨筆中找到答案了,反郵件偽造技術不只需要發件方郵服配置SPF等記錄,還要求收件方支持相關的驗證,只有雙方配合協作才可以盡可能的避免郵件偽造問題。最后再貼兩個在線測試工具檢測DKIM和DMARC是否正確配置。

DKIM測試工具:https://dmarcly.com/tools/dkim-record-checker 

DMARC測試工具:https://dmarcly.com/tools/dmarc-checker

 

 

參考文章:

https://saucer-man.com/information_security/452.html#cl-3

https://learnku.com/articles/54156

https://www.zhihu.com/question/21857308

https://juejin.cn/post/6844904116804648973#heading-10

 


免責聲明!

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



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