freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

欺骗的艺术:SMTP走私分析
2024-06-18 17:09:52

简介

SMTP(Simple Mail Transfer Protocol)是互联网电子邮件传输的基础协议。其设计初衷是为了方便邮件的传递,而非注重安全性,因此它存在一些可被恶意利用的漏洞。本文将探讨一种利用 SMTP 协议漏洞的高级攻击技术——SMTP 走私(SMTP Smuggling),以及如何通过复杂的邮件头部和格式欺骗邮件服务器,绕过安全检查,达到非法传递信息的目的。

SMTP 走私是一种专门用来伪造电子邮件进行欺骗的攻击技术。通过利用 SMTP 协议中的差异,攻击者可以绕过一些身份验证机制,发送看似来自受信任域的电子邮件。SMTP 走私利用了不同 SMTP 服务器对数据结束序列的不同解释,将消息分割成不同的部分,从而实现攻击。

SMTP 基础知识

SMTP 是用于发送电子邮件的协议,典型的工作流程如下:

  1. 建立连接:客户端(发送方)通过发送EHLO(扩展的HELO命令)启动 SMTP 会话。

  2. 发送命令:

    • MAIL FROM:指定发件人的电子邮件地址。

    • RCPT TO:指定收件人的电子邮件地址。

  3. 传输数据:

    • DATA命令:开始发送邮件内容。

    • 邮件头部和正文之间用一个空行(<CR><LF>)分隔。

    • 邮件内容以<CR><LF>.<CR><LF>结束。

  4. 结束会话:通过QUIT命令关闭连接。

SMTP 会话示例

以下是一个典型的 SMTP 会话示例:

EHLO sender.exm
250 mx.receiver.exm Hello sender.exm

MAIL FROM: <user@sender.exm>
250 OK

RCPT TO: <user@receiver.exm>
250 OK

DATA
354 Start mail input; end with <CR><LF>.<CR><LF>

From: user@sender.exm
To: user@receiver.exm
Subject: Example

Hello, this is a test message.
<CR><LF>.<CR><LF>
250 OK

QUIT
221 mx.receiver.exm closing connection

上述交互展示了一个完整的 SMTP 会话,其中邮件内容以<CR><LF>.<CR><LF>结束,这是邮件服务器识别邮件数据结束的标志。

SMTP 走私攻击的原理

SMTP 走私攻击的核心思想是利用邮件头部或数据结束序列的处理差异,绕过安全机制,将伪造的邮件传递到目标服务器。

原理图解

Overview SMTP Smuggling

图解说明:

  1. 第一幅图

    • 伪造的邮件在内容结束时未使用标准的<CR><LF>.<CR><LF>序列。

    • 结果是后续的 SMTP 命令被视为邮件内容的一部分。

  2. 第二幅图

    • 接收服务器将两个消息解析为独立的邮件。

    • 这导致攻击者的邮件内容被分割并作为两封邮件传递。

通过操纵数据结束序列,攻击者可以让接收服务器对邮件内容产生不同的解析,从而实现伪造和绕过安全检查。

HTTP 走私的启发

SMTP 走私技术的灵感来自于 HTTP 走私。HTTP 走私是通过操纵 HTTP 请求头,使得前端和后端服务器对请求的处理产生差异,从而将恶意请求“走私”到服务器。

例如,在 HTTP 走私中,通过控制Content-LengthTransfer-Encoding头部,攻击者可以让前端服务器认为一个请求已经结束,而让后端服务器继续处理隐藏在其后的恶意请求。

HTTP 走私示例

SMTP 走私的实现

类似地,SMTP 走私通过操纵 SMTP 消息的结构,特别是数据结束序列<CR><LF>.<CR><LF>,让不同的服务器对邮件内容的解析产生差异,从而达到绕过安全检查的目的。

出站和入站走私

SMTP 走私攻击可以分为两种类型:入站走私和出站走私。

入站走私

在入站走私中,攻击者利用合法的 SMTP 服务器发送伪造的邮件,但通过特殊的邮件头或格式,使邮件看起来像是来自另一个合法域名。由于发件服务器没有正确处理这些特制的邮件头或格式,邮件被转发到目标接收服务器时,绕过了 SPF 检查,成功送达目标收件人。

入站走私示意图

出站走私

在出站走私中,攻击者发送的特制电子邮件包含多个邮件头或段落,可能导致接收服务器在解析时产生不同的解释。由于这些特殊处理方式,接收服务器在执行 SPF 检查时,可能误将邮件头中的伪造域名识别为合法域名,从而通过 SPF 检查,成功送达目标收件人。

SPF 和 SPF 对齐检查

为了更好地理解 SMTP 走私,我们需要了解 SPF 和 SPF 对齐检查的基础。

SPF(Sender Policy Framework)

SPF 是一种电子邮件验证机制,用于验证邮件是否来自被授权的邮件服务器,从而防止发件人地址伪造。它通过域名的 DNS 记录中指定哪些服务器可以代表该域发送电子邮件。接收服务器会检查发件邮件的 IP 地址是否在发件人的 SPF 记录中。

