可编程控制器原生的信息安全设计
2018-04-19朱毅明
朱毅明
(和利时集团,北京 100176)
0 引言
PLC是一种工业计算机系统,采用的硬件和软件在基础架构上与其他的计算机系统并无实质性的不同,不可避免地存在与其他计算机系统相同或相似的缺陷和漏洞,也不会免除在信息安全方面遇到的挑战。
1 PLC信息安全困境
自20世纪70年代诞生以来,PLC硬件采用“主控制器+IO+通信”,在线软件采用“嵌入式操作系统+实时控制运算引擎+应用组态代码”,离线开发软件采用“工程管理+硬件配置工具+IEC61131-3图形化语言组态工具+编译器工具+调试工具”的基本架构,并未发生革命性的变化。尽管各大PLC厂家每隔十年左右都会推出新一代产品,在控制性能、控制规模、开发环境等方面有很大的提高,但在PLC内部信息安全的改进却乏善可陈。究其根本原因,并不是PLC厂商没有技术能力在信息安全方面采取改进措施,而是由于PLC本身属于广泛应用、充分竞争的成熟工业控制设备,大部分工业客户认为自身的信息安全风险不大,自然不会对增加的信息安全功能埋单。
由于PLC属于工业关键控制设备,一旦停机,企业的损失远大于PLC采购成本,工业用户要求PLC满足365天常年连续不间断运行的要求。对于PLC设计人员,PLC的可靠性和稳定性一直都是一个巨大的挑战。大型PLC系统的研发和测试周期长达2~3年,开发成本高昂,目前在市场上尚未出现成熟的、具备原生信息安全设计的PLC产品。
图2 增加安全协处理器后的PLC硬件架构
随着工业互联网和物联网技术的发展,PLC从单体化的工业控制设备逐步演变成网络化的复杂控制系统,不但主控制单元与IO单元之间存在现场总线通信,而且在主控制器与主控制器之间也存在工业实时网络通道;另一方面随着智能制造系统集成技术的快速推进,必须打通PLC与SCADA或MES的双向数据交换通道。原来相对封闭的PLC运行和开发环境已不复存在,现在的PLC面对的是开放、复杂、不确定的工业互联网环境,信息安全的风险迅速增高。随着2017年6月1日开始正式实施的《网络安全法》的严格执行,企业承担工业控制系统安全的主体责任,国内工业企业客户对于PLC信息安全解决方案的需求快速增加。
图1 传统的PLC硬件架构
用于PLC外挂补丁式的信息安全升级措施确实能够发挥很大的作用,对于大部分攻击场景都有良好的防御性能,但是大部分外挂式补丁对于PLC系统的实时性和可靠性都有不小的影响。一方面,常见的具备网络报文深度解析功能的工业防火墙需要增加大约几十毫秒的传输延迟,如果用于PLC与MES的边界防护问题不大,但是如果用于PLC与PLC之间的协同控制就很难满足实时性要求。另一方面,如果将工业防火墙串接在PLC与SCADA(或DCS)之间,一旦工业防火墙故障,可能会导致整个生产工艺的中断,而工业防火墙大多基于商用的Linux和X86平台,软硬件系统的复杂度远高于工业控制系统,对于工业控制系统整体可靠性影响很大。
2 原生信息安全的PLC硬件设计
由于工业用户对于长期运行可靠性和稳定性的强烈要求,PLC的总体设计是基于简单即可靠的奥卡姆剃刀原则,如无必要,不应增加系统的复杂度。在这个原则的指导下,PLC开发的技术路线偏向于保守,大部分传统的PLC软硬件中都找不到与信息安全相关的设计。
传统的PLC硬件架构如图1所示,实质上它是一个典型的嵌入式计算机,主要包括处理器、RAM、程序存储器、工业IO接口、通信接口等。
在传统的PLC硬件的基础上增加安全协处理器,实现可信启动、完整性度量、报文加解密、身份认证等功能。为了满足国家对于工业信息安全的需求,安全协处理器采用国产芯片产品和FPGA的组合,支持符合国密算法标准的对称和非对称算法。增加安全协处理器后的PLC硬件架构如图2所示。
PLC冷启动顺序从原来的直接从主CPU启动改为从先启动安全协处理器,读取程序存储器,度量在Flash中系统程序代码的完整性后,再可控启动PLC主CPU。
PLC主CPU正常启动后,读取加密存储的用户代码,交由安全协处理器校验完整性并解密后进入正常的控制流程。在PLC正常运行状态下,安全协处理器主要负责PLC运行状态和网络攻击的监测,以及基于硬件芯片的网络报文。安全协处理器一旦发现网络攻击,将触发保护机制强制主CPU退出正常运行模式,进入网络保护运行模式,严格过滤网络报文,关闭远程下装、用户代码调试、配置修改等功能,维持正常的控制保护逻辑。
除了增加安全协处理器之外,PLC原有的一些硬件设计也需要进行修改。
丁主任看着潘美丽,潘美丽的脸依然拉得老长,瓮声瓮气地:最主要的是今后这些孩子怎么养啊?我的牛奶不喝了,给孩子们换茶叶盐巴吧。
PLC采用的微控制器芯片大多支持在系统编程功能(ISP),在PCB设计时会保留JTAG接口,用于系统程序的烧录和调试,通过这些接口可以访问到PLC的核心代码和数据,存在信息安全隐患。在原生信息安全的PLC设计中需要封闭微处理器的相关功能,并将存放于外置Flash的代码和数据进行加密处理。
PLC存放系统程序和用户程序的Flash需要在实体上分离,并在硬件电路上采取防范措施,严格控制对于系统程序的修改。
3 原生信息安全PLC的软件设计
PLC软件主要包括编程开发软件、在线运行软件、HMI软件(可选)等部分。
3.1 PLC编程开发软件
PLC编程开发软件一般运行于Windows或Linux操作系统,处于一个开放的运行环境,无论是操作系统还是网络环境,都存在不少的漏洞和缺陷。大部分的恶意攻击都是通过控制PLC编程开发软件,将恶意控制代码以合法的装载方式远程注入到在工业现场运行的PLC系统,对工业生产造成严重的破坏,震网病毒也正是通过STEP7编程软件修改在线运行的用户控制逻辑代码和关键数据最终达成攻击目的。
PLC编程开发软件主要包括工程管理、硬件和网络配置工具、IEC61131-3图形化编程和编译工具、用户应用代码下装和调试工具等组成部分,主要存在的信息安全问题如下:
(1)用户应用代码缺少防护。PLC编程开发软件在打开用户工程时大多会要求输入正确用户名和密码进行身份鉴别,但是实际上不少PLC的用户程序代码采用二进制或文本的方式明码存储,并且缺少文件完整性检查措施,可以轻易打开并修改;另外就是存在无伪装、简单加密的用户名和密码存储文件,这种身份鉴别措施基本上属于防君子不防小人的,对于恶意的攻击基本不具备防护能力。
(2)用户应用代码下装过程缺少严格的身份鉴别。传统的PLC用户应用代码下装过程的过于简单,极端情况下,只要正确输入目标PLC的IP地址或设备名,任何一台能够连接到PLC编程网络端口、运行PLC编程开发软件的PC都具备装载、修改、调试用户程序的能力。
为了消除PLC编程开发软件在基本架构设计上的信息安全风险,首先需要对用户应用代码的源文件、中间文件和目标文件采用基于用户自定义私有秘钥的加密措施,在文件和内存中不保留秘钥,增加数字签名等文件完整性检验手段,验证源文件与目标文件的关联一致性,设定两级文件编辑权限,一级是查看,二级是修改,只有输入正确秘钥的用户才能正常执行打开、编辑和编译等操作;其次采用基于USBKey证书的身份认证,只有拥有合法证书的操作者采用对特定的PLC进行下装和调试操作,编程开发软件与在线控制运行软件网络传输的报文采用基于PKI的公私钥协商方式进行加密处理,加解密符合国密算法标准。
采用严格的信息安全措施会降低PLC编程开发软件的用户体验,特别是USBKey证书的应用对用户在现场的编程操作造成很大的困扰。在整个体系中需要考虑PLC生产商、分销商、集成商和最终用户的需求,建立合理的CA、RA的证书管理体系,减少现场维护的灵活度。
3.2 PLC在线运行软件
PLC在线运行软件是PLC长期稳定可靠工作的关键。PLC在线运行软件主要包括嵌入式操作系统、控制算法引擎、在线自诊断和工业网络通信协议栈等部分,主要存在如下信息安全问题:
(1)PLC在线运行软件的系统程序代码缺少完整性校验,即使被恶意修改也无法及时发现。
(2)用户应用程序代码和数据的下装缺少严格的授权。PLC编程开发软件与在线运行软件通过网络实现用户程序代码下装和在线调试的功能,简单的“用户名+口令”无法保证安全。
(3)全部网络数据明码传输,且上位机(HMI或SCADA)的身份无严格的校验,容易受到重放攻击,导致工业生产现场的误动作。通过PLC外部的加密设备可以实现PLC网络传输过程的透明加密,但是无法对PLC内部的授权管理模式进行改进。
(4)嵌入式操作系统和通信协议栈存在漏洞或缺陷。由于升级固件需要停止PLC运行,且大多数情况下工业现场操作规程规定在PLC固件升级后需要重新测试大部分控制功能和性能,因此PLC在工业现场基本不存在升级固件的可行性。
(5)PLC的用户应用代码权限过高。PLC编程开发软件编译生成的用户应用代码包括
中间代码和目标机器码两大类型,为了提高运行效率,不少厂家的PLC采用直接下装目标机器码的方式,但是在运行过程中,为了保证控制的实时性,用户应用代码往往设定过高的运行级别,一旦被恶意修改,可能会产生严重的后果。
工业信息安全需求需要在PLC开发的需求分析阶段加以考虑,通过开展安全分析,寻找危险和风险,并在设计过程中逐步化解风险,部分设计思路如下:
(1)在硬件上增加安全协处理器实现信任链的传递,并实现主处理器系统代码的完整性度量。
(2)采用CA、RA、证书、公私钥、数字签名的身份鉴别体系,保证PLC用户应用程序代码和数据的完整性和正确性。
(3)采用基于公私钥的秘钥交换方式和对称加密的网络报文传输方式实现PLC与上位机的数据报文加密处理,为了降低PLC侧的CPU负荷,可以采用安全协处理器完成相关的加解密工作。
(4)采用安全协处理器或单独的通信处理器对网络报文进行可配置策略的深度过滤,过滤策略需要与PLC的组态关联,由PLC编程开发软件自动生成基本规则模板,人工补充修改。
(5)下装的用户应用代码采用中间代码的方式,,可采用类似虚拟机的方式在PLC中执行用户应用代码,实现对于用户应用代码行为的有效监控。离线设定安全边界条件或规则,在线实时检查,一旦发现用户应用代码控制行为异常,可以立即采取措施降低危险发生的可能性。
4 结论
本文讨论了在PLC设计阶段需要考虑的信息安全需求和原生的部分设计解决方案,可以为PLC内部的信息安全设计提供参考。
[1] 周浩,黄双等.嵌入式PLC的信息安全策略设计与实现[J].计算机科学,2013,40(9):125-127.
[2] 于立业,薛向荣,张云贵,等,工业控制系统信息安全解决方案[J].冶金自动化,2013,37(1):5-11.
[3] 邵诚,钟梁高,一种基于可信计算的工业控制系统信息安全解决方案[J].信息与控制,2015,44(5):628-633.