工业控制系统漏洞挖掘安全浅析

(整期优先)网络出版时间:2020-10-16
/ 2

工业控制系统漏洞挖掘安全浅析

黎博曦

湖北工业大学 湖北 武汉 430068


摘要:工业控制系统作为国家生产力的重要组成部分,是国民生产生活的重要组成部分。因此在应用时必须确保系统的运行安全,发现并修复能被黑客利用攻击的潜在漏洞。本文首先以Modbus通讯协议为例,简单介绍工业通讯一般原理,产生漏洞的原因,并且简单介绍了震网事件黑客攻击的方法。接着介绍了挖掘未公开漏洞的模糊测试方法,以及畸形数据帧的处理方法。




  1. 工业控制通讯简介

在当今数字化时代,工业控制之间的信息传递主要是通过数字化指令来传递控制信息,比如给控制器,继电器发送指令使其产生所需要的控制动作,而在信息交互过程中,有三个基本要素,1.必须定义主机和从机。当然,根据工业控制现场的环境要求,主机和从机的身份是可以互换的,并且可以是一主多从,多主一从,多主多从式通讯。2.通讯时必须有相同的信号时序(波特率),以便接受正确的指令码。3.通讯双方必须使用同一套通讯协议,所谓通讯协议,就是计算机能够识别的,正确的指令代码。

以下以工业MODBUS通讯协议为示例:

Modbus是由Modicon在1979年发明的,是全球第一个真正用于工业现场的总线协议。根据其数据帧的格式可将数据信息分为4个部分:从机地址、功能码(功能号)、数据、校验值。

5f891a2b2d122_html_6db371bcf2005448.png

图1.1 MODBUS通用帧


  1. 从机地址:在多从模式下,主机必须对从机进行编号,这个编号就相当于从机的身份ID,以确保主机给希望控制的从机发送指令,通常叫做从机地址,每一个从机都有唯一的地址,相当于居民身份证号或者是计算机的IP地址。从机在接收到数据帧后会根据从机地址来判断当前数据是否是发送给自己的指令。

  2. 功能号:功能号是用来表示所要执行的功能,通俗的说就是主机希望从机干什么,下面列举Modbus部分功能号。如表2.1

功能号

名称

作用

01

读取线圈状态

取得一组逻辑线圈的当前状态(ON\OFF)

02

读取输入状态

取得一组开关输入的当前状态(ON\OFF)

03

读取保持寄存器

在一个或者多个保持寄存器中取得当前的二进制

04

读取输入寄存器

在一个或者多个输入寄存器中取得当前的二进制

05

强制单线圈

强制一个逻辑线圈的通断状态

06

预置单个寄存器

把具体二进制值装入一个保持寄存器

这里值得提醒的是,以上为工业Modbus功能号标准,功能号(亦可称作为指令码)是人为定义出来的,我们完全可以将01定义为读取保持寄存器,或者是将06定义为读取线圈状态,当然前提是当主机发送指令的时候从机能够识别并且做出正确的动作。之后就是需要传送的数据和用来检验传送过程中数据是否正确的校验码。大多数情况下,不同的通讯协议其数据格式不尽相同,但其本质上都是进行数据传输的一种方式,只要通讯双方都遵守同一套通讯协议,就能够在控制系统中接收主机的指令,完成期望的线圈动作。

当然若是进行数据帧的功能号(指令代码)为2个16进制数,则能够定义的指令代码为255个之多。大多数情况下,通讯协议不可能给动作线圈定义255个指令代码。未经定义的指令代码是否可以触发动作线圈误动,或者执行多个指令代码时候是否会因为编写程序时候的逻辑错误而产生线圈误动?上述问题几乎是每一套工业控制系统在运行的第一天起就会一直面对的问题,也是漏洞产生的主要原因。

  1. 电力工业控制系统黑客攻击简述

进年来,由于Windows操作系统的普及以及工业控制领域的数字化,智能化不断渗透,传统继电器控制将逐渐被淘汰。尽管在工业控制系统中的通讯协议多种多样,但是只要是基于数字化通讯就会有黑客进行恶意攻击,例如2010年伊朗震网事件,该病毒依据Windows渠道进行攻击,并且具有多种扫描和浸透机制,能够自我复制,传达能力强。通常以常见的黑客技能发起初度进犯;侵略SCADA和DCS后,使用其资源再侵入其他工业操控体系;对“非路由”体系(如有PLCs和IEDs中组成的总线),它也能够进行感染,并浸透进更深层的工业生产过程中。全球已经约有45000个网络被该病毒感染。2015年12月的乌克兰停电事件,攻击者入侵监控管理系统,导致了7个110KV变电站和23个35KV的变电站出现了故障,导致80000用户断电。

