询问用户电子邮件和电子邮件密码是不是一个坏主意?

信息安全 电子邮件 证书
2021-09-09 09:20:00

我在一家生产网络安全设备的公司担任测试员,我正在与开发人员讨论某项功能。

该功能是设备发送给用户的通知电子邮件将使用用户使用的任何邮件服务器(gmail、本地邮件服务器等)使用用户凭据(电子邮件和电子邮件密码)发送

这些凭据以纯文本形式在机器内部,并且可以通过 cat 访问正确的文件。开发人员认为尝试使用任何加密是没有意义的,因为他们在将凭据发送到邮件服务器时总是需要对其进行解密。

现在我不知道该怎么想,有没有正确的方法?还是该功能不安全并且没有安全的方法?

4个回答

你的威胁模型是什么?谁将尝试窃取密码以及如何窃取密码?

如果您以自己的用户身份运行应用程序,并且只有该用户可以访问该密码文件,并且您信任 root,那么就可以了。

理想情况下,应用程序会从它自己的电子邮件帐户发送,所以如果有妥协,影响是最小的(或者客户总是可以为这个应用程序创建一个新的免费邮件帐户)

如果您不信任 root(因为您在 AWS 或类似设备上运行),那么您就不行了。

但在您告诉我们您的威胁模型之前,我们无法知道

您的开发人员需要坐下来讨论良好的安全实践。

从本质上讲,将数据加密保存在磁盘上意味着攻击者所要做的就是访问该文件的正文。你的开发者不能保证他的软件没有安全漏洞,系统上的其他软件没有漏洞,操作系统没有漏洞。他也不能保证系统将在单用户模式下运行,或者在系统上应用良好的文件系统级安全性。他也不能保证硬盘永远不会安装到一个不关心任何系统级安全性的不同操作系统上。

从本质上讲,他确保他与有权访问该操作系统(合法与否)的任何其他人共享用户数据。他在没有最终用户知识的情况下这样做。

但是,您对加密用户数据的想法也只是半途而废。实际上,您根本不应该存储用户的密码 - 您应该使用相关电子邮件客户端的 API,例如 Gmail 的 OAuth2 集成https://developers.google.com/gmail/api/auth/web -server连接到电子邮件帐户。这是执行此操作的正确方法,并且避免了任何凭据,无论是否加密。几乎任何邮件客户端都是如此——与他们给定的 API 集成。很有可能,除了可能在第一次握手时,它不需要知道用户的密码。

无论使用或安全措施如何,以纯文本形式存储密码都被广泛认为是不安全的。如评论部分所述,您的问题是关于用户提供其登录凭据、服务器详细信息以及有关其邮件提供商的信息,以用于向同一用户发送通知。

要非常清楚地以纯文本形式存储密码:这根本不是一种安全的密码处理方式。为了更详细地说明这一点,有人可能会侵入服务器机器,使用应用程序本身的缺陷或错误,或者窃取所做的任何备份。泄露登录详细信息的方式有很多种,我很难找到任何理由让您以纯文本形式存储凭据。

从本文中可以看出,最近发生了很多以明文形式存储密码的重大密码泄露事件。这篇论文还解释了很多关于密码和安全存储密码的概念,对于我认为的开发人员来说值得一读。

开发人员说他需要解密密码才能将密码发送给邮件提供商时是对的,尽管应用程序应该使用邮件服务器提供商的 API 来发送通知,甚至不需要密码。

这是完全错误的。

要发送电子邮件,只需要一个正在运行的 smtp 服务器(不一定需要任何凭据,至少来自最终用户)和一个“收件人”地址。设备有责任提供或使用合适的 smtp 服务器。

无需使用用户的凭据。事实上,我永远不会向任何人提供我的电子邮件帐户密码。除了我没有用。

您的开发人员发送电子邮件的过程完全错误。