攻击者如何通过 SMTP 探测有效邮箱地址?该怎么防护?

1 攻击者如何通过 SMTP 探测有效邮箱地址?该怎么防护?
枚举为什么有价值

有效邮箱清单是后续攻击的输入:它决定了钓鱼投递的命中率、密码喷洒的目标集合、以及社工时可引用的组织结构信息。相比撞库或漏洞利用,邮箱枚举成本极低且往往不产生任何认证失败日志——它利用的是协议的正常功能,而非缺陷。

枚举的本质是寻找一个可观测的差异:只要服务器对「存在的地址」与「不存在的地址」表现出任何可区分的行为,这个差异就是一条信息泄露信道。差异可以是回复码不同、回复文本不同、增强状态码不同,甚至只是响应耗时不同。

信道一:VRFY 与 EXPN

RFC 5321 §3.5 定义了两个用于地址调试的命令:VRFY 用于请求服务器确认某个参数是否对应一个用户名或邮箱;EXPN 用于请求服务器确认某个参数是否标识一个邮件列表,若是则返回列表成员。

规范本身对这两个命令的信息暴露有明确态度。RFC 5321 §7.3 专门以 VRFY、EXPN 与安全为题讨论其风险:这些命令可被用于收集用户名信息,因此规范要求实现提供可配置的手段来禁用或限制它们的响应,站点可以据本地策略选择不提供真实信息。规范也说明,服务器在不愿确认时可以返回一个不确定的成功响应(252 语义,表示无法验证但会尝试投递),从而在协议合规与信息保护之间取得平衡。

实操结论:对面向公网的入站 MTA,VRFY 与 EXPN 应当关闭或统一返回不确定响应。EXPN 尤其危险,因为它一次可返回整个列表的成员。这两个命令在现代邮件运维中已无实际用途。

信道二:RCPT TO 的差异化响应

关闭 VRFY / EXPN 并不能解决问题,因为RCPT TO 本身就是一个天然的验证接口。攻击者建立 SMTP 会话,逐个提交候选地址,观察服务器响应:

  • 回复码差异:存在的地址返回 250,不存在的返回 550。这是最直接的泄露。
  • 增强状态码差异:RFC 3463 定义了增强状态码体系,RFC 5248 建立了其注册表。若不存在的地址返回 5.1.1(收件人地址不存在)而其他拒绝原因返回 5.7.x(策略类),攻击者据此即可精确区分「地址不存在」与「地址存在但被策略拒绝」。
  • 文本差异:回复码相同但文本不同(如「User unknown」与「Policy rejection」),同样可区分。
  • 时序差异:存在的地址需要查询目录、检查配额、执行过滤策略,耗时明显长于「查无此人」的快速返回。即使回复码与文本完全一致,稳定的时间差依然构成信道。
  • 行为差异:对不存在的地址提前断连、对存在的地址允许继续 DATA,也是可观测差异。
信道三:容易被忽视的旁路
  • 退信(DSN):即便 SMTP 会话阶段全部返回 250,若服务器事后对不存在的地址生成退信,攻击者只要能收到退信就完成了枚举。这就是「先收后退」模式的代价,它同时还会制造回散射。能在 RCPT 阶段拒绝的,就不要接收后再退信。
  • 自动回复与休假回复:只有真实账户会发出自动回复,这本身就是存在性确认。
  • 提交端口的认证反馈:若提交服务在认证失败时对「用户不存在」与「密码错误」返回不同提示,等于把枚举接口开在了认证入口。
  • 目录与协作服务:日历空闲信息查询、通讯录接口、Web 端「找回密码」页面,都可能给出与邮件系统一致的存在性判断。邮件侧封堵得再好,旁路开着就等于没封。
防护配置清单
  1. 关闭 VRFY 与 EXPN:依据 RFC 5321 §7.3 提供的可配置性,在入站 MTA 上禁用,或统一返回不确定响应。
  2. 响应一致化:对未通过认证的入站会话,把「地址不存在」与其他策略拒绝统一为同一回复码、同一增强状态码、同一文本。这是最核心的一条。
  3. 抹平时序差异:对拒绝路径引入固定的最小响应延迟,使存在与不存在的响应耗时落在同一量级。
  4. 会话级速率限制:限制单个连接内的 RCPT TO 数量与错误收件人数量,超过阈值即断连;对同一来源 IP 在时间窗内的连接数与累计错误数设阈值并临时封禁。
  5. 提交与接收严格分离:按 RFC 6409(STD 72)把用户提交流量放在专用提交端口并强制认证,按 RFC 8314 对提交与访问强制使用 TLS;入站 25 端口不做任何用户级验证反馈
  6. 认证入口统一措辞:认证失败一律返回同一条通用错误,不区分用户不存在与凭据错误。
  7. 杜绝接收后退信:在 RCPT 阶段完成收件人有效性判定,避免既泄露信息又产生回散射。
  8. 建立可观测性:把「单连接内高比例无效收件人」「同源 IP 短时间大量 RCPT 失败」「按字典序递增的收件人尝试」作为告警规则。枚举行为在日志中特征鲜明,前提是有人在看。
  9. 同步治理旁路:把自动回复、找回密码、日历空闲信息等接口纳入同一套存在性保护策略。

需要接受一个权衡:响应一致化会牺牲一部分正常发件人的可诊断性——合法发件人写错地址时也只能得到笼统的拒绝原因。这是有意为之的取舍,可以通过为已认证会话与已知可信对端保留详细响应来缓解。

参考:RFC 5321《Simple Mail Transfer Protocol》§3.5 Commands for Debugging Addresses、§7.3 VRFY, EXPN, and Security,J. Klensin,2008 年 10 月,https://www.rfc-editor.org/rfc/rfc5321.html ;RFC 6409《Message Submission for Mail》,R. Gellens、J. Klensin,2011 年 11 月,STD 72,https://www.rfc-editor.org/rfc/rfc6409.html ;RFC 3463《Enhanced Mail System Status Codes》,G. Vaudreuil,2003 年 1 月,https://www.rfc-editor.org/rfc/rfc3463.html ;RFC 5248《A Registry for SMTP Enhanced Mail System Status Codes》,T. Hansen、J. Klensin,2008 年 6 月,BCP 138,https://www.rfc-editor.org/rfc/rfc5248.html ;RFC 8314《Cleartext Considered Obsolete: Use of Transport Layer Security (TLS) for Email Submission and Access》,K. Moore、C. Newman,2018 年 1 月,https://www.rfc-editor.org/rfc/rfc8314.html