请求的注册表允许访问而没有安全漏洞

Posted

技术标签:

【中文标题】请求的注册表允许访问而没有安全漏洞【英文标题】:Requested registry allow access without security leaks 【发布时间】:2018-04-19 15:13:37 【问题描述】:

现在我正在使用一个带有代码的 Web 应用程序来读取和写入注册表。在 Visual Studio 中调试时一切正常,但在在线测试服务器上却没有运行。我得到的错误异常消息是:

System.Security.SecurityException:请求的注册表访问不是 允许。

这是我正在使用的代码:

  private RegistryKey GetWritableBaseRegistryKey(string extendedPath)
        
            var path = "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall";
            return RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Default).OpenSubKey($"path\\extendedPath", true);
        

我在哪里找到的解决方案:

解决方案 1

您将无法将 AppPoolIdentity 设置为特定组,但是 你可以

    创建本地用户 (compmgmt.msc)

    将用户添加到管理员组 (compmgmt.msc)

    在“高级设置”下将应用程序池设置为在该用户下运行。

显然你知道这是一个非常糟糕的主意 观点,并且永远不应该在前锋上执行 面对服务器。 source

解决方案 2

创建一个单独的控制台应用程序以在管理员中运行该服务 方式,以便您可以访问注册表。这个解决方案是性能 很重,因为您需要运行 2 个单独的应用程序。

解决方案 3

使用此代码允许访问注册表。

RegistryPermission perm1 = new RegistryPermission(RegistryPermissionAccess.AllAccess, "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall");
                        perm1.Demand();

或者这个代码

RegistrySecurity rs = new RegistrySecurity();
                    string currentUserStr = Environment.UserDomainName + "\\" + Environment.UserName;
                    RegistryAccessRule accessRule = new RegistryAccessRule(currentUserStr, RegistryRights.WriteKey | RegistryRights.ReadKey | RegistryRights.Delete | RegistryRights.FullControl, AccessControlType.Allow);
                    rs.AddAccessRule(accessRule);

但是这些在服务器上不起作用,但是在 Visual Studio 中调试时,代码运行良好。

【问题讨论】:

你只是不......为什么你甚至需要访问 Web 应用程序中的注册表? (感觉XY problem) 【参考方案1】:

为了让 Web 应用程序访问注册表,它必须具有足够的权限。因此,解决方案 1 是唯一可行的方案。它描述了将网站应用程序池设置为本地管理员组中的用户。它错过了实际设置您的 IIS 网站以使用新创建的应用程序池的步骤,这就是它可能不适合您的原因。

在 Web 服务器中读取受限注册表的技术过程,尤其是应用程序卸载注册表项,对您来说真的不太可能有用。什么可能的用途是允许 Web 服务器访问服务器自己的应用程序卸载列表?

我怀疑您打算在客户的 PC 上打开该注册表项(我的猜测),这是不可能的。

【讨论】:

旁注:我认为他们得到的错误来自 .Net CAS 而不是 Windows 级别的安全检查,所以他们可能需要 1+3(Windows 权限和 .Net Demand)来托管网络应用程序...

以上是关于请求的注册表允许访问而没有安全漏洞的主要内容,如果未能解决你的问题,请参考以下文章

仅允许 ECR 请求的安全组出口规则

Spring Boot 安全性 - 允许使用过期 JWT 令牌的用户请求

如何使弹簧安全允许使用休息服务

Windows Server 2008 R2 服务器常规安全设置及基本安全策略

在不安全的域上允许 cookie

跨域请求