SPF 对齐检查

在 DMARC(基于域名的消息认证、报告和一致性)策略中,SPF 对齐检查要求邮件的“From”地址和通过 SPF 验证的发件人域名必须一致(或对齐)。这增加了邮件验证的严格性,进一步防止域名欺骗。

SMTP 走私的具体实现

在实际操作中,SMTP 走私利用了 SMTP 协议中不同服务器对数据结束序列的不同处理方式。标准的 SMTP 数据结束序列是<CR><LF>.<CR><LF>,但不同的服务器可能对这一序列有不同的处理方法:

  • 点填充:有些服务器会将单个点替换为双点,即<CR><LF>.<CR><LF>变为<CR><LF>..<CR><LF>

  • 换行符处理:有些服务器可能只识别单一的换行符<LF>.<LF>作为数据结束序列。

  • 编码处理:一些服务器可能会对数据进行编码,例如使用quoted-printable编码。

  • 忽略处理:某些服务器可能完全忽略特定的序列。

示例

假设我们在一封邮件中使用了特殊的结束序列<LF>.<LF>,并且出站 SMTP 服务器和入站 SMTP 服务器对这一序列有不同的解释。出站服务器可能忽略这一序列,而入站服务器可能将其视为数据结束序列。

邮件数据示例

From: YOUR@EMAIL.ADDRESS
To: YOUR@ANALYSIS.DOMAIN
Subject: Testing EOD ('\n.\n')

Hello, testing '\n.\n' as a fake end-of-data sequence!

SMUGGLINGSTART

..\n.\n

SMUGGLINGEND
.\r\n

解析结果

在入站服务器上,这段数据可能被解析为:

[+] Found identifiers!
SMUGGLINGSTART

..\n.\n

SMUGGLINGEND

在这种情况下,入站服务器将\n.\n视为数据结束序列,而出站服务器可能忽略了这个序列的特殊意义,从而导致伪造数据被成功走私。

靶场复现

为了实践和理解 SMTP 走私攻击,可以搭建一个实验环境。你可以参考以下链接了解如何在 Ubuntu 上设置一个 SMTP 渗透测试环境: SMTP 渗透测试实验室设置

POC:SMTP 走私攻击演示

以下是一个使用nc(Netcat)工具的 POC 示例,它展示了如何通过 SMTP 走私发送伪造邮件:

──(root㉿vision)-[/var/www/html]
└─# nc -nv 127.0.0.1 25                                                      
(UNKNOWN) [127.0.0.1] 25 (smtp) open
220 mail.vision.lab ESMTP Postfix (Debian/GNU)
EHLO visionsec
250-mail.vision.lab
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-DSN
250-SMTPUTF8
250 CHUNKING
MAIL FROM: geet@mail.vision.lab
250 2.1.0 Ok
RCPT TO: arrti@mail.vision.lab
250 2.1.5 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
Subject: Hacker_By_Vision        
V me 50
.
250 2.0.0 Ok: queued as DA86612A3FC
MAIL FROM: admin@mail.vision.lab
250 2.1.0 Ok
RCPT TO: arrti@mail.vision.lab
250 2.1.5 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
Subject: hhh
ATT by hacker test
.
250 2.0.0 Ok: queued as EB39012A3FC
quit
221 2.0.0 Bye

在上述示例中:

  • 第一个邮件内容以.结束。

  • 然而,在发送quit命令之前,继续发送了第二封邮件,达到发送多封伪造邮件的效果。

最终结果

邮件发送结果

钓鱼邮件展示

防御措施

为了防止 SMTP 走私攻击,组织应采取以下防御措施:

  1. 严格验证 SMTP 交互:确保 SMTP 服务器严格按照标准协议处理数据结束序列,不接受非标准的结束序列。

  2. 启用 DMARC 保护:通过配置 DMARC 政策,确保邮件的“From”地址与通过 SPF 和 DKIM 验证的发件人域名一致。

  3. 定期更新和审查服务器配置:确保服务器配置符合最新的安全最佳实践,并定期进行安全审查。

  4. 使用高级邮件安全网关:部署可以识别和拦截复杂攻击的邮件安全网关,以保护组织免受 SMTP 走私等高级攻击。

结语

SMTP 走私攻击展示了如何利用协议的复杂性和不同实现之间的差异,绕过安全机制,将伪造的邮件传递到目标服务器。这种攻击方式提醒我们在设计和部署系统时,不仅要关注协议的功能,还要深入理解其潜在的安全风险,以便采取适当的防御措施。

通过本文,希望您对 SMTP 走私技术有了更深入的了解,并能在实际工作中采取有效的措施,保护邮件系统免受此类攻击。

# 钓鱼攻击 # 网络安全技术 # 钓鱼邮件 # 网络钓鱼攻击 # 钓鱼邮件攻击
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录