Trang chủ › Bài kỹ thuật

Read in English

Lỗi OPC DA, DCOM sau cập nhật Windows: KB5004442, cách kiểm tra và hướng chuyển sang OPC UA

TDL Industrial Automation · Cập nhật lần cuối:

Từ tháng 03/2023 Windows luôn bật gia cố DCOM (KB5004442), OPC DA giữa hai máy phải dùng mức xác thực Packet Integrity. Bài giải thích các giai đoạn, sự kiện 10036 đến 10038, mã lỗi 0x80070005, danh sách kiểm tra theo thứ tự và các hướng bỏ DCOM khỏi mạng: chung một máy, tunnel hoặc OPC UA.

OPC DA chạy được trên một máy nhưng lỗi khi client và server nằm ở hai máy, hoặc tự dưng mất kết nối sau đợt cập nhật Windows: nguyên nhân thường nằm ở xác thực DCOM. Từ bản cập nhật ngày 14/03/2023 của Microsoft, Windows bật vĩnh viễn cơ chế gia cố bảo mật DCOM (DCOM hardening): lệnh kích hoạt (activation) giữa hai máy phải dùng mức xác thực tối thiểu là Packet Integrity, phần mềm OPC nào xin mức thấp hơn sẽ bị từ chối. Trước mắt, cần phần mềm bản mới và tài khoản đúng ở cả hai đầu; về lâu dài, nên bỏ hẳn DCOM khỏi mạng nhà máy.

Vì sao OPC Classic phụ thuộc vào DCOM

OPC Foundation gọi chung OPC Data Access (DA), Alarms & Events (A&E) và Historical Data Access (HDA) là OPC Classic, xây trên công nghệ COM của Microsoft. Client và server cùng một máy thì nói chuyện qua COM cục bộ. Khi nằm ở hai máy khác nhau, cùng các lời gọi đó đi qua DCOM, mà Microsoft mô tả là giao thức đưa đối tượng của ứng dụng ra mạng bằng lời gọi thủ tục từ xa (remote procedure call, RPC).

  • Chỉ có trên Windows. Inductive Automation ghi rõ kết nối OPC COM của Ignition chỉ có trên gateway chạy Windows; hệ điều hành khác phải dùng OPC UA.
  • Lưu lượng đi cả hai chiều. Cũng trang đó giải thích OPC server gọi ngược (callback) về client để trả dữ liệu. Client có thể kết nối được mà tag vẫn báo chất lượng xấu (bad quality) nếu chiều gọi ngược bị chặn.
  • Cổng RPC. Client RPC hỏi bộ ánh xạ điểm cuối (endpoint mapper) ở TCP 135 xem dịch vụ được cấp cổng động nào. Microsoft ghi dải cổng động mặc định từ Windows Vista và Server 2008 trở đi là 49152–65535, và ghi DCOM dùng một cổng ngẫu nhiên trong dải này.

Một trong các lý do OPC Foundation đưa ra khi xây dựng OPC UA là Microsoft đã giảm ưu tiên COM và DCOM để chuyển sang kiến trúc hướng dịch vụ (SOA) đa nền tảng. OPC Foundation cũng mô tả OPC UA là dễ đi qua tường lửa (firewall-friendly).