现在,我国工控范畴的安全可靠性问题异常突出,工控体系的复杂化、IT化和通用化加重了体系的安全隐患,潜在的更大要挟是我国工控工业综合竞争力不强,嵌入式软件、总线协议、工控软件等核心技能受制于国外,缺少自主的通信安全、信息安全、安全可靠性测试等标准。

上述问题的存在使得黑客进犯我国工业操控体系变得适当轻松,尽管传统互联网进犯的根本过程和办法相同适用于工业操控体系网络,但是由于工业操控体系网络运用专门的体系和协议,其进犯过程和办法也有必定的差异性。

三.基于模糊测试的漏洞挖掘技术

工业操控体系的网络、协议和体系都比较特殊,进犯者要收集到相关信息并不复杂,他们通常会从企业的揭露信息、轮班时刻表、合作效劳和贸易往来,尤其是企业供货商所供给产品的协议标准等入手。

在当下科技水平不断提高的趋势下,收集这些信息变得越来越简略。如查找引擎SHODAN,能够依据端口、协议、国家和其他条件查找与互联网相关的一切设备。

从模糊概念角度来讲,漏洞是指系统中存在的任何不足或缺陷,是在许多层次 和角度下可以察觉到的违背功能,是用户、管理员和设计者意愿的一种违背,并且 这种违背背景是由外部对象触发的。

随着工业控制系统的的逐渐复杂,其建造成本费用日趋提高,对于成本较低的黑客攻击显然是无法承受的。工业控制系统中自身存在的漏洞必须通过仿真平台的搭建测试其潜在漏洞。越是复杂的系统其潜在的漏洞就会越多,也越容易出问题。所以进行测试,发现系统的漏洞并且及时修复就显得至关重要。

目前Fuzzing技术是当前检查漏洞的普遍手法,通过一款名为peach的开源软件进行模糊测试,由解析器、变异器、引擎、生成器、状态机、和监视器组成。在使用时通过向目标机发送随机的数据帧,制造大量的畸形数据用以检测系统响应的稳定性,检测系统的异常状态。Fuzzing测试一般包括6个过程,如图3-1所示,分别是:识别目标、识别输入变量、构造测试用例、执行测试用例、监视异常、确定可利用性。


5f891a2b2d122_html_a0a591e11fe99ade.gif

图3-1Fuzzing测试过程

测试过程所产生的大量随机数据包进行仿真控制系统的测试,当然由于是随机的,无规则的数据包,下位机在大多数情况下不会进行线圈动作,但是由于peach产生的数据包量巨大,不排除会有线圈由于接收错误的指令而进行动作。而这个过程就叫做漏洞挖掘,黑客有可能根据这个漏洞进行攻击。这时就将发送的错误的数据进行标记,并且由人工分析线圈误动的原因并且及时修复。

并且由于peach是随机产生的畸形数据,其漏洞挖掘效率比较低。因此目前会使用一些目的性和指向性比较明确的方法,比如Python爬虫技术、神经网络算法分析。可以大大降低一些根本不必要的畸形数据帧输入,能够更为有效的挖掘出潜在漏洞。

四.总结

工业控制系统日趋智能化,带来的必然是控制程序和硬件结构的复杂化。而越是复杂的系统其安全漏洞越多。一般情况下黑客对工业系统的攻击是任何一个企业都难以承受的,所以基于模糊测试的漏洞挖掘技术对于一个工业控制系统来说就显得尤为重要。在未来的工业控制领域,系统漏洞的及时发现与修复会是技术人员面临的一个巨大挑战。

  1. 参考文献

[1]国网江西省电力公司电力科学研究院.电力工控系统静态和动态漏洞分析与挖掘技术.[R].2016,12.




[2]段斌,李兰.基于动态污点分析的工控设备硬件漏洞挖掘方法.[J].信息网络安全.2019,(4).

[3]伊胜伟,张翀斌.基于peach的工业控制网络协议安全分析.[J].清华大学学报:自然科学版.2017,第1期.

[4]黄影,邹颀伟,范科峰.基于Fuzzing测试的工控网络协议漏洞挖掘技术.[J].通信学报.2018.

[5]李莉.工业控制系统信息安全浅析.[J].电子产品世界.2020,第2期.

[6]吴家奇,李雪,詹志宏.电力工控系统信息安全探析.[J]安徽电气工程职业技术学院学报.2019(3):123-125