有谁知道 sql 2005/8 的默认 PUBLIC 设置存在任何安全风险?
我运行了 sp_helprotect,它列出了 PUBLIC 授权,现在我有一位审计员告诉我,我有安全风险,因为 PUBLIC 可以访问系统信息。在我开始介绍我的案例之前,我想看看是否有人可以提供任何链接或信息,这些链接或信息将详细说明默认设置如何导致安全风险。
作为记录,审计员提到这些设置允许破解密码的能力,因为他们可以查看密码哈希。我无法验证该设置是否允许通过 sys 目录视图查看该信息。
提前致谢
有谁知道 sql 2005/8 的默认 PUBLIC 设置存在任何安全风险?
我运行了 sp_helprotect,它列出了 PUBLIC 授权,现在我有一位审计员告诉我,我有安全风险,因为 PUBLIC 可以访问系统信息。在我开始介绍我的案例之前,我想看看是否有人可以提供任何链接或信息,这些链接或信息将详细说明默认设置如何导致安全风险。
作为记录,审计员提到这些设置允许破解密码的能力,因为他们可以查看密码哈希。我无法验证该设置是否允许通过 sys 目录视图查看该信息。
提前致谢
2000 年以来,公共角色所获得的权限比 2005 年以后要多得多——这可能是审计师问题的根源。用户/模式分离应该解决大多数问题,但您应该创建一个具有最小权限的用户并查看它可以看到什么。你会想尝试:
master.sys.databases(以及任何其他可能泄露实例中存储内容的信息)master.dbo.syslogins(其中包含密码散列 - sysxlogins on 2000)
而且您还想更改 master 中的所有 XP,以便公共角色对其中任何一个都没有执行权限。这里有一篇文章和一段代码可以做到这一点。
请注意,不建议以任何方式更改公共角色本身。
希望这可以帮助!
PS 如果您在 syslogins 表中返回 NULL 密码,那是因为登录没有使用 SQL 身份验证。仅使用 Windows 是消除此风险的好方法,但您仍需要为(已禁用)SA 帐户设置密码。
这是一个 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的默认配置下,通过public角色只能通过sys.syslogins看到两个登录名:yourself和sa。而且您不会看到任何一个的密码哈希。因此,以这种方式获取用于破解的哈希不是一种选择。无论如何破解这些哈希都需要蛮力方法,因此它仅适用于弱密码或字典密码。
我对审计师的经验是,他们倾向于对公共权限等小事感到困惑,但却错过了大事。YMMV。
高温高压