Ba cách nối OPC DA client với OPC DA serverLàn 1: client và server ở hai máy, nói chuyện qua DCOM trên RPC (TCP 135 và cổng động), cả hai chiều; việc gia cố DCOM áp dụng ở đây. Làn 2: client và server chung một máy, chỉ dùng COM cục bộ, không có DCOM trên mạng. Làn 3: mỗi máy có một tunnel hoặc gateway nói COM cục bộ với ứng dụng OPC DA, giữa hai máy là OPC UA hoặc TCP, không có DCOM trên mạng.Ba cách nối OPC DA client với OPC DA server1 · Hai máy, nối bằng DCOMÁp dụng gia cố DCOMMáy 1 · OPC DA clientSCADA, historianMáy 2 · OPC DA serverdriver xuống PLCDCOM qua RPCTCP 135 + cổng động, hai chiều2 · Chung một máyKhông có DCOM trên mạngOPC DA clientOPC DA serverCOM cục bộ3 · Tunnel hoặc gateway OPC UAKhông có DCOM trên mạngOPC DAclientTunnel /gatewayTunnel /gatewayOPC DAserverqua OPC UAhoặc TCPMáy 1Máy 2Theo Microsoft KB5004442, thông báo của Matrikon và Softing về gia cố DCOM,tài liệu OPC COM và OPC COM Tunneller của Inductive Automation. Hình: TDL tự vẽ.
Hình 1: Ba cách nối OPC DA client với OPC DA server. Trên điện thoại, vuốt ngang để xem hết hình.

Microsoft đã thay đổi gì: KB5004442

Bài hỗ trợ KB5004442 của Microsoft mô tả việc gia cố DCOM để xử lý lỗ hổng CVE-2021-26414. Khi bật, DCOM server đòi lệnh kích hoạt phải ở mức xác thực RPC_C_AUTHN_LEVEL_PKT_INTEGRITY (mức 5, trong công cụ cấu hình hiện là Packet Integrity) trở lên. Thay đổi đi qua ba giai đoạn:

Bản cập nhật Giai đoạn Cách hoạt động
08/06/2021 Giai đoạn 1 Mặc định tắt; bật được bằng một giá trị registry
14/06/2022 Giai đoạn 2 Mặc định bật; vẫn tắt được bằng giá trị registry
14/03/2023 Giai đoạn 3 Luôn bật, không còn cách tắt

Giá trị registry đó là RequireIntegrityActivationAuthenticationLevel trong HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Ole\AppCompat. Microsoft chỉ mô tả nó cho các giai đoạn còn bật tắt được; giai đoạn 3 bỏ hẳn khả năng tắt. Các hướng dẫn cũ dùng giá trị này để tắt việc gia cố không còn tác dụng trên máy đã cập nhật đầy đủ.

Cũng trang đó còn hai điểm:

  • Client tự nâng mức (auto-elevation). Các bản cập nhật từ tháng 11/2022 đến tháng 01/2023 tự nâng các yêu cầu kích hoạt không ẩn danh (non-anonymous) từ DCOM client của Windows lên Packet Integrity, nên đa số client trên Windows chạy được mà không phải sửa, khi cả hai đầu đã có bản cập nhật tích lũy tháng 01/2023.
  • Kích hoạt ẩn danh (anonymous) nằm ngoài phạm vi gia cố. DCOM server nào cho phép kích hoạt ẩn danh thì vẫn cho phép. Đây không phải cách sửa: trên diễn đàn OPC Foundation, quản trị viên cảnh báo DA server chạy không bảo mật sẽ phơi ra cho kẻ tấn công trong mạng.

Phía mã nguồn được giải thích trong bài diễn đàn đó và trong tài liệu (white paper) năm 2022 của Matrikon. OPC client nào tự gọi CoInitializeSecurity, hoặc tự đặt mức xác thực khi tạo đối tượng server, thì phải tự xin Packet Integrity, vì thiết lập riêng của nó đè lên mặc định của Windows. Nếu không, chỉ có bản phần mềm mới của hãng mới giải quyết được; Matrikon ghi rằng chỉnh thiết lập Windows thôi thì không lách được. Cả hai tài liệu này đều viết năm 2022, trước các bản cập nhật tự nâng mức. Nếu trên máy client đã cập nhật đầy đủ mà sự kiện 10037 hoặc 10038 vẫn ghi tên ứng dụng, thì chính nội dung sự kiện của Microsoft cũng bảo liên hệ hãng làm ra ứng dụng đó.

