为什么操作系统身份验证被认为是 Oracle 数据库的安全性差?

Lei*_*fel 29 oracle security oracle-11g-r2

根据Oracle 数据库安全指南,Oracle 正在弃用 OS 身份验证,其中说

请注意,REMOTE_OS_AUTHENT 参数在 Oracle 数据库 11g 第 1 版 (11.1) 中已弃用,保留只是为了向后兼容。

此外,大多数安全信息和工具都认为 操作系统(外部)身份验证是一个安全问题。我试图理解为什么会这样。以下是我看到的操作系统身份验证的一些优点:

  1. 如果没有操作系统身份验证,应用程序必须将密码存储在各种应用程序中,每个应用程序都有自己的安全模型和漏洞。
  2. 域身份验证必须是安全的,因为如果不是,那么数据库安全只会减慢对数据库的访问,但无法阻止它。
  3. 只需记住一个域密码的用户可以更轻松地创建更安全的域密码,而不是随着他们必须连接到的不同数据库数量的增加而创建更不安全的数据库密码。

Gai*_*ius 16

考虑以下场景:

  1. gaiusOracle 服务器上有一个 Unix 用户,有外部认证,所以在 Oracle 中有一个对应的用户叫ops$gaius. 登录到 shell 后,我还可以直接登录到我的 Oracle 模式,而且我的 cron 作业也不需要在脚本中嵌入密码。
  2. 允许远程操作系统身份验证,假设 LAN 是 100% 安全并且客户端可以信任(与rlogin/rsh过去通常允许的相同)
  3. 攻击者通过任何方式将他或她的笔记本电脑连接到 LAN,知道我在那里工作,并在他们的笔记本电脑上创建一个本地用户,名为gaius并以该用户身份运行 SQL*Plus
  4. Oracle 看到(即OSUSERV$SESSION) isgaius并将该远程用户登录为ops$gaius

这不仅很容易被欺骗,而且戴上我愤世嫉俗的帽子,甲骨文不能再向你出售他们花哨的单点登录产品赚钱了......顺便说一下,这确实满足了你作为操作系统优势提出的所有观点- 级别身份验证。两个比一个更好的密码完全是假的;大多数人无论如何都会将它们设置为相同(Oracle 中没有防止这种情况的机制)。

一般原则是,当攻击者具有物理访问权限时,在软件中进行防御是极其困难的。永远不要相信客户。

  • 位于 Windows 域中的服务器如何影响这一点?即攻击者是否必须将他们的计算机加入域才能拥有一个包含域的帐户,或者攻击者是否可以模拟域的存在而无需实际加入他们的计算机? (3认同)
  • @Leigh - 您可以通过将 OS_AUTHENT_PREFIX 设置为受信任的 Windows 域来使 Windows 客户端的远程操作系统身份验证更加安全。这要求远程客户端位于(或似乎位于)该受信任域中。这大大提高了一个微不足道的“将计算机插入备用端口,添加本地用户,然后你就进入”攻击的标准,但它仍然很容易被击败。 (3认同)
  • 甚至比这更糟糕。请参阅 [orafaq 的“为什么 OPS$ 帐户在客户端/服务器环境中存在安全风险?”](http://www.orafaq.com/wiki/Oracle_database_Security_FAQ#Why_are_OPS.24_accounts_a_security_risk_in_a_client.2Fserver_environment.3F)(他们指责 Windows,但是你是对的,它是网络上的任何东西) (2认同)

Bri*_*ton 8

它会增加单点故障并扩大数据的风险面。

获得系统访问权限的攻击者将通过操作系统身份验证访问数据库。通过要求对数据库进行更安全的访问,潜在的攻击者必须提升他们在受感染系统上的权限以获得 root 或 oracle 访问权限,而不是任何用户。

这个问题是外部访问数据库的功能。如果没有外部访问并且机器是完全安全的,那么权限问题就没有实际意义了。但是,如果开发人员具有访问权限,则操作系统级别的用户权限会增加潜在安全灾难的范围。

考虑使用多层访问来限制安全漏洞的范围,并为任何用户、应用程序或客户端提供所需的访问权限,而无需为每个实例创建操作系统级别的帐户。