绕过Windows DCOM服务器安全功能
13.06.2022
21.07.2022更新:Prosys Sentrol OPC UA & Classic SDK完成修改。
21.06.2022更新:Prosys OPC Classic客户端现已修复。
Microsoft在DCOM中发现了一个漏洞 (KB5004442, CVE-2021-26414),并决定实施强化更改,这些更改将被应用于下一次Windows更新。
这一变化影响到使用远程连接的OPC Classic应用程序,OPC基金会也发布了有关此问题的通知.。
更新的时间表如下:
2021年 6月8日 | 硬化更改可用,但默认情况下已禁用。 |
2022年6月14日 | 更新中默认启用强化更改。您仍然可以禁用更改。 |
2023年3月14日 | Windows更新中将强制执行强化更改。 |
这些更改将影响OPC Classic客户端应用程序的使用,这些客户端连接到另一台计算机上运行的OPC Classic服务器(使用Distributed COM)。同一台计算机内的连接不受影响(使用COM)
当服务器计算机中的Windows更新后,强化将生效。因此,需要更新在其他计算机上运行的客户端应用程序。
受影响的Prosys OPC产品
硬化变化直接影响s
- OPC UA网关版本1.5.8及更低版本
- Prosys OPC客户端版本2.0及更低版本
- 使用Prosys Sentrol 7.4版或更早版本构建的OPC Classic客户端应用程序
固定产品
- OPC UA网关版本1.5.9
- OPC Classic客户端版本2.1.0
- Prosys Sentrol 版本7.5.0
克服自己产品中的问题
Prosys Sentrol 7.5.0及更高版本默认情况下将以所需的alPacketIntegrity
安全级别来初始化COM,因此您只需使用新的Sentrol库重新编译应用程序。
如果您仍在使用Prosys Sentrol 7.4.0或更早版本,则必须在OPC Classic客户端应用程序的项目源代码中添加以下内容:
program Xxx;
uses
PsComUtils,
...
begin
PsInitComSecurity(alPacketIntegrity, ilIdentify);
...
在这些版本中,ComSecurity默认使用alConnect
级别初始化。这在过去足以进行远程连接,但在Windows强化后,服务器将不再接受该级别的连接。
请注意,只要您的应用程序在同一台计算机上通过OPC Classic进行连接,尽管有此设置,连接仍应正常工作。
移至OPC UA
解决此问题的另一种方法是避免OPC应用程序之间的远程DCOM连接。相反,您应该考虑使用OPC UA连接,例如将OPC UA网关应用为隧道器。
或者,您应该考虑在自己的应用程序中支持OPC UA,Prosys Sentrol也可实现这类程序应用。
启用和禁用更改
可以使用以下Windows注册表项启用和禁用更改(直到2023年3月14日):
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Ole\AppCompat\
RequireIntegrityActivationAuthenticationLevel (DWORD value)
值1表示启用强化,0表示禁用强化。
请注意,您必须重新启动计算机才能使注册表项中的更改生效。
该功能已于2021年 6月8日推出,因此,如果您的Windows操作系统中有最新更新,您可以试用。
测试
例如,通过将Prosys OPC客户端版本2.0远程连接到Prosys OPC Simulation Server,您应该能够看到效果。(注意最新的2.1版本已经正确初始化COM,因此它也可以连接到被加固的服务器。) 如果在服务器中禁用了强化,并且已将DCOM和防火墙配置为启用连接,则应该能够查看服务器列表并连接到仿真服务器。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Ole\AppCompat\
RequireIntegrityActivationAuthenticationLevel=0 (DWORD value)
(更改后重新启动)
确保已在服务器所在计算机的DCOM配置中打开对OpcEnum服务的访问权限。它还必须至少以“连接”身份验证级别运行。
在服务器中启用强化后,客户端应用程序中会出现“拒绝访问”错误。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Ole\AppCompat\
RequireIntegrityActivationAuthenticationLevel=1 (DWORD value)
(更改后重新启动)
或者,您可以尝试只连接到服务器。如果客户端计算机中也安装了ProgID,则可以使用ProgID,例如’Prosys.OPC.Simulation
‘;否则,您需要在服务器字段中使用CLSID,例如’{EB3A5F8E-7938-464C-AEFA-898335B1E6B5}
‘。
在服务器中启用强化后,客户端应用程序中会出现“拒绝访问”错误。
您还可以在服务器计算机中启用DCOM错误日志记录,以验证这一点。为此,请添加以下注册表项:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Ole\
CallFailureLoggingLevel=1 (DWORD Value)
之后,您应该在Event Viewer - Windows Logs-System中看到以下错误(您可以通过在“开始”菜单中键入’Event Viewer’来启动):
最后,当您有一个已正确初始化COM安全属性的应用程序时,您应该能够再次连接。请继续关注,我们将很快更新Prosys OPC客户端。
Jouni Aro
Chief Technology Officer
Email: jouni.aro@prosysopc.com
Expertise and responsibility areas: OPC & OPC UA product development, project work and customer support
Tags:
comments powered by DisqusProsys OPC Ltd
Prosys OPC是OPC和OPC UA软件领域中拥有20年技术经验的行业佼佼者。 OPC和OPC UA(Unified Architecture)是工业和高科技公司使用的通信标准。
最新博客文章
SimServer How To #3: 使用OPC UA客户端模拟服务器上的数据更改
关于如何使用OPC UA客户端在OPC UA服务器上写入新数据的分步教程(分为两部分)。
如何在生产分析项目中取得成功
工业4.0分析项目将在未来几年内成为显著增长的业务。阅读如何绕过最常见的陷阱以及成功交付项目。
Prosys OPC UA Forge为什么是工业4.0工厂的重要组成部分
如今,边缘计算应用程序提供了比OPC UA聚合服务器更广泛的功能。事实上,它是工业4.0工厂的主要组成部分。"