Ba giai đoạn gia cố DCOM theo KB5004442Trục thời gian vẽ theo tỉ lệ từ 05/2021 đến 07/2023. Giai đoạn 1 ngày 08/06/2021: mặc định tắt, registry bật được. Giai đoạn 2 ngày 14/06/2022: mặc định bật, registry vẫn tắt được. Giai đoạn 3 ngày 14/03/2023: luôn bật, không tắt được. Sự kiện 10036 đến 10038 có từ các bản cập nhật tháng 08 đến 10/2021; client tự nâng mức qua các bản cập nhật tháng 11/2022 đến 01/2023.Ba giai đoạn gia cố DCOM theo KB5004442Thêm sự kiện 10036–1003808–10/2021Client tự nâng mức xác thực11/2022–01/202308/06/202114/06/202214/03/202320222023123Giai đoạn 1Mặc định tắt;bật bằng giá trị registry.Giai đoạn 2Mặc định bật; giá trịregistry vẫn tắt được.Giai đoạn 3Luôn bật; giá trị registrykhông còn tắt được.Theo Microsoft KB5004442: ngày các giai đoạn; sự kiện có từ các bản cập nhật 26/08/2021 đến 12/10/2021 (tùyphiên bản Windows); client tự nâng mức từ tháng 11/2022, đủ từ bản tích lũy tháng 01/2023. Hình: TDL tự vẽ.
Hình 2: Ba giai đoạn gia cố DCOM theo KB5004442. Trên điện thoại, vuốt ngang để xem hết hình.

Triệu chứng và ý nghĩa

Microsoft bổ sung các sự kiện lỗi DCOM vào nhật ký System để tìm ra ứng dụng không tương thích. Các sự kiện này chỉ có trên những phiên bản Windows và bản cập nhật liệt kê trong KB5004442, ví dụ từ bản cập nhật tháng 08/2021 cho Windows Server 2019 và tháng 10/2021 cho Windows Server 2012 R2.

Triệu chứng Xuất hiện ở đâu Chỉ ra điều gì
Sự kiện 10036 Nhật ký System, máy server Một user từ một địa chỉ IP bị từ chối vì mức kích hoạt thấp hơn Packet Integrity
Sự kiện 10037 Nhật ký System, máy client Ứng dụng có tên trong sự kiện tự đặt mức xác thực, và đặt quá thấp; Microsoft khuyên liên hệ hãng
Sự kiện 10038 Nhật ký System, máy client Ứng dụng dùng mức mặc định, mức này quá thấp; cũng liên hệ hãng
0x80070005 OPC client E_ACCESSDENIED: tài khoản, quyền hoặc mức xác thực
0x800706BA OPC client Lỗi Windows 1722, RPC server không sẵn sàng: không có đường RPC (mạng, tường lửa, phân giải tên)
Kết nối được, rồi bad quality OPC client Chiều gọi ngược từ server về client bị hỏng (Inductive Automation)
E_CLASSNOTREG, hoặc không thấy server ở máy kia OPC client Thiếu OPC Core Components, gồm cả OPC Server Enumerator (OPCEnum), trên một trong hai máy (Inductive Automation)

Hai mã lỗi lấy từ bảng của Microsoft: 0x80070005 là E_ACCESSDENIED trong danh sách lỗi COM, còn HRESULT_FROM_WIN32 đưa mã lỗi Windows vào dải 0x8007xxxx, nên lỗi 1722 (hệ 16 là 6BA) thành 0x800706BA.

