作者 | 天融信科技集团 赵凯锋
随着OPC 在数以千计的产品中顺利采用,今天的OPC 已经作为自动化系统之间的标准接口而应用在自动化金字塔的不同层次上,它甚至用在很多不是预先设计的领域。还有其它领域的制造商希望利用这样的一个OPC 标准,但却因为 OPC 的COM依赖性和它访问DCOM的远程访问的局限性而不能使用。
OPC UA(Unified Architecture,统一架构)的诞生是希望为现有所有的基于COM的规范,建立一个没有损失任何功能和性能的真正替代平。此外,它必须满足能够描述复杂系统的丰富和可扩展的建模能力,以及平台独立的系统接口的所有需求。
OPC UA的目的是为工厂和企业之间的数据和信息传递提供一个和平台无关的互操作标准。但是在开发的过程中,OPC UA定位准确,延伸到了工业自动化之外的范围。现在的OPC UA已经涉及楼宇自动化,安全,家庭自动化,发电,包装以及石化领域。由于OPC UA的高度可扩展的架构,对智能嵌入式设备的部署也是很好的定位。
如图1-1所示,UA服务器可以直接安装在设备上并和UA客户端进行数据通信。且UA客户端也可以直接内嵌在UA服务器中,使UA服务器之间可以进行通信。UA服务器可以通过内嵌的UA客户端获取多个控制器(UA服务器)的数据,形成一个聚合服务器,并向外提供服务。管理系统通过UA客户端提供的数据进行管理。
![原创 | OPC UA工业协议分析 原创 | OPC UA工业协议分析]()
为了优化不同的用例,OPC UA规定了不同的传输机制。其第一个版本为高性能企业内部网通信定义了一个优化的二进制TCP,并为防火墙友好的互联网通信定义了一个映射,接受类似Web服务,XML、HTTP等的互联网标准的通信。这两个传输都使用同一个用于Web服务的基础消息的安全模型。抽象的通信模型不局限于特定的协议映射,它允许将来添加新的协议。
目前OPC UA支持的四种通信栈如图2-1所示,本文主要讲解基于TCP的UA格式。
![原创 | OPC UA工业协议分析 原创 | OPC UA工业协议分析]()
![原创 | OPC UA工业协议分析 原创 | OPC UA工业协议分析]()
图2-2
应用程序认证和授权:OpenSecureChannel请求和OpenSecureChannel应答中的应用程序实例证书。
产品认证和授权:CreateSession应答和ActivateSession请求报文中的软件证书
用户认证和授权:ActivateSession请求和ActivateSession应答报文
客户端创建socket之后,发送Hello报文,其中包括客户端支持的buffer大小。服务器接收报文后返回Acknowledge报文完成buffer大小协商。协商好的buffer大小会上报给SecureChannel层,其中SendBufferSize字段指定在此连接上发送的MessageChunk的最大长度。
Hello/Acknowledge报文一般只能发送一次,若对端再一次接收到该报文会报错并关闭socket。如果socket创建之后,服务器很长一段时间(可配,不超过2分钟)内没有接收到Hello报文会主动关闭socket。
客户端接收到Acknowledge报文后,紧接着会发送OpenSecureChannel请求报文,服务器若接受该channel会将该socket和一个SecureChannelId关联,后续服务器发送应答报文时会根据SecureChannelId决定使用哪个socket发送。客户端接收到OpenSecureChannel应答报文后也会做相同的操作。
图3-1 描述了OPC UA 客户端和服务器建立连接的过程。
客户端发送CloseSecureChannel请求报文主动关闭连接,服务器接收该报文后会释放该channel相关的所有资源,但不会发送CloseSecureChannel应答报文。如图3-2所示。
![原创 | OPC UA工业协议分析 原创 | OPC UA工业协议分析]()
通用的OPC UA tcp的消息格式如图4-1所示,包含一个消息头和消息体。
![原创 | OPC UA工业协议分析 原创 | OPC UA工业协议分析]()
4.1.1 消息头
消息头包含一个消息类型和消息长度,MessageSize代表的整个消息头和消息体的总长度。
![原创 | OPC UA工业协议分析 原创 | OPC UA工业协议分析]()
MessageType类型
4.1.2 消息体
4.1.3 报文示例
![原创 | OPC UA工业协议分析 原创 | OPC UA工业协议分析]()
4.2UA secure conversation
![原创 | OPC UA工业协议分析 原创 | OPC UA工业协议分析]()
4.2.1 消息头
非对称安全头:非对称安全消息头只能用于OpenSecureChannel请求和相应,因为OpenSecureChannel是唯一使用公钥和私钥加密的服务消息。此包头共包含以下3方面:标识消息加密算法的安全策略,校验消息签名的发送方证书,加密消息证书的指纹。
对称安全头:对称安全消息头适用于除OpenSecureChannel之外的其他消息。在这种情况下,报头只包含TokenId,以标识签名和加密消息的对称密钥集。
序列头:序列头包含一个数字以标识数据块,它所在的消息体(如编码的服务消息)不能放进单个块,因此不得不拆分为多个块使用。
4.2.2 报文示例
![原创 | OPC UA工业协议分析 原创 | OPC UA工业协议分析]()
![原创 | OPC UA工业协议分析 原创 | OPC UA工业协议分析]()
![原创 | OPC UA工业协议分析 原创 | OPC UA工业协议分析]()
服务器使用RegisterServer服务去向发现服务器注册,提供该服务器的描述信息。
客户端使用FindServers服务去查找OPC UA服务器,并获得多个服务器的描述信息。客户端向其想访问的服务器发送GetPoints请求,服务器返回其所有会话终端的描述信息。然后客户端选择一个会话终端发起OpenSecureChannel请求。
![原创 | OPC UA工业协议分析 原创 | OPC UA工业协议分析]()
会话服务集仅用于建立一个安全可靠的通信通道,而不是从一个系统传递信息到另一个系统。该服务集共有四个服务,有两个服务用于在两个程序之间通过握手方式创建一个会话,一个服务用于关闭会话,另一个服务用于取消在服务调用。
5.3NodeManagement Service Set
节点管理服务集用于定义服务以添加和删除地址空间及其之间的引用。
客户端使用视图服务集的浏览服务在地址空间或作为地址空间子集的视图中进行导航。
5.5SecureChannel Service Set
安全通道服务集用于打开通信通道,以确保与服务器交换消息的机密性与完整性。
查询服务集用于向服务器发出查询,OPC UA 查询是一个通用的服务集,它提供了一个独立于存储机制的底层查询功能,可用于访问各种OPC UA 数据存储和信息管理系统。OPC UA查询允许客户端访问由服务器维护的数据,而不必了解用于内部存储的逻辑模式数据。
5.9Monitoredltem Service Set
客户端定义监视项以订阅数据和事件。每个被监视的项标识要监视的项以及用于发送通知的订阅。要监视的项可以是任何节点属性。
5.10Subscription Service Set
OPC统一架构(OPC UA)是OPC基金会为过程自动化及其他领域的数据通信提供的新标准。OPC UA使用优化的UA协议,保持着传统OPC的性能,而且增加了分布式系统之间通信的安全性和可靠性。
OPC基金会基于微软DCOM的OPC规范(如DA,HAD和A&E)非常成功。预计在未来当OPC UA统一了OPC规范的所有功能之后,将会取而代之。
![原创 | OPC UA工业协议分析 原创 | OPC UA工业协议分析]()
本文始发于微信公众号(关键基础设施安全应急响应中心):原创 | OPC UA工业协议分析
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
1
https://cn-sec.com/archives/212659.html
复制链接
复制链接
-
左青龙
- 微信扫一扫
-
-
右白虎
- 微信扫一扫
-
评论