为什么OS身份验证被认为对Oracle数据库的安全性较差?


29

根据《Oracle数据库安全性指南》,Oracle将弃用OS身份验证

请注意,REMOTE_OS_AUTHENT参数在Oracle Database 11g第1版(11.1)中已弃用,并且保留该参数仅是为了向后兼容。

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

  1. 如果没有OS身份验证,则应用程序必须将密码存储在各种应用程序中,每个应用程序都具有自己的安全模型和漏洞。
  2. 域身份验证已经必须是安全的,因为如果不是这样,则数据库安全性只会减慢对数据库的访问,但不能阻止它。
  3. 与必须创建一个更安全的域密码的用户相比,创建一个更安全的域密码的用户可以创建的安全性更高,因为必须连接的不同数据库的数量会增加。

您在哪里看到Oracle不赞成使用外部身份验证?
贾斯汀·凯夫

1
@Justin Cave我将使用该信息更新问题。
Leigh Riffel

2
感谢更新。但是,为清楚起见,Oracle并不弃用外部身份验证,而是弃用了通常不太安全的远程外部身份验证(正如Gaius在下面讨论的那样)
Justin Cave

Answers:


16

请考虑以下情形:

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

这不仅容易恶搞,而且戴上了愤世嫉俗的帽子,甲骨文再也不能通过向您出售他们花哨的单点登录产品来赚钱了...顺便说一句,它确实满足了您作为操作系统优势而提出的所有要点。级认证 两种密码比一种更好,这完全是虚假的。大多数人无论如何都会将它们设置为相同(Oracle中没有机制可以防止这种情况)。

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


2
甚至比那更糟。请参阅orafaq的“为什么OPS $帐户在客户端/服务器环境中存在安全风险?” (它们怪怪的窗户,但是您是对的,网络上的任何东西)

3
Windows域上的服务器如何将其纳入其中?即,为了拥有一个包含该域的帐户,攻击者是否必须将其计算机加入域中?或者,攻击者可以在无需实际加入计算机的情况下模拟域的存在吗?
Leigh Riffel

我猜这是最初在所有服务器都是Unix而所有台式机都是Windows的时候写的
Gaius

3
@Leigh-通过将OS_AUTHENT_PREFIX设置为受信任的Windows域,可以使Windows客户端对远程OS的身份验证更加安全。这要求远程客户端位于(或似乎位于)该受信任域上。这大大提高了“琐碎的”将计算机插入备用端口,添加本地用户,然后您就处于“攻击”状态的门槛,但这仍然是相当不错的选择。
贾斯汀·凯夫

1
与它进行实际的AD / Kerberos身份验证并从用户那里获取票证并使用KDC进行验证进行比较和对比,我猜想这是SqlServer在设置为使用Windows身份验证时的作用吗?
araqnid

8

它增加了单点故障并扩大了数据的风险范围。

获得系统访问权限的攻击者将通过OS身份验证访问数据库。通过要求对数据库的更安全访问,潜在的攻击者必须在受感染的系统上升级其特权,以获取root用户或oracle用户(而不是任何用户)的访问权限。

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

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


我知道了,因此,为了简化起见,两个用户名/密码要求比一个更安全。您的观点听起来很合理。
Leigh Riffel

这是一个非常错误的答案-问题不是外部身份验证,而是远程外部身份验证。我将在下面解释。
盖乌斯

@Gaius外部操作系统身份验证是否会极其严格地限制在如果不是远程的情况下毫无价值呢?您是说Oracle不是在使用OS弃用认证,而是仅在远程计算机上弃用OS认证吗?
Leigh Riffel

@Leigh-本地帐户的OS身份验证的主要用例是用于DBA类型的任务,在这些任务中,您在数据库服务器上运行了一堆Shell脚本,这些脚本需要访问数据库服务器上非常强大的帐户。通过操作系统身份验证,可以避免在这些Shell脚本中使用未加密的DBA级别密码。
贾斯汀·凯夫

@Justin批处理作业,一般以shell脚本或其他任何形式实现,以单独的形式实现
Gaius

4

Gaius已经指出了为什么远程操作系统身份验证(与允许您在不指定单独密码的情况下允许本地计算机用户访问数据库的原始操作系统身份验证)相对不安全的原因。

我希望Oracle正在朝这个方向发展,因为它希望鼓励人们使用企业用户(或成熟的身份管理套件),而不是使用经过远程操作系统身份验证的用户。企业用户具有与经过远程操作系统身份验证的用户相同的优势,但是Oracle实际上正在淘汰并攻击您的Active Directory服务器以对用户进行身份验证。您可以获得相同的单点登录收益,而无需将安全检查交给客户端计算机。


LDAP身份验证可以打开另一种蠕虫病毒……我将发布更长的答案。

+1感谢您指出企业用户安全性。我们已经在考虑高级安全性,这使其更具吸引力。
Leigh Riffel

4

您专门指向ident-style身份验证,但我也想指出,将数据库或其他任何登录名绑定到OS登录名的其他方法也同样糟糕。(可以是本地密码文件,LDAP或用于凭据的实际存储的任何文件)

如果允许远程连接到数据库(或Web服务器,或进行身份验证的任何内容),则某些操作系统将忽略可能设置为使暴力破解帐户变得困难的规则(例如,阻止来自失败尝试的IP;锁定)用户一段时间后,出现了一定数量的问题,等等)。通常,这些规则与sshd不是整个身份验证系统绑定在一起。

因此,如果某人能够远程连接到数据库/ Web服务器/任何地方,则他们可以强行使用密码,因为数据库往往没有相同的机制来减慢尝试的速度,一旦找到必要的凭据,就使用ssh。


2
我不确定我是否遵循这里的理由。如果您让Oracle针对LDAP进行身份验证,则必须断开LDAP才能获取密码-密码哈希的本地副本不会像普通的Oracle用户那样被强行使用。如果您担心攻击者殴打您的LDAP身份验证,那么与对Oracle用户进行身份验证相比,您可能会遇到更大的问题。而且,将Oracle配置为在多次尝试失败后锁定帐户,限制允许的IP地址等非常容易。事实上,其中大多数是11g中的默认行为。
贾斯汀·凯夫

@Justin:这只是一个问题,如果您将其绑定,那么登录OS的凭据与登录数据库(或Web服务器等)的凭据相同。听起来好像Oracle在身份验证方面比我上次使用时更好,但是大多数其他数据库却没有。(和Apache不要么,所以MacOS X的服务器用户应该换出mod_auth_applemod_auth_digest_apple默认版本,但如果这个问题在10.6仍然存在我没有测试过)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.