Kiểm tra theo thứ tự

  1. Xác nhận có DCOM tham gia. Matrikon và Softing đều ghi giao tiếp OPC Classic trên cùng một máy không bị ảnh hưởng. Kết nối cục bộ mà lỗi thì nguyên nhân nằm ngoài việc gia cố.
  2. Cập nhật đủ cho cả hai máy. Microsoft khuyên cài bản cập nhật bảo mật mới nhất. Trợ giúp của Rockwell cảnh báo máy đã vá và máy chưa vá không giao tiếp ổn định với nhau, vì hai đầu cần cùng một mức xác thực.
  3. Đọc nhật ký System ở cả hai đầu. Sự kiện 10036 trên server cho biết user và IP của client; 10037 hoặc 10038 trên client cho biết tên ứng dụng.
  4. Kiểm tra phần mềm OPC có hỗ trợ Packet Integrity. Trợ giúp của Rockwell ghi mức xác thực DCOM tối thiểu mà sản phẩm Rockwell dùng đã được nâng lên Packet Integrity, và dẫn sang thông báo PN1581 để xem các sản phẩm bị ảnh hưởng. Thông báo tháng 02/2023 của Softing liệt kê các sản phẩm mà hãng khuyến nghị mạnh dùng tunnel thay cho DCOM, trong đó có dataFEED OPC Suite 5.19 trở về trước, và ghi hãng không hỗ trợ sự cố kết nối OPC Classic từ xa. Trợ giúp Desigo CC của Siemens ghi mọi thành phần OPC trên đường truyền đều phải hỗ trợ việc gia cố. Hỏi từng hãng xem cần bản nào.
  5. Kiểm tra mức xác thực đặt ở đâu. Quy trình thử của Matrikon đặt mức mặc định, và mức của từng OPC server trong DCOM Config, về Packet Integrity; Softing ghi Packet Integrity hoặc Packet Privacy. Phần mềm FactoryTalk và RSLinx Classic thì khác: chúng có thiết lập DCOMAuthLevel riêng (là 5 sau khi nâng cấp phần mềm Rockwell) và không dùng thiết lập trong Component Services. Trợ giúp của Rockwell cũng nêu các tùy chọn tương thích ngược cho hệ lẫn máy cũ, tức là gỡ bản vá của Microsoft hoặc hạ mức xác thực, đồng thời ghi rằng mức dưới 5 không được hỗ trợ khi đã cài bản vá. Cập nhật cả hai đầu mới là cách giữ được lớp bảo vệ.
  6. Kiểm tra tài khoản. Trợ giúp của Rockwell ghi: trong workgroup, mỗi user phải có trên mọi máy tham gia kết nối với cùng tên và cùng mật khẩu, mật khẩu trống thường không dùng được; trong domain thì dùng tài khoản domain. Cấp quyền khởi chạy (launch), kích hoạt (activation) và truy cập (access) của DCOM cho đúng các tài khoản chạy OPC client và server, không cho ai khác.
  7. Kiểm tra OPC Core Components. Inductive Automation yêu cầu cài ở cả hai máy khi kết nối từ xa, mỗi máy dùng gói 32 bit hoặc 64 bit phù hợp với máy đó.
  8. Kiểm tra tường lửa cả hai chiều. TCP 135 và dải cổng động phải mở giữa hai máy, kể cả chiều gọi ngược về client, và chỉ giữa hai máy đó. Bài về tường lửa giải thích vì sao không nên thu hẹp dải cổng động quá mức.

Một số hướng dẫn cũ của các hãng gợi ý cấp toàn quyền cho Everyone và ANONYMOUS, hoặc đặt mức xác thực mặc định là None. Làm vậy là bỏ xác thực: việc gia cố không áp dụng cho kích hoạt ẩn danh, nên server mở cho bất kỳ ai tới được nó qua mạng. Chỉ cấp quyền DCOM cho đúng các tài khoản cần dùng. Nếu client cũ không đạt được Packet Integrity, hãy lên kế hoạch theo một trong các hướng dưới đây.

