工业以太网EtherNet/IP协议安全分析
2020-10-22
来源:信息技术与网络安全
工业是一个国家的根本的经济命脉,工业控制系统(Industrial Control Systems,ICS)是工业自动化体系结构的重要组成部分。随着工业4.0时代的到来,工业网络的安全性日益重要。工业以太网EtherNet/IP协议使用原有的基于标准的以太网技术,已经被大量使用在工业网络控制系统中,其安全性一直备受关注,国内对工业网络协议安全性的研究很少。使用形式化分析工具Scyther在Delov-Yao模型和强安全模型下对EtherNet/IP协议核心成员通用工业协议(Control and Information Protocol,CIP)所采用的加密认证TLS协议进行形式化分析。对下一代CIP协议嵌入TLS1.3具有实践价值,该方法对其他工业网络协议进行有效的安全分析有理论指导意义。
EtherNet/IP协议简介和CIP介绍
EtherNet/IP协议结构和性能
EtherNet/IP(EtherNet/IP Industry Protocol)是由两大组织ODVA(Open DeviceNet Vendors Association)和ControlNet International于2001年正式推出的新的协议成员。使用通用工业协议(CIP)作为上层协议,结合传统的以太网协议技术和标准的TCP/IP(Transmission Control Protocol/Internet Protocol)协议共同构成EtherNet/IP协议的体系结构,该协议是基于CIP协议的工业网络协议。EtherNet/IP协议有较好的互操作性能,而且数据传输距离长,传输速率高。CIP协议独立于物理层和数据链路层之上,与设备介质无关,可以将其移植到高性能的网络设施上。CIP封装协议的主要任务是定义和规范了如何封装和传输上层协议的报文,以及如何管理和利用下层TCP/IP链接,起到承上启下的作用。EtherNet/IP协议网络遵循开放的OSI模型。图1是EtherNet/IP协议结构图。
由于以太网数据传输速度的大幅度提升和工业网络交换机技术的快速发展,在网络高负载通信时EtherNet/IP协议也能够满足工业网络对实时性和确定性的要求。EtherNet/IP协议使用高效的数据传输模式——生产者/消费者模式(Producer/Consummer)。端点之间的联系不是通过具体的源和目的地址关联起来,而是一个生产者可以对应多个消费者,使数据的传输达到了最优化。网络源节点按照内容将数据进行标识,采用组播的方式同时发送到多个节点,网络上其他节点按照自己的需要通过标识符来确定要接收的数据。避免了带宽浪费,节省了网络资源,同时提高了系统的通信效率。能够很好地支持系统的控制、组态和数据采集,并且非实时性通信和实时性通信可以在同一子网中实现。但工业控制系统遭受越来越多的威胁,主要是网络协议自身的缺陷引起的,EtherNet/IP协议也存在安全问题,需要进一步提高安全防护能力。
CIP报文传输方式
CIP协议报文传输方式有显式报文和隐式报文传输两种方式。当CIP协议嵌入UDP协议用于发送隐式报文(Implicit(I/O)Message)。而CIP协议嵌入TCP协议用于发送显式报文(Explicit Message)。两种报文使用的封装协议不同,传输的消息类型也不同。CIP将应用对象之间的通信关系抽象为连接,并与之相应制定了对象逻辑规范,使CIP协议可以不依赖于某一具体的网路硬件技术,用逻辑来定义连接的关系,在通信之前先建立连接获取唯一的标识符(Connection ID,CID),如果连接涉及双向的数据传输,就要分配两个CID。
显式报文针对组态信息、设备配置、故障诊断等非实时性信息,其优先级较低(包含解读该报文所需要的信息),通过点对点的报文在两个对象之间以交互的方式进行传输。报文本身携带有关地址、数据类型和功能描述等相关内容,接收设备根据内容做出相应的处理,采用源/目的地址传送方式。在通信之前通过TCP协议获得标识符CID,之后进行数据报文传输。使用通信端口0XAF12f。图2是CIP显示报文连接。
隐式报文用于节点之间传输实时I/O数据、实时互锁,优先级较高(隐式报文中不包含传送地址、数据类型标识和功能描述内容),全部作为有效数据,传输效率高,在报文头部有数据标识符,消费者根据标识符选择自己需要的内容,通过UDP协议将实时I/O消息传送到总线上。图3是CIP隐式报文连接。
CIP通信安全
目前CIP协议仍然使用IETF标准TLS1.2(Transport Layer Security:RFC 5246)和DTLS1.2(Datagram Transport Layer Security:RFC 6347)协议版本保证显示报文和隐式报文数据传输的安全性。TLS协议安承担着Internet上通信的安全,造成越来越多的威胁,目前TLS1.2存在很多已被证明的安全隐患,TLS1.3(Transport Layer Security:RFC:8846)协议是2018年3月更新的最新版本,较之前的TLS1.2版本有较大的改变,修改了部分内容,其安全性更高,这为EtherNet/IP协议的安全带来新的挑战和利益,因为其应用层CIP协议的安全性取决于TLS和DTLS协议安全保障能力。为了最大程度提高EtherNet/IP协议的安全性能,必须保证其应用层协议CIP的安全性,所以最终在CIP协议中必须支持TLS1.3版本。TLS1.3在CIP协议中的支持预计要3~6年才能实现,TLS协议在握手期间实现秘钥建立和认证,身份验证和秘钥的建立很大程度上来说对CIP层和EtherNet/IP是透明的。TLS协议保证在不安全的传输通道上使用加密确保数据的安全传输。而DTLS协议是TLS转换而来的,采用同TLS相同的设计方法,所以本文只对TLS协议进行形式化分析。
TLS协议保障在TCP传输安全性,客户端和服务端建立TCP连接之后,建立TLS会话,实现TLS握手和TLS记录协议。TLS协议由很多子协议组成,其中核心协议是记录协议和握手协议,TLS握手协议负责身份验证和秘钥建立(包括TLS版本确定和秘钥交换以及后续使用的秘钥算法),记录协议通过使用客户端和服务器协商后的秘钥进行数据加密,TLS记录协议主要用来识别TLS中的消息类型(通过“Content Type”字段的数据来识别握手、警告或数据),以及每个消息的完整性保护和验证。图4是TLS协议实现客户端和服务端建立会话的初始配置过程。
CIP报文传输分为隐式报文传输和显式报文传输,显式报文使用TCP传输,在TCP之上的应用可以使用TLS来保证传输信息的安全性。但是TLS并不能保证UDP的传输安全,DTLS是在TLS协议框架上扩展出来的。其协议结构基本上同TLS相同,在隐式报文传输中使用UDP协议,对使用UDP协议通信的传输使用DTLS协议进行加密处理。TLS和DTLS层次结构如图5所示。
TLS协议形式化分析及实验结果
Scyther性能简介
Scyther软件是由牛津大学教授CAS CREMERS使用Python语言开发的一款功能很强的用于验证和表征安全协议的自动化协议形式化分析工具,由于Python语言可以快速生成用户界面,使用Python语言开发的软件具有良好的人机交互界面,因此Scyther软件具有可以对协议分析攻击轨迹的输出功能,便于理解协议存在的漏洞。Scyther软件的协议分析采用Athena算法,使用该算法使得Scyther软件可以支持多协议并行分析,该工具是安全协议形式化分析的最新技术,支持分析与时序相关的协议,同时可以寻找协议的多种攻击,输出协议角色执行轨迹和攻击图。除此之外,Scyther软件对无限会话和无限状态集合的协议给出明确的终止,其中实现多协议的并行分析解决了传统分析工具的状态空间爆炸问题,Scyther形式化分析工具内置了Delov-Yao模型和强安全模型,所以敌手的攻击模式设置简单。并且在攻击漏洞和攻击误报等性能方面也表现较好。
Scyther敌手模型和语义操作
强安全模型是通过敌手定义更强的攻击能力,决定了敌手能力在完全掌握了通信网络的基础上,具备腐蚀化长期私钥和临时秘钥等能力,Scythe可以通过敌手询问组合的方式选择安全模型,设置方便,并且有明确的终止。在强安全模型下可以同时添加会话秘钥泄露、随机数泄露、状态泄露等。图6是Scyther软件敌手模型设置界面。
Scyther定义安全协议结构模型如图7所示。
Scyther使用SPDL语言规定了一系列的操作语义和操作原语,基本的操作语义如表1所示。
对TLS协议形式化安全分析
对TLS1.2协议进行形式化分析,本文采用Scyther- Compromise-0.9.2版本,运行在Intel(R) Core(TM) i5-7400 CPU@ 3.00 GHz、操作系统是Linux kali 4.19.0-kali3-amd64、8 GB RAM的电脑上(赋予至少4 GB以上的内存),具体的使用软件及工具参见表2。
TLS协议会话形式化分析过程
首先使用Scyther工具的SPDL语言对TLS握手协议交互的过程进行形式化的描述,分别在Delov-Yao模型和强安全模型下对该协议进行形式化分析。SPDL语言对协议的描述是基于角色的,在定义了协议交互使用的变量之后,整个协议的交互过程通过参与协议每个主体发生的事件集合表示。其中send和recv事件表示该主体发送和接收消息的事件,目标属性的描述通过claim事件完成,利用claim事件可以对角色的认证性、变量的机密性等进行描述。Scyther-Compromise工具可以方便地更改协议分析的安全模型,该工具的敌手的攻击分析能力可以通过选项的形式供用户选择。
CIP协议嵌入到TCP报文传输的时候,在实现客户端和服务端身份认证的时候,首先建立TLS会话,通过对协议版本、密码算法和认证方式以及公钥加密技术的协商,进入协议握手阶段,图8是TLS握手协议流程图。
(1)客户端首先发起请求,交换hello协商算法、
随机数、协议版本等信息。
(2)交换必要的密码学参数,客户端和服务器生成预主秘钥。
(3)双方交换数字证书,客户端验证服务端证书通过后取出证书中的公钥。
(4)通过预主秘钥和交换的随机数生成主秘钥。
(5)为之后的记录层提供安全参数。
(6)秘钥确认,进行通信。
根据TLS握手协议分析涉及的2个实体(Client、Server),协议形式化定义2个角色a和b分别表示客户端和服务器。
实验结果
Scyther采用黑盒验证思想,每个角色从自身的角度判断是否满足安全目标或者安全属性,工业网络最初与用户应用网络Internet是分开的,像CIP、EtherNet/IP没有考虑传输安全类问题,缺乏固有的安全机制。近些年研究人员公开报告了CIP和EtherNet/IP中许多漏洞,因为EtherNet/IP协议使用基于CIP的以太网协议,固然也存在安全隐患,图9是Scyther-Compromise工具在Delov-Yao模型下对TLS握手协议的形式化分析输出的攻击路径图,图10是在该模型下验证TLS握手协议秘钥协商的机密性,结果显示在该模型下不存在攻击威胁。
图11是在Scyther-Compromise工具中通过添加选项长期私钥泄露、会话秘钥泄露、随机数泄露以及状态泄露的强安全模式设置参数界面。图12是在强安全模型下对TLS握手协议机密性验证,结果显示存在至少4个攻击,证明在强安全模型下,TLS握手协议不能保证秘钥的机密性。
结论
本文分析了EtherNet/IP协议的结构和性能,其核心组成成员应用层CIP协议的安全性取决于加密认证协议TLS的安全保证能力,使用Scyther工具对TLS协议进行形式化分析,设置敌手模型分别为Delov-Yao模型和强安全模型下进行验证,从输出的攻击轨迹图,证明在强安全模型下TLS协议存在长期秘钥泄露导致主体的长期私钥泄露的危险。由于秘钥传输过程中传输的机密性取决于长期私钥的安全性。实验证明TLS握手协议在强安全模型下传输秘钥不安全,TLS协议无法保证CIP协议通信的安全,导致了使用CIP作为EtherNet/IP协议的核心协议在应用层的传输不够安全。未来在EtherNet/IP协议嵌入TLS1.3版本的时候不得不重新考虑整体安全性。
内容节选自《信息技术与网络安全》2019年第七期《工业以太网EtherNet/IP协议安全分析》一文,作者田学成,徐英会)