加密数据库是否可以防止管理员帐户遭到入侵?

信息安全 加密 数据库 系统妥协
2021-08-30 11:07:13

我正在与某人讨论防止数据库服务器上受损管理员帐户泄露数据的方法。另一个人建议对数据库中的静态数据进行加密。这听起来是个好主意,但我不确定这是否会在这种情况下保护数据。

我的想法是,如果攻击者拥有管理员帐户,他们也将能够访问加密密钥。在典型配置中,会是这种情况吗?系统是否可以设计为不会,同时仍然可以实际管理和使用?我可以看到管理员在登录时提供了密钥,但我不知道这样做的安全隐患......

我的威胁模型如下:合法管理员帐户的用户名和密码被泄露。我们的攻击者使用该帐户远程登录并下载数据库。我了解 MFA 和其他访问控制会在这里保护,但假设它们已经失败或被规避。我只是对加密在这里的效果感到好奇。

现在我意识到这绝对会归结为实施具体细节,但我不熟悉数据库管理,所以我正在努力为假设系统提供详细的设置。

3个回答

是的,存在这样的系统;它被称为应用程序级加密在该系统下,加密密钥(或至少密钥加密密钥,或 KEK)仅对应用程序可用。数据在存储到数据库之前由应用程序加密,并且从数据库中检索加密的 blob 以由应用程序解密。

这样做的好处是一种双重控制——可以对整个数据库执行批量操作而没有太多限制的 DBA 只能提取加密数据。持有 KEK 的应用程序管理员可以解密数据库中的任何内容,但仅限于经过批准的接口,这些接口可以零碎工作,但不能批量工作。它使得对解密数据的滥用更难执行,也更容易被发现。

也有缺点,主要是无法索引或搜索数据库中加密数据的明文特征。此外,它需要编写应用程序和数据库来支持它;与整个磁盘或整个数据库加密不同,它不像拨动开关那么容易。

在数据库服务器上,可以存在两个不同的管理员帐户:系统管理员帐户和数据库管理员帐户。@gowenfawr 的答案已经解决了数据库管理员的情况,所以我将专注于系统管理员。

在这种情况下,你就输了。无法保护机器免受管理员的侵害,因为他们对系统上的任何文件都具有完全访问权限。由于服务器通常支持无人值守的重新启动,因此应用程序必须能够提取数据库解密密钥,并且具有管理员权限的人也应该能够提取该密钥,因为它可以冒充应用程序用户。

有一些可能的缓解方法。一种是数据在客户端加密时。在这种情况下,应用程序只处理加密数据,无法访问明文数据,因此即使完全访问机器和数据库,也无法解密任何内容。这是一种非常安全但相当不方便的方式:如果用户丢失了密钥,则数据肯定会丢失。正因为如此,系统管理员通常非常不愿意忽略它们的安全模型。

任何其他方式只能是混淆:机器必须可以访问密钥或至少解密过程。找到它可能会变得非常复杂,因此您可以希望能够在攻击者真正提取任何明文数据之前关闭大门,但只有当您拥有一个全球安全系统来分析甚至明显合法的访问时才有意义当帐户以不寻常的方式使用时发出警告。你以经典的威胁风险/缓解成本问题结束......

最好的方法是将数据库服务器和应用程序服务器的机器和管理员分开。这样数据库机器不知道解密密钥,因此数据库管理员无法提取它。应用程序管理员无法从数据库中提取所有内容。但它仍然可以访问应用程序可以访问的任何数据。简单地拥有不同的管理员组是有成本的,在这里威胁风险/缓解成本问题再次适用。

我的威胁模型如下:合法管理员帐户的用户名和密码被泄露。我们的攻击者使用该帐户远程登录并下载数据库。

任何到您的网络的远程连接都应该受到 2FA 的保护(尤其是任何管理员连接)。这将减轻您在这里的威胁。此外,根据业务需求,我想禁止从 VPN VLAN 访问任何包含敏感数据(例如相关数据库)的 VLAN……如果您是虚拟公司,这可能是不可能的。

我的威胁模型如下:合法管理员帐户的用户名和密码被泄露。我们的攻击者使用该帐户远程登录并下载数据库。我了解 MFA 和其他访问控制会在这里保护,但假设它们已经失败或被规避。我只是对加密在这里的效果感到好奇。

至于加密的使用……人们可以将加密密钥存储在一个安全的保险库中,该保险库在需要知道的基础上提供基于角色的访问。如果此管理员不是此数据库的管理员,这将减轻相关特定数据库的风险。