Oracle正在根据《 Oracle数据库安全性指南》弃用OS身份验证,其中指出:


注意,在Oracle
Database 11g第1版中已弃用REMOTE_OS_AUTHENT
参数( 11.1),并且仅出于向后兼容性保留



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


没有OS身份验证的应用程序必须在各种应用程序中存储密码,每个应用程序都有自己的安全模型和漏洞。
域身份验证已经必须具有安全性,因为如果不是这样,那么数据库安全性只会减慢对数据库的访问,但不能阻止数据库访问。
只需记住一个域密码的用户就可以创建比创建更安全的域密码的用户。随着必须连接的不同数据库数量的增加,可以使它们创建的安全性甚至更低。


评论

您在哪里看到Oracle正在弃用外部身份验证?

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

感谢更新。不过,为清楚起见,Oracle并不反对使用外部认证,而是弃用了通常不太安全的远程外部认证(如Gaius在下面讨论)

#1 楼

考虑以下情形:


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


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

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

评论


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

–乔
2011年1月27日15:40

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

–雷·里菲尔(Leigh Riffel)
2011-1-27的16:40

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

– Gaius
11年1月27日在16:51

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

–贾斯汀·凯夫(Justin Cave)
11年1月27日在17:08

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

–araqnid
2011年1月28日,1:12

#2 楼

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

获得系统访问权限的攻击者将通过OS身份验证访问数据库。通过要求对数据库进行更安全的访问,潜在的攻击者必须在受感染的系统上提升其特权,以获得root用户或oracle用户(而不是任何用户)访问权限。数据库。如果没有外部访问权限,并且计算机已完全安全,那么权限问题就没有意义了。但是,如果开发人员具有访问权限,则操作系统级别的用户权限会增加潜在的安全灾难的范围。

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

评论


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

–雷·里菲尔(Leigh Riffel)
2011年1月6日在16:05

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

– Gaius
2011年1月27日13:54

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

–雷·里菲尔(Leigh Riffel)
2011年1月27日19:16

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

–贾斯汀·凯夫(Justin Cave)
2011-1-27在19:46

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

– Gaius
2011-1-27 23:43

#3 楼

Gaius已经指出了为什么远程操作系统身份验证(相对于普通操作系统身份验证,相对而言,本地操作系统身份验证允许本地计算机用户在不指定单独密码的情况下访问数据库)相对不安全。我希望Oracle正在朝这个方向发展,因为它希望鼓励人们使用企业用户(或成熟的身份管理套件),而不是使用经过远程操作系统身份验证的用户。企业用户具有与经过远程操作系统身份验证的用户相同的优势,但是Oracle实际上正在淘汰并击中您的Active Directory服务器以对用户进行身份验证。您可以获得相同的单点登录收益,而无需将安全检查交给客户端计算机。

评论


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

–乔
2011年1月28日上午11:37

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

–雷·里菲尔(Leigh Riffel)
11年1月28日在12:46

#4 楼

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

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

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

评论


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

–贾斯汀·凯夫(Justin Cave)
2011-1-28 14:36

@Justin:这只是一个问题,如果您将其绑定,那么登录OS的凭据与登录数据库(或Web服务器等)的凭据相同。听起来,Oracle在身份验证方面比上次使用时更好,但是大多数其他数据库都没有。 (Apache也没有,因此MacOS X Servers用户应将mod_auth_apple和mod_auth_digest_apple换成默认版本,尽管我尚未测试问题是否在10.6中仍然存在)

–乔
2011-1-28 15:58