黑客入侵时 Azure Key Vault 的安全性

Azure Key Vault safety when hacking

我想提高我的网络应用程序的安全性,以防受到攻击。 我的系统中存在以下组件:

现在有应用程序加密存储上传文档的场景。 其工作原理如下:

1) 用户将文档上传到网络应用程序 2)生成随机加密密钥 3) 随机加密密钥存储到 azure key vault 4) sql azure 存储 blob url 和密钥 url

现在我的问题是: 在攻击 Web 应用程序实例的情况下如何更安全地使用密钥保管库?我的意思是 app.config 中有客户端 ID 和客户端密码来访问密钥库,我们需要它来读取和写入密钥。因此,如果我使用或不使用 Key Vault 不会增加黑客攻击 Web 应用程序的安全性,对吗?

So if i use key vault or not does not increase safety in terms of hacking the web app, right?

这完全取决于他们能够破解网站的级别。在您描述的情况下,如果他们获得了您的源代码,那么-是的,游戏结束了。但它不一定是那样的。这真的取决于您的配置。

然而,大多数时候,开发人员忘记了安全是一种分层方法。当您谈论数据加密和相关主题时,它们通常是最后一道防线。因此,如果恶意行为者获得了对加密敏感数据的访问权限,他们就会破坏其他易受攻击的区域。

Key Vault 是一个 API 包裹着一个 HSM。使 Key Vault 或 HSM 安全的原因在于,一旦导入/创建,就无法从中提取密钥。此外,加密(在您的情况下为加密/解密)操作发生在保险库内,因此密钥永远不会暴露,即使在内存中也是如此。

如果有人能够破解您的 Web 应用程序并获得您的密钥保管库的凭据,他们就可以使用保管库来解密数据。因此,在这种情况下,您可以重新生成 Key Vault 的凭据,并仍然继续使用保管库中的相同密钥——因为它们从未公开过。这意味着攻击者尚未解密的任何加密数据仍然是安全的,因为密钥从未暴露过。

通常情况下,HSM 并非旨在将大量密钥仅存储在几个真正重要的密钥中。您可能需要考虑使用密钥包装解决方案,因为您在保管库中只有一个密钥。

您可能希望在您的配置中加密客户端 ID 和客户端密码并在运行时解密它们 - 这增加了另一层安全性。现在,攻击者需要在您的云服务/VM 上 运行 时从您的应用程序内存中读取密钥(这不是一件容易的事)。或者攻击者需要获取配置文件和用于加密您的配置值的证书的私钥(比读取内存更容易,但仍然需要大量访问您的系统)。

问题不在于密钥保管库,而是您使用客户端密钥的解决方案。客户端密码是一个常量字符串,不被认为是安全的。您可以使用证书和指纹作为 "client secret"。您的应用程序需要读取存储在网络应用程序中的 .pfx 文件,然后解密以获取指纹。成功检索指纹后,即可检索 Key Vault 机密。此外,在 Key Vault 中,您可以使用自己的证书,而不仅仅是 Secret 中的屏蔽字符串。这就是所谓的"nested encryption".

黑客如果可以访问您的 app.config,他除了不知道存储在何处的 .pfx 文件的路径之外什么也得不到,甚至不知道它的样子。生成相同的 pfx 文件变得不可能。如果可以的话,他会打破整个加密世界。