基于安全通信的监控组态软件PLC数据驱动系统的实现
王毅璇;封成玉;王皓
【摘 要】为实现上位机监控组态软件与基于国产可信的PLC之间安全可信通信,提出了一种跨平台的PLC数据驱动系统的实现方案.在对系统进行功能分析的基础上,对系统进行整体设计、模块设计,使安全验证服务独立于数据驱动应用服务,实现了运行和上层应用相隔离.系统采用Qt开发,基于分布式C/S架构,支持国产Linux操作系统,并能平稳移植到Windows操作系统平台上.通过使用安全认证、建立安全通道及采用基于一次性密钥(OTP)理念的密码机制的数据传输方法,保证了通信过程的可靠性、安全性和稳定性,体现了主动免疫防御的设计思想.
【期刊名称】《微型机与应用》
【年(卷),期】2019(038)008
【总页数】6页(P47-52)
【关键词】上位机监控软件;跨平台;PLC通信;安全可信
【作 者】王毅璇;封成玉;王皓
【作者单位】华北计算机系统工程研究所,北京100083;华北计算机系统工程研究所,北京100083;华北计算机系统工程研究所,北京100083
【正文语种】中 文
【中图分类】TN918.1
0 引言
工业控制系统已广泛应用于国家能源领域及民生领域,随着信息技术和网络技术的发展以及“工业4.0”的深入,工控系统网络安全事件不断发生,其安全问题已经影响到生产安全、工业稳定以及国家的战略安全[1-3]。作为工业控制系统监控层级的上位机专用软件,监控组态软件(Supervisory Control and Data Acquisition,SCADA)用于数据采集与过程控制[4],其可靠性和稳定性对于工控系统安全至关重要。本文介绍的监控组态软件,用于国产基于可信计算[5]的密码机制的PLC(增加了密码模块硬件,分配专属公钥和私钥,支持冗余),采用跨平台、分布式C/S架构设计,具备双机双网热备冗余机制,可运行于国产计算机和Linux操作系
统上,支持Windows操作系统,实现了开发及运行环境的双国产化,安全可控。进程间通信 共享内存
PLC数据驱动系统位于监控组态软件的底层,即网络层,是上位机监控组态软件与PLC的通信接口,作为监控组态软件的内部数据源,要求安全可靠且常年不间断连续运行,具有高度的稳定性、扩展性和强大的数据采集能力。系统基于国产可信PLC和密码设备,通过采用安全认证、建立安全通道及采用基于密码机制的数据传输方法,实现了通信过程的强安全、高可信,符合内生安全的主动防御工控安全体系架构的设计思想。本文针对系统的实现,首先对系统进行功能分析,然后进行了系统总体设计,最后对系统与PLC通信的实现方式、方法进行较为详细的阐述。
1 系统功能分析
PLC数据驱动系统主要实现上位机监控组态软件与PLC的数据交互,采用以太网有线的方式与PLC进行数据通信,通过PLC实现对现场设备的实时运行数据的采集,并按上层应用的组态逻辑,下发指令数据到PLC,以实现对设备运行的调节和控制。系统分为上传、下行输出两个部分。上传部分负责从PLC中采集加密的源数据,并进行数据解密和协议解析;下行输出部分负责对上位机下发到PLC的数据进行协议封包、数据加密并输出到PLC。
系统从PLC中采集的数据分为四类:模拟量输入(遥测,即AI)、数字量输入(遥信,即DI)、模拟量输出(遥调,即AO)和数字量输出(遥控,即DO),同时支持多个PLC和批量数据的采集。成批采集的数据中包括实时值和时间戳。采用组态设定的周期向PLC请求数据,周期设定的范围为50 ms~1 s。协议解析功能封装为动态执行库,采用自定义协议,同时可支持Modbus协议、OPC协议等通信协议的解析。采用插件式设计思想,每种协议采用独立的库,灵活可扩展。经系统解析后的采集数据放置于内存的缓冲区,并与上一周期的数据缓冲区中的数据进行比较,如有变化则将变更的数据集放入软件共享内存的数据处理队列中,由软件数据处理分系统进行处理。
监控组态软件将需要下发的遥调、遥控等控制指令数据放入软件内存中的发送队列,数据驱动系统从发送队列中取出指令数据加密后将其发送到对应的PLC,由PLC进行解密处理,然后按PLC中下装的控制逻辑实现对被控设备的调控。系统具备PLC状态诊断功能,即周期检测冗余PLC的主从状态,采集的数据和下发的指令数据仅针对主PLC。另外状态诊断功能以周期发心跳的形式与软件的任务管理进程通信,将当前进程的运行状态发送给软件任务管理系统,并监控对应的PLC通信接口工作状态,在发生故障时发出报警,并将与PLC通信过程的调试记录、通信速率、传输字节数等信息记录在软件日志文件中。
2 系统总体设计
PLC数据驱动系统利用基于可信算法的密码机制与密码设备实现与PLC通信的安全可信。在整个PLC控制系统的人员、上位机、下位机分别增加三种安全相关物理设备:人员密钥、设备密钥、嵌入式加密芯片,其中密钥信息作为各自身份的唯一识别,即私钥。通过权限管理软件,配置系统内部的权限对应关系:不同操作人员的权限、上下位机之间的对应关系等,并生成到白名单文件中。系统拓扑结构如图1所示。
图1 系统拓扑结构
2.1 模块设计
系统主要包含三个子模块:组态模块、上位机密钥服务模块和通信主模块。组态模块用于PLC配置,为管理界面的动态链接库,在软件中是一个独立的调用模块,通过显示的管理界面,可以对控制系统中的PLC进行配置和设定,为通信模块提供必要的参数信息;上位机密钥服务模块作为独立运行的进程,以库的形式封装基于可信计算方法的校验、加解密等服务的接口,供通信模块和组态模块调用;通信主模块在与PLC建立安全通道后,从历史主站周
期向PLC请求数据,接收PLC传来的数据,并将下发的操作指令数据写入目标PLC,实现与PLC通信相关的业务逻辑功能。
2.2 功能设计
监控组态软件与PLC通信流程如图2所示。监控组态软件在通过安全性校验并登录后,根据白名单,将用户密钥和上位机密钥进行相互身份鉴别的校验,校验通过后调用PLC数据驱动系统进程。进程运行后,根据IP地址取出PLC对应的密钥标示值,与PLC做上下位机验签的安全校验,校验通过后给PLC下发登录请求包,在登录成功后建立与PLC通信的安全通道,开始收发数据包。下发数据包在进行数据加密后被发送到PLC。校验运算及数据包加解密是通过调用上位机密钥服务进程完成的,该进程封装了基于可信计算的密钥校验算法,由软件启动。下位机PLC的安全密钥服务程序被下装到PLC中CPU单独的核中独立运行,完成验签、加解密功能,实现了运行与监控相隔离。
图2 监控组态软件与PLC通信流程
基于安全的冗余机制,系统中只有历史主站可以与PLC主站通信,软件下发的控制指令数据
只能通过历史主站下发到PLC主站,下发的数据由操作员站或者历史站具有下发权限(同时具备与下发匹配的用户权限和人员私钥)的人员进行操作产生。上传的数据首先由软件历史主站调用上位机密钥服务模块的解密接口返回源数据,然后将源数据转换为熟数据后,通过软件的站间数据通信系统进行内存实时数据的同步操作,实现数据在历史主站、从站及操作员站间的同步。
系统进程根据组态模块对下位机PLC的配置设定情况及监控组态软件中变量定义模块输出的采集变量表,以不同的周期采集对应PLC的数据,数据驱动系统对上传的数据进行解密和协议解析,根据相应PLC的采集变量表,到数据值对应的监控软件中变量点的全局ID号,将下位机原始数据进行加工,转换为软件熟数据,放入软件内存中的数据缓冲区。
PLC数据驱动系统的工作模式分为主从两种,与PLC进行通信在系统主模式下进行,采用TCP方式,系统通信模块为客户方,PLC为监听方。通信模块采用线程的方式与多PLC进行连接,多PLC采用主从模式,仅每对PLC中的主站与系统通信模块连接。系统根据每对PLC的运算周期,周期向PLC的主站发送数据请求,PLC的运算周期通过单独的逻辑组态软件进行配置,每个PLC的运算周期可配置成不同,单位为ms。PLC主站每50 ms检查是否有新的
数据请求,一旦收到请求,立即将本PLC的所有上传数据封装为数据包,调用下位机密钥服务的加密接口进行数据加密后进行回发。一个回发数据包最大可以是10 KB,可上传本PLC中的所有上传数据,一旦发生一个包无法承载所有数据的情况,则PLC自动采用分包方式,将数据拆分后分批上传给系统通信主模块,每个分包发送间隔为10 ms。
上位机如有操作指令需要下发,无论是在操作员站还是历史从站,下发指令数据包只会传到历史主站,由历史主站调用上位机密钥服务的加密接口进行数据加密后,再下发到对应的PLC。下发也采用请求方式,请求包中包含对应的内存地址和待写入的数值。周期发送请求命令以接收PLC数据,采用事件的方式处理下发的数据,任务调度模式如图3所示。