我有一个 Windows SMTP 服务器,它当前允许使用“AUTH LOGIN”方法进行身份验证。据我所知,这只是用户名和密码的 base-64 编码,基本上和明文一样糟糕,因为垃圾邮件发送者可以在传输过程中嗅出明文密码。
作为快速修复,我可以使用集成 Windows 身份验证 (IWA)。我相信 IWA 使用“AUTH NTLM”身份验证。这是否被认为“足够安全”?是否有任何漏洞使“AUTH NTLM”成为一个坏主意?
我有一个 Windows SMTP 服务器,它当前允许使用“AUTH LOGIN”方法进行身份验证。据我所知,这只是用户名和密码的 base-64 编码,基本上和明文一样糟糕,因为垃圾邮件发送者可以在传输过程中嗅出明文密码。
作为快速修复,我可以使用集成 Windows 身份验证 (IWA)。我相信 IWA 使用“AUTH NTLM”身份验证。这是否被认为“足够安全”?是否有任何漏洞使“AUTH NTLM”成为一个坏主意?
坏主意不是使用 NTLM,而是缺少使用 SSL。如果没有 SSL,数据会不受保护地传输,特别是主动攻击者可能会劫持连接(例如,在执行身份验证之后)。再多的 NTLM 也无法解决这个问题。
要将 SSL 与 STMP 一起使用,有两种方法:
在 SSL 服务器中运行整个 SMTP 事务。客户端必须事先知道,它应该通过 SSL 握手来开始事务。STMP-within-SSL 服务器的传统端口是 465。
让客户端和服务器使用STARTTLS. 连接从“正常”端口 (25) 开始,但客户端和服务器随后协商 SSL/TLS 的使用,并在协商后开始 SSL/TLS 握手。
无论哪种方式,您都必须将客户端配置为不“以明文形式”发送密码。大多数客户端都可以这样配置。
如果您使用 SSL/TLS,那么“按原样”发送用户名 + 密码就可以了。如果您不使用 SSL/TLS,那么从基本身份验证切换到 NTLM 可能会减慢能力较差的攻击者的速度,但不要相信它会真正阻止他们。NTLM中的密码学并不完全值得投入大量精力,但未受保护套接字上的原始 NTLM 的最大问题与未受保护套接字上的原始登录名+密码相同:套接字未受保护。
与基本身份验证相比,NTLM 本身不显示密码,因此只有被动的攻击者不会立即获知密码;但是,他们获得了密码哈希,具有非常快的哈希函数(最多几个 MD4 和 MD5),这意味着对密码的暴力破解将是有效的。具有良好 GPU 的纯被动攻击者仍然很有可能破解某些用户密码。
切换到 NTLM 的一个很好的理由是与其他身份验证方法集成,例如智能卡。但是,如果您的用户有密码,那么基本身份验证就可以轻松解决问题。