默认公共设置

默认公共设置

有人知道 SQL 2005/8 的默认 PUBLIC 设置是否存在安全风险?

我运行了 sp_helprotect 并且它列出了 PUBLIC 授权,现在有一位审计员告诉我我存在安全风险,因为 PUBLIC 可以访问系统信息。在我开始陈述我的案例之前,我想看看是否有人可以提供任何链接或信息来详细说明默认设置如何导致安全风险。

记录显示,审计员提到这些设置允许破解密码,因为他们可以查看密码哈希值。我无法验证该设置是否允许通过系统目录视图查看该信息。

提前致谢

答案1

在 2000 年,公共角色可以访问的内容比 2005 年以后多得多 - 这可能是审计员问题的根源。用户/架构分离应该可以解决大多数问题,但您应该创建一个具有最小权限的用户并查看它可以看到的内容。您需要尝试:

master.sys.databases(以及任何其他可以泄露实例中存储内容的信息)master.dbo.syslogins(包含密码哈希值 - 2000 年的 sysxlogins)

你还想更改 master 中的所有 XP,使 public 角色对它们中的任何一个都没有执行权限。有一篇文章和一段代码可以做到这一点这里

请注意,不建议以任何方式更改公共角色本身。

希望这可以帮助!

PS 如果 syslogins 表中的密码返回 NULL,这是因为登录未使用 SQL 身份验证。使用仅限 Windows 是消除此风险的好方法,但您仍需要为(已禁用的)SA 帐户设置密码。

答案2

以下是一篇 BOL 文章,解释了公共角色如何影响所有用户的元数据可见性: http://msdn.microsoft.com/en-us/library/ms187113(SQL.90).aspx

有些东西通常需要对每个人都可见,否则就会出问题(sys.databases 就是一个例子,即使它没有在本文中列出 - 由于历史原因,每个人都可以检索服务器上所有数据库的列表,但您当然可以撤销此权限)。当您开始撤销对某些元数据的公共访问权限时,事情往往会变得有趣。

举个例子:如果你撤销公共权限以从 sys.databases 中选择,事情就会大不相同。正确的做法是撤销公共权限以查看任何数据库 - 然后 sys.databases 将被“过滤”,你只能看到你拥有权限的数据库。但这并不能给你带来真正的安全,因为任何人仍然可以通过执行 SELECT DB_NAME(X) 并为 X 提供任意值来枚举所有数据库(这是一个已知的漏洞)。

至于密码,在 SQL2005 和 SQL 2008 的默认配置中,通过公共角色,您只能通过 sys.syslogins 查看两个登录名:您自己和 sa。而且您看不到任何一个的密码哈希。因此,通过这种方式获取哈希进行破解不是一种选择。而且破解这些哈希无论如何都需要暴力破解方法,因此它只适用于弱密码或字典密码。

我与审计员打交道的经验是,他们往往会对公共许可等小事感到困惑,却忽略了大事。YMMV。

高血压

相关内容