如何区分存储敏感数据和哈希密码?

信息安全 哈希 数据库 证书 敏感数据暴露
2021-08-30 01:34:49

场景:我有一个带有身份验证系统(经典)的 Web 应用程序。该应用程序基本上是保存敏感数据的数据库(MongoDB)的接口。我正确地散列存储的密码。

假设哈希可以防止攻击者在已经获得对数据库的访问权限时知道密码:

问题 1:当您将所有数据存储在一个数据库中时,是否有哈希密码的意义?

问题 2:分离敏感数据和凭据的正确方法是什么?独立数据库?也许使用 Mongo 的内置身份验证系统进行用户身份验证?

2个回答

关于问题 1

在一般情况下——是的,确实如此。您不知道未来潜在攻击的详细信息,因此您的工作是尽可能努力地实际利用任何漏洞。

如您所知,信息安全的使命是提供三个价值:机密性完整性可用性假设黑客获得了您的数据库的完整副本(这会影响机密性)。能够以用户身份登录,他可以接管完整性(通过修改用户数据并代表他们执行操作)和可用性(例如,通过更改可用于重新获得访问权限的电子邮件)。

在切换到问题 2 之前据我所知,MongoDB 还具有集合级别的访问控制,因此有助于限制攻击传播。您还可以考虑加密数据库中的敏感条目,这样未经授权的只读访问就不会那么重要。

关于问题 2: 没有正确的方法,因为需要根据从风险分析中得出的许多因素来做出安全决策。您可以将用户凭据存储在不同的数据库中或创建单独的身份验证服务器,或使用第 3 方身份验证服务 (OAuth)。

这里的主要目标是在实施成本、支持这些安全控制措施以及在数据泄露时可能造成的潜在损失之间保持平衡。我的直觉是保持简单并遵循基本的安全建议(如密码散列和使用 MongoDB 访问控制工具的访问隔离)结合系统的其他安全控制(如严格的用户输入验证),例如,在OWASP ASVS清单

问题 1:散列密码的要点是,如果攻击者获得了您的数据库副本,它不应该轻易破解凭据以防止他们冒充您的用户。

考虑到许多用户重复使用密码或只是以非常微妙的方式更改密码,这也可能有助于减缓危害向基础设施其他组件的传播。

哈希还可以防止内部人员/不忠诚员工的风险,因为可能对数据库具有完全访问权限的员工即使获得了哈希的副本,也无法使用这些信息来冒充应用程序的其他用户。

问题2:这完全是另一个问题,可能需要单独提出并提供更多细节,以便能够给出更具体或更模糊的答案