Từ triệu chứng tới cách xử lýNăm dòng triệu chứng, việc cần kiểm tra và cách sửa: sự kiện 10036 đến 10038, lỗi 0x80070005, lỗi 0x800706BA, kết nối được rồi tag báo bad quality, không thấy server hoặc E_CLASSNOTREG. Nếu client cũ không đạt Packet Integrity: đưa DCOM ra khỏi mạng.Từ triệu chứng tới cách xử lýTRIỆU CHỨNGKIỂM TRAXỬ LÝSự kiện 10036,10037, 10038Ứng dụng nào,mức xác thực bao nhiêuBản phần mềm hỗ trợPacket Integrity0x80070005,truy cập bị từ chốiWorkgroup: cùng tài khoản,mật khẩu ở hai máy; hoặctài khoản domainChỉ cấp quyềncho tài khoảnchạy client, server0x800706BA,RPC serverkhông sẵn sàngMở TCP 135, cổng động;phân giải được tênChỉ mở giữađúng hai máy đóKết nối được, rồitag báo bad qualityChiều gọi ngược vềclient: tường lửa, quyềnMở đường gọi ngược chođúng các tài khoản đóKhông thấy server,hoặc E_CLASSNOTREGOPC Core Components(OPCEnum) ở cả hai máyCài gói 32 bit hoặc 64 bithợp với từng máyClient cũ không đạt Packet Integrity?Đưa DCOM ra khỏi mạng: chung một máy, tunnel hoặcwrapper OPC UA, hoặc OPC UA gốc. Không hạ bảo mật để chạy tạm.Theo Microsoft (KB5004442, bảng mã lỗi COM và mã lỗi hệ thống),Rockwell Automation, Matrikon, Softing và Inductive Automation. Hình: TDL tự vẽ.
Hình 3: Từ triệu chứng tới cách xử lý. Trên điện thoại, vuốt ngang để xem hết hình.

Hướng lâu dài: đưa DCOM ra khỏi mạng

Hướng DCOM trên mạng Thay đổi gì Ví dụ trong tài liệu hãng
Client và server chung một máy Không, chỉ COM cục bộ Cài OPC server lên máy SCADA hoặc historian Giao tiếp cục bộ không bị ảnh hưởng (Matrikon, Softing)
Tunnel hoặc bộ bọc (wrapper) OPC UA Không; COM chỉ chạy cục bộ Phần mềm tunnel hoặc gateway trên các máy Matrikon OPC UA Tunneller, Softing dataFEED OPC Tunnel, Ignition OPC COM Tunneller
OPC UA gốc Không Client và server đều dùng OPC UA OPC UA server trong SCADA, historian, bộ driver hoặc bộ điều khiển

Chung một máy. Nếu cài được OPC DA server lên chính máy SCADA hoặc historian thì đường DCOM biến mất; khi đó máy này cần đường riêng tới bộ điều khiển.

Tunnel hoặc wrapper. Bài trên diễn đàn OPC Foundation gợi ý dùng proxy hoặc wrapper chạy COM cục bộ và OPC UA trên mạng. UA Tunneller của Matrikon kết nối cục bộ với OPC Classic client và server, giữa các thành phần của nó dùng TCP/IP, không phải sửa ứng dụng đang có. Softing khuyên dùng dataFEED OPC Tunnel thay cho DCOM khi kết nối từ xa. OPC COM Tunneller của Ignition đưa các kết nối COM cục bộ ra ngoài qua OPC UA server của Ignition. Hướng dẫn Kepware của PTC cho thấy một cách tương tự: driver OPC UA Client trên một máy đọc Kepware server ở máy khác, còn OPC DA client đọc bản Kepware cục bộ.

OPC UA gốc. OPC UA ra đời năm 2008, chạy trên Windows, Linux và các hệ khác, từ máy tính, máy chủ đám mây tới PLC và vi điều khiển. Phần bảo mật gồm chứng chỉ ứng dụng X.509, ký thông điệp, mã hóa, xác thực người dùng và ghi vết (auditing). Phần 6 của bộ OPC UA lấy cổng opc.tcp 4840 làm địa chỉ cố định (well-known address) của Local Discovery Server; cổng endpoint của từng server do sản phẩm cấu hình. Hướng dẫn của PTC bảo ghi lại cổng đó để mở trên tường lửa, và endpoint mặc định chỉ nhận kết nối có ký và mã hóa. Nên giữ nguyên như vậy: hướng dẫn cũng ghi khi chọn chính sách None thì chứng chỉ không được kiểm tra.

