在 dcomcnfg 中允许 AppPool 本地激活权限 System Wide 是否存在很大的安全风险?

Is allowing the AppPool local activation permission System Wide in dcomcnfg a big security risk?

我最近一直在尝试使用 IIS AppPool 标识而不是网络服务或本地系统。

因此我遇到了丑陋的错误

The machine-default permission settings do not grant Local Activation permission for the COM Server application with CLSID {6E46607A-7347-471B-A98C-BC9E49B07248} and APPID Unavailable to the user IIS APPPOOL\MyAppPool SID (S-1-5-82-476059244-1685105758-59475158-1390954050-72429515) from address LocalHost (Using LRPC) running in the application container Unavailable SID (Unavailable). This security permission can be modified using the Component Services administrative tool.

您可能会注意到我的 APPID 在此错误中丢失,我搜索了注册表并找出了它是哪个组件(也通过调试)。

这是一个 VC++ 进程外 OLE/COM 服务器,用于处理来自我们网络服务器的请求。 (是的,1990 年代称为)。我不完全确定为什么这涉及 DCOM,设计上没有任何 'distributed',可能更多是偶然或 VS2008 默认 MFC/OLE 服务器模板的人工产物?

在使用 Google 的强大功能时,我遵循了更改此组件的 dcomcnfg 设置的典型路线,以允许我的 IIS AppPool\MyAppPool 用户获得本地激活权限(我实际上都试过了! ), 并确认 w3wp.exe 与 运行 为同一身份

我还确定这个 exe 是那个用户readable/executable。

但是错误仍然存​​在。

只有通过设置相同的权限机器范围(通过“我的电脑”节点,而不是单个组件节点),组件才能正确加载。 这感觉像是一个很大的安全风险。是吗?

在失败的情况下,我尝试使用进程监视器来发现任何注册表项或文件访问问题,或者确定哪些其他组件可能需要访问。但是什么都没有抬起头来。

鉴于在系统范围内设置 DCOM 权限可以解决问题 - 我确实觉得还有另一个 DCOM 组件或服务需要设置权限,但我找不到哪个。

所以 a) 有没有办法进一步诊断这个问题?嗅出 DCOM 做出的决定?是否有中央 DCOM 代理也需要权限集? Debugging/Process 监视器似乎没有帮助。 b) 是否可以在机器范围内设置 AppPool 本地激活策略?

非常感谢帮助我做出正确决定的任何人。

Q1。给你的 App Pool 帐户本地 DCOM 激活权限是不好的做法,computer-wide?

A1:是的,不好按照书上的说法Secure DCOM Best Practices

It isn’t a good idea to loosen these permissions from the default values

问题 2:为什么组件仍然失败?

A2:这是问题的组合:

  1. 进程监视器确实发现了一个问题,即我的 AppPool 身份无法读取注册表项 HKEY_CLASSES_ROOT\WOW6432Node\AppID\{C33D7656-D310-4684-9482-A486787E4E3B}。为我的 AppPool 身份启用读取权限让我更进一步。

  2. 有关 AppID 不可用的事件日志消息是一个线索。所请求的 class 没有 AppID REG_SZ 条目。所以安全设置没有被拾取。我需要确保存在以下密钥:HKEY_CLASSES_ROOT\WOW6432Node\CLSID\{6E46607A-7347-471B-A98C-BC9E49B07248} with String Value AppID={C33D7656-D310-4684-9482-A486787E4E3B}

根据 MSDN 文档AppID, and What is AppID