谢敏敏, 王 勇
(上海电力大学 计算机科学与技术学院, 上海 200090)
IEC 61850是电力系统的一项国际标准,其主要目标是增强多厂商电力公用事业的互操作性和减少成本损耗。在技术含义中,该标准定义了电力系统自动化中存在的所有设备的服务、任务和功能,可以映射到许多传统协议[1-2],主要应用在变电站系统间的通信中。然而工控协议在设计之初更加注重功能和命令,没有考虑加密、认证等安全认证条件,再加上变电站系统的许多设备都是由通信网络连接的,导致这种互联性在带来更高效率的同时,也使得传统封闭的电源组件及通信协议更易遭受网络的攻击,多种针对以太网的攻击都可以对IEC 61850通信安全造成影响。例如2016年乌克兰电网遭受黑客攻击,致使70万乌克兰人民无电可用。总之,当黑客对电力系统通信网络发动攻击时,目前的变电站系统并没有做好充足的技术准备保证通信系统的信息安全乃至整个变电站的安全稳定运行。所以对变电站系统的通信安全的攻击防御研究是目前亟需完成的重要任务。
针对这一问题,本文重点研究IEC 61850的安全通信。根据当前存在的问题,用 IEC 61850服务器和客户端搭建试验环境进行通信测试,针对其通信过程面临的风险进行攻击,最后根据攻击结果提出算法,以提高数据传输的安全性。
IEC 61850将变电站通信系统分为3层:间隔层、变电站层和过程层。IEC 61850 标准提供制造报文规范(Manufactoring Message Specification,MMS)、面向通用对象的变电站事件(Generic Object Oriented Substation Event,GOOSE)和采样值(Sample Value,SV)。3类通信协议满足变电站3层结构需求[3]。MMS同行服务用于间隔层与站控层设备之间的通信,重在保护与监控主机;GOOSE 通信服务满足间隔层设备之间、间隔层与过程层设备之间的数据传输服务;SV传输服务完成过程层到间隔层的设备传输实时的电压、电流数据采样。
GOOSE协议采取组播技术,数据单元大小约1 500 Byte,时限要求4 ms;报文包含sqNum(序列号)和stNum(状态号)。无事件发生时,sqNum随着报文的发送而增加,stNum保持不变;当事件发生时,stNum累加,sqNum重置。SV协议与GOOSE协议相似,同样采用组播技术,报文时限同样要求为4 ms。MMS是智能设备之间交换实时数据和监控信息的一套独立的国际报文规范,协议数据单元大于3 000 Byte,无时限要求。
因为GOOSE与SV协议采取组播技术,所以带来的安全问题最为明显,如组员资格开放和设备接入带来的安全问题。虽然报文时限要求严格,但是由于智能电力设备(Intelligent Electronic Derices,IED)的存储空间和计算能力有限,因此无法采用复杂的信息安全技术。攻击者可以利用GOOSE的通信机制伪造sqNum和stNum字段,致使后续报文被丢弃,造成严重后果;也可以利用SV在报文处理过程中没有信息安全防护手段进行虚假数据攻击,使继电保护系统错误响应或拒绝响应,造成严重后果。邓力[4]已经证明了使用 GOOSE 和 SV 消息造成的重播攻击。在重播攻击中,用于发送此跳闸信号的 GOOSE 消息被攻击者捕获并保存,然后攻击者发送完全相同的消息,使断路器在非正常状态时跳闸,导致无原因的停电,对变电站造成严重危害。
MMS协议虽然存在认证和访问控制机制,但由于其工作在TCP/IP上,而TCP/IP对于拒绝服务(Denial of Service,DoS)攻击脆弱,所以使MMS对于DoS 攻击同样脆弱。为了验证DoS 攻击对 IEC 61850 变电站网络的影响是对变电站网络可用性的破坏,邓力[4]对在IED上运行的文件传输协议(File Transfer Protocol,FTP)、超文本传输协议(Hyper Text Transter Protocol,HTTP)和 Telnet 服务成功进行了密码破解攻击,从而使基于IEC 61850变电站受到严重影响。
变电站基于IEC 61850协议进行数据传输,IEC 61850协议基于TCP/IP协议,数据通过以太网传输,因此对以太网的攻击包括地址解析协议(Address Resolution Protocol,ARP)攻击、DoS攻击、身份盗用、介质访问(Media Access Control,MAC)欺骗[5]。本文通过DoS攻击对IEC 61850通信过程进行模拟攻击,从而进一步探析该攻击对IEC 61850正常通信造成的影响。
通信系统基于两个操作系统进行环境搭建。由于大多数工控设备运行在Windows XP中,所以使用Windows XP作为运行媒介,服务端为NettedAutomation公司提供的61850 server软件,模拟真实环境中主要运行设备所返还的参数;客户端是力通公司开发的61850 Brow,获得基于IEC 61850标准构建的数据报文,并根据数据包里的地址向服务器返回读写指令。IEC 61850服务器响应且返回读写结果,初步实现IEC 61850服务器端和客户端之间的通信。利用wireshark在IEC 61850通信中抓取的数据包如图1所示[6]。
图1 IEC 61850网络通信数据包
作为一个DoS攻击工具,LOIC通过使用TCP或UDP数据包充斥服务器以破坏特定主机的服务,在目标站点上执行DoS攻击。
发动DoS攻击的目的,是要让用户(即本次试验中的61850 Brow端)访问不到本可以正常访问的某些网络资源(即本次试验中的61850 Ser端),让垃圾流量充斥通信链路,导致链路拥塞,达到拒绝用户访问的目的。DoS攻击后抓取的报文如图2所示。
图2 DoS攻击后抓取的报文
由图2可知,抓取的报文截图通过伪造与主机端的连接,来回重复传送无用的垃圾数据包,在2台主机之间生成大量的无用数据,就可以达到拒绝访问的目的。
为了准确高效的防御DoS攻击,在上述攻击实验基础上,通过IEC 61850报文分析,本文提出了一种高效准确的通信防御算法。
由于SV 报文及GOOSE报文的时限要求在4 ms内,故这2种协议并没有通过网络层和传输层,而是直接映射到链路层上。加之IEC 61850大都只是在网络层对MMS协议进行加密,并没有针对3种协议进行统一的加密,所以GOOSE报文、SV报文和MMS报文都是在应用层上,具体如图3所示[7]。因此,本文重点研究基于应用层进行加密认证的方式。
图3 IEC 61850 协议栈
从IEC 61850的3类通信协议中选取最为典型的GOOSE报文作为分析报文,将抓取到的报文采用Python语言编写程序,分析GOOSE报文的特征。基于Python的报文分析主要程序为
a = rdpcap("IEC 61850.pcap")//读取wireshark抓取到的报文
for i in a:
try:
if i.type == 0x88b8://通过截获以以太网帧的协议类型字段为 OX88B8 识别出的GOOSE报文
g = goose.GOOSE(i.load)//调用goose.py中的GOOSE方法:class GOOSE(Packet)
print(repr(g.load))
gpdu = goose.GOOSEPDU(g.load[4:])//调用goose.py中的GOOSEPDU方法:class GOOSEPDU(object):
print (gpdu.__dict__)
except AttributeError:
continue
GOOSE报文分析程序程序运行如图4所示。
图4 GOOSE报文分析程序运行
GOOSE报文中最易受到攻击的部分为与报文中控制量相关的布尔值、stNum和sqNum序列性质[8];而且这3个值都存在于应用协议数据单元(Application Protocol Data Unit,APDU)中。因此,结合IEC 61850对报文的规范和约定,本文在加密过程中只对报文的应用协议数据单元部分进行加密处理。
加密算法一般分为对称加密算法和非对称加密算法两类。
对称加密算法有高级加密标准(Advanced Encryption Standard,AES)和数据加密标准(Data Encryption Standard,DES)2种,主要是对敏感数据等信息进行加密。
通过Python编写程序对2种算法的加解密比较如图5和图6所示。
由图5和图6可以看出,AES的安全级别更高。AES的工作原理是加密和解密用相同的密钥。
图5 AES加密
图6 DES加密
非对称算法有非对称密钥算法(Rivest Shamir Adleman,RSA)、数据签名标准算法(Digital Signature Algorithm,DSA)和椭圆曲线密码编码(Elliptic Curves Cryptography,ECC)3种。RSA算法是一个支持变长密钥的公共密钥算法,即为保证数据的安全,RSA的密钥会不断增加。随着密钥长度的增加,在报文传输的过程中其加解密的速度也会大大降低,从而加大了硬件的负担。ECC的提出,大大减轻了这种负担。ECC是一种椭圆曲线密码编码学,与RSA算法相比,其抗攻击性更强,加密速度更快。随着安全等级的增加,RSA 加密法的密钥长度成指数增加,而 ECC 密钥长度却只是成线性增加。例如,128 位安全加密需要3 072 位 RSA 密钥,却只需要一 个 256 位 ECC 密钥。所以在相同的密钥长度条件下,其抗攻击性更强,计算量小,处理速度快,存储空间小。
为提高报文在IEC 61850传输中的安全性,ECC-AES混合加密算法对IEC 61850传输报文进行加密,加密签名后的报文通过网络发送给接收方;接收方接收到报文后,对报文进行解密并验证报文的数字签名,最后将验证结果和根据验证结果所做出的相应处理信息加密并签名后发送回发送方。
IEC 61850客户端传输报文到服务器端时加解密工作流程如图7所示。
图7 ECC-AES算法加密 IEC 61850报文流程
通过上述实验获得应用层协议数据单元后,转存于文本中,编写Python语言程序,用 AES 算法对明文 m(即文本内容)进行加密,得到密文C,加密密钥为Key;用 ECC 对Key进行加密,得到 AES 密钥块,最后所得密文就是密文C和AES密钥块。ECC加密后得到的AES密钥块如图8所示。
图8 ECC加密后的得到的 AES 密钥块
该方法集成2种算法的优点,使数据能够更加安全可靠地在IEC 61850通信过程中进行传输,提高了抵御DoS攻击的能力。
本文在IEC 61850 仿真平台下对服务器进行攻击,并对攻击结果进行了分析,提出了ECC-AES加密算法。由于目前网络攻击行为仿真还处于初期阶段,仍有许多问题尚待解决:如缺乏丰富的攻击仿真模型库;缺少变电站的真实数据建模;还需进一步优化算法等。对数字化变电站的网络安全而言,后续仍需要投入大量的研究力量,不断提升仿真水平,才能掌握各类攻击特性,提高防范技术的适应能力,减少其对变电站实时性能的影响。