记忆中的辣椒

信息安全 记忆 胡椒
2021-08-28 10:08:11

据我了解,辣椒的想法的一个问题是,如果它作为您代码的一部分存储,那么如果黑客可以访问您的代码,他们就可以读取它。

所以我想知道,将辣椒存储在内存中不是更好吗?我正在考虑以这样一种方式运行服务器,即辣椒可用于服务器的内存,而不是在环境、进程列表或 shell 历史记录中可见。要获得它,黑客需要以运行服务器的用户或 root 用户身份运行内存调试器。甚至可能在 RamCrypt 之类的东西下运行该进程,以在运行时加密其内存。

该场景是在云 Linux 机器上运行服务器的场景。

在这种情况下,有没有更好的储存辣椒的方法?还是内存中的想法有问题?

1个回答

首先:您绝对正确,它不能与您的代码一起存储,没有秘密应该。

它显然需要由服务器保存在内存中,因为它需要被使用。但是,它不能仅在内存中只要保留一个使用胡椒散列的密码,它就必须可用。如果它只保存在内存中,那么每台服务器和每次重启都会有不同的辣椒。

真正的问题变成:在哪里坚持它

此时,这与存储任何敏感的密码材料(例如:私钥)相同。您有很多选择,其中一些是:

  • 使用云 KMS/Vault(例如:Google/AWS KMS、Azure Vault 等)加密/存储辣椒。直接或使用云 KMS 加密辣椒并存储加密的辣椒(加密的辣椒可以存储在不太敏感的地方,但仍然具有受限的权限)。但密钥仍保留在 KMS 内部。
  • 与上面的HSM相同。
  • 滚动你自己的秘密存储系统keywhizVault这样的东西可能非常强大,但这些不是简单的部署和管理系统。
  • 在设置或启动时将密钥部署到服务器。这转移了获取辣椒的责任,但最终的持久存储建议仍然适用(它只是为您提供了更多选择)。

所有这些背后的一般想法是,要访问辣椒,您应该证明您可以控制服务器。这并不能阻止在服务器上拥有足够权限的攻击者,但这不是辣椒的用途。如果他们具有该级别的访问权限,他们可以将您的二进制文件替换为记录明文密码的二进制文件。