OPC UA nằm thế nào trong zone và conduit thì xem bài về IEC 62443, còn các lớp mà nó nối thì xem SCADA là gì.

Áp dụng trong dự án

  • Liệt kê mọi kết nối OPC Classic: máy client, máy server, phiên bản phần mềm hai đầu, là DA, A&E hay HDA, và có đi qua hai máy không. Historian có thể đọc qua giao diện OPC DA, như bài về historian mô tả.
  • Hỏi hãng bản hỗ trợ Packet Integrity cho từng client và server, và thử trên máy đã vá trước khi nhà máy cài cập nhật.
  • Ưu tiên OPC UA cho kết nối mới và thay dần các kết nối DCOM giữa hai máy trong các đợt nâng cấp.
  • Không hạ bảo mật để chữa cháy: không tài khoản dùng chung quyền rộng, không truy cập ẩn danh, không đặt mức xác thực None, và rule tường lửa chỉ cho đúng các máy liên quan.

Trang kết nối thiết bị hiện hữu lên SCADA của TDL mô tả việc đưa thiết bị BACnet/IP lên SCADA qua gateway và KEPServerEX, còn trang SCADA và historian mô tả việc lấy dữ liệu historian từ PLC và hệ thống bên thứ ba qua OPC UA, Kepware và Modbus. Nếu phần bị lỗi là máy trạm FactoryTalk View SE, xem máy trạm FactoryTalk View SE không kết nối.

Câu hỏi thường gặp

Vì sao OPC DA giữa hai máy tính ngừng chạy sau khi cập nhật Windows?

Từ bản cập nhật ngày 14/03/2023, Windows bật vĩnh viễn việc gia cố DCOM và chỉ chấp nhận kích hoạt từ xa ở mức Packet Integrity trở lên. Phần mềm OPC tự xin mức thấp hơn trong mã của nó, hoặc hệ có máy đã vá lẫn máy chưa vá, sẽ lỗi, thường báo truy cập bị từ chối (access denied).

Còn tắt được việc gia cố DCOM bằng khóa registry không?

Không. Microsoft chỉ mô tả giá trị RequireIntegrityActivationAuthenticationLevel cho các giai đoạn còn bật tắt được, và giai đoạn tháng 03/2023 đã bỏ khả năng tắt. Cách sửa là phần mềm OPC hỗ trợ Packet Integrity, hoặc một đường truyền không dùng DCOM giữa hai máy.

Sự kiện DCOM 10036, 10037 và 10038 nghĩa là gì?

Đó là các sự kiện trong nhật ký System mà Microsoft thêm vào để tìm ứng dụng kích hoạt DCOM dưới mức Packet Integrity. Sự kiện 10036 xuất hiện trên máy server, ghi user và IP của client; 10037 và 10038 xuất hiện trên máy client, ghi tên ứng dụng, tương ứng với mức xác thực tự đặt hoặc mức mặc định.

Việc gia cố DCOM có ảnh hưởng OPC UA hay OPC DA chạy trên cùng một máy không?

Matrikon ghi rằng giao tiếp OPC Classic cục bộ và OPC UA không bị ảnh hưởng, Softing cũng ghi như vậy cho client và server cùng một máy. Việc gia cố chỉ liên quan tới DCOM giữa các máy.

OPC DA qua DCOM cần mở những cổng nào trên tường lửa?

TCP 135 cho endpoint mapper của RPC và dải cổng động, mặc định 49152–65535 từ Windows Vista và Server 2008 trở đi, theo cả hai chiều vì server gọi ngược về client. Chỉ mở giữa các máy liên quan.

Nguồn

Đọc ngày 02/11/2026. Bài viết diễn giải, không trích nguyên văn; đọc tài liệu gốc trước khi thiết kế hoặc thao tác.

Dịch vụ liên quan:
SCADA & historian Kết nối thiết bị hiện hữu lên SCADA