一种针对工控系统攻击的远程检测方案(工控系统安全)

论文标题:SHADOWPLCS: A Novel Scheme for Remote Detection of Industrial Process Control Attacks
论文作者:Junjiao Liu, Xiaodong Lin, Xin Chen,Hui Wen,Hong Li,Yan Hu,Jiawei Sun,Zhiqiang Shi and Limin Sun
论文连接https://ieeexplore.ieee.org/document/9301471
期刊名:网络安全顶刊TDSC

本文系原创,转载请说明出处
Welkin Chan. 一种针对系统攻击的远程检测方案.


内容提炼

该论文的检测思想很完备,从主动与被动的两种角度出发构建检测方式。同时,该论文从工控流程本身出发,以两类攻击方式:恶意数据注入以及控制逻辑注入为主,将攻击场景设定成非法地址访问攻击、恶意数据注入攻击、篡改配置攻击、控制逻辑干扰攻击、控制程序替换攻击五种,按照这些攻击方式在工控过程中的向量分布构想检测方案。

  1. 首先通过对PLC代码分析获取有效地址规则、有效值范围规则、控制逻辑规则
  2. 然后,被动检测通过对通信数据流分析的方式,对数据流按照协议规则进行分解,提取出源端口、源地址等要素,按照三种白名单依次分析是否有非法连接、操作非法地址、非法值
  3. 主动检测针对恶意数据注入、密钥配置以及控制程序被篡改或替换等攻击,通过与PLC主动建立连接,按协议构建网络数据包,读取寄存器变量,在不影响PLC正常运作的情况下对PLC的存储空间进行映射,并将映射所获取的内存空间中的值与有效值呵控制逻辑白名单进行对比,以验证是否遭到注入、篡改或替换等攻击。

优点:

  1. 深度结合工业过程。PLC通过PLC程序自动控制实际的工业过程。因此,由PLC代码生成的检测规则比基于网络流量的建模和规则提取更全面,能够充分反映真实的受控过程。同时,使用程序规则来检测工业过程控制攻击更为有效。
  2. 无需额外人力。ShadowPLC可以通过对PLC控制代码的自动分析,自动、全面地生成权威的检测规则,而无需人工依赖经验和手动配置和建模。
  3. 进程控制攻击很难被绕过。我们的方案结合了主动和被动方法,从不同角度检测攻击行为。由于我们深入了解受控过程并主动映射相应的PLC寄存器变量,这使得攻击者更难进行隐蔽攻击。为了逃避检测,攻击者需要了解真实的工业流程,并能够实时响应IDS符合受控流程的虚假数据。这通常需要深入PLC,攻击PLC固件并修改其网络处理模块,而不是简单地通过中间商避免检测。
  4. 应用广泛。根据我们提出的检测方案,我们可以定制不同PLC设备的开发,并实际实施,以对IC进行实质性防御。

缺点:

  1. 型号局限性。尽管几乎所有PLC语言都遵循IEC 61131-3标准,但不同品牌和型号的PLC的编程语言可能存在一些差异。因此,当通过分析PLC代码生成检测规则时,必须针对不同类型的PLC进行定制开发。
  2. ShadowPLCs不适用于加密的专用工控系统协议。无论是被动检测还是主动检测,对ICS协议的分析都是最基本和必要的。IDS工程师需要能够深入理解协议格式和通信方法,能够提取重要信息并构建数据包,以便基于ICS协议与PLC通信。
  3. 主动检测方法无法对设置了访问权限的PLC设备执行攻击检测。然而,大量PLC设备目前并不限制PLC寄存器变量的远程读取。

摘要

随着针对工业控制系统(ICS)的攻击越来越多,工业控制系统(ICS)安全变得越来越重要。尽管过去已经提出了许多现成的工业网络入侵检测机制,但攻击者总能找到独特的伪装方法来绕过检测并破坏实际的工业控制过程。为了缓解这一缺陷,我们提出了一种新的检测工业过程控制攻击的方案,称为ShadowPLC。具体来说,该方案首先自动分析PLC的控制代码,然后提取PLC的关键参数,包括有效寄存器地址、有效值范围和控制逻辑规则,作为评估攻击的基础。通过与PLC的主动通信和对网络流量的被动监控,从不同角度实时检测攻击行为。我们以西门子S7-300系列PLC为例实现了一个原型系统。使用部署在天然气管网平台上的两台西门子S7-300 PLC对我们的方案进行了评估。实验表明,该方案能够在不影响PLC正常工作的情况下实时并准确地检测过程控制攻击。与其他四种具有代表性的检测模型相比,该方案具有更好的检测性能,检测准确率达97.3%。


主要内容

1 背景知识

1.1 工业控制系统的基本环境组成

在这里插入图片描述

工控系统环境由控制中心和工业厂点构成,连接控制中心和工业厂点的便是PLC。PLC是一种带有微处理器的数字逻辑控制器,这些微处理器通过编程定义控制逻辑,以维持物理过程的预期状态。PLC通过监测网络连接到控制中心。工程站将过程控制程序下载到PLC,然后PLC根据程序指示的控制逻辑自动控制工业生产。操作员站点通过从PLC请求工业现场的测量数据来监控工业过程。必要时,操作员可向PLC发送控制命令,对生产过程进行相应操作。在工业厂点,PLC连接到传感器和执行器,控制程序使用传感器数据作为输入并设置输出以激活执行器。

1.2 PLC的工作过程

在这里插入图片描述
(PLC内部结构)
在这里插入图片描述
(PLC工作流程)
PLC的工作过程在循环扫描中执行。当PLC处于运行状态时,其运行周期可分为三个基本阶段:

  1. 输入采样阶段。PLC逐个扫描每个输入端口,将所有输入设备的当前状态保存到相应的存储区,并将专用于存储输入设备状态的存储区作为输入映像初始化(在计算机系统中image一般翻译为镜像);
  2. 程序执行阶段。CPU从用户程序存储区读取用户指令,在执行相应操作后,生成相应结果,并刷新相应的输出映像寄存器。在此期间需要输入映像寄存器、输出映像寄存器、中间寄存器等的相应状态;
  3. 输出刷新阶段。系统程序将输出映像寄存器的内容传输到输出锁存器,并通过输出终端来传递输出以驱动外部负载。输出锁存器保持其状态直到下一个周期,而输出寄存器的状态在程序执行阶段是动态的。

1.3 PLC规范语言

国际电工委员会标准IEC 61131-3是PLC语言的国际标准,规定了控制逻辑编程中的语法、语义和显示,并对以前的编程语言进行了部分修改,形成了当前通用的五种语言:梯形图(LD),顺序功能图(SFC)、功能框图(FBD)、结构化文本(ST)和指令表(IL)。

1.4 PLC控制逻辑监测

在这里插入图片描述
TIA在线检测PLC程序的运行状态
几乎所有的PLC编程软件都提供了一种程序监控模式,允许远程直观地监控PLC程序的运行状态。如图3所示,TIA门户V13在线监控西门子S7-300 PLC的梯形图程序。它主动与PLC通信,以获取当前运行状态并以图形方式显示。图3中的梯形图逻辑可以转换为数学表达式(I0.0&M30.0)|(I0.1&┒DB20.DBX0.0)| M30.0 = Q0.0。此时,在PLC中,输入寄存器I0.0I0.1、中间寄存器M30.0M30.1、数据块DB20.DBX0.0(原文次数少写了个字母)和输出寄存器Q0.0的值分别为1,0,1,0,1,1。
将它们引入到数学逻辑运算中,我们可以得到与图3相同的结果。这是一种低干扰方法,不会影响PLC的正常运行。受此启发,我们的入侵检测方案从PLC代码中提取检测规则,并使用低干扰方法与PLC通信,映射其内存中的当前信息,对工业控制过程进行实时远程监控,并发现过程控制攻击行为。


2 攻击模型构建

对于攻击者来说,攻击ICS的最终目标是在不被高级IDS或工厂操作员检测到的情况下操作物理进程。在本节中,我们首先讨论正在考虑的对手模型,然后介绍五种典型的攻击场景。
在这项工作中,我们调查了近年来对PLC的网络攻击,将主要的攻击方法分为两类:1)虚假数据注入。2)控制逻辑注入

2.1 攻击者模型

  1. 虚假数据注入是指将不符合工业控制过程的恶意数据注入PLC,最终导致过程控制的破坏。例如,写入反转或最小/最大值,修改关键设定点变量值和过程值。
  2. 控制逻辑注入是指篡改或替换目标PLC上运行的原始控制逻辑。攻击者通过干扰正常下载/上传控制逻辑工程操作,将恶意控制逻辑注入目标PLC。”Stuxnet“蠕虫篡改了PLC控制程序,加快了伊朗核电站的离心机速度,并对历史数据做出反应,使控制中心感到困惑。

2.2 攻击场景

基于上面讨论的对手模型,我们考虑了以下攻击场景,这可能会严重破坏工业控制过程:非法地址访问攻击、恶意数据注入攻击、配置篡改攻击、控制逻辑感染攻击和控制程序替换攻击。在本文中,我们只关注这五个工业过程控制攻击场景,并且不考虑物理攻击、固件攻击、侧信道攻击等,因为它们可能不太可行或有害,或者可以被现有的IDSs检测到。

(1) 非法地址访问攻击。在此攻击场景中,假设攻击者面对的是黑盒PLC,但对手有能力远程访问PLC的寄存器空间。为了有效地攻击PLC,对手将首先探测PLC的寄存器空间,以找到关键的攻击执行点。例如探索PLC使用的输入和输出接口、定时器、计数器、关键参数。这种攻击很容易发动,对手不需要知道实际的工业过程。
(2) 恶意数据注入攻击。假设对手已经知道PLC中的一些关键控制点,如寄存器Q0.0,以控制阀门的开启或关闭。常见的攻击方法是强制对寄存器地址执行写操作,覆盖寄存器的当前值。例如,在污水净化完成之前,阀门关闭。此时,寄存器Q0.0为“0”。对手强行将“1”注入Q0.0,覆盖了Q0.0的实际状态,导致阀门打开,污水泄漏。这种攻击简单而粗鲁,效果显著,但不易隐藏。
(3) 篡改配置攻击。假设对手对工业过程有所了解,他们通过恶意篡改关键程序配置信息间接破坏工业过程。例如,篡改计时器和计数器设置等,会发起释放攻击。
(4) 控制逻辑感染攻击。假设对手有能力窃取PLC的当前控制程序。它们通过感染控制程序干扰实际的工业过程。例如,将I/O寄存器中的值替换为内存中的某个可控值,以控制执行器的状态、插入/删除指令-s/梯级、替换方程式中的运算符、修改设定点、修改控制流行列式(影响控制逻辑条件分支决策的变量)等。
(5) 控制程序替换攻击。在此攻击场景中,对手不会感染原始PLC控制程序,而是植入恶意控制代码并尝试让PLC执行它们。由于这种攻击完全由对手控制,以摧毁他们想要完成的任何工业过程,因此具有很强的隐蔽性,具有破坏性,随时可以发动。典型的攻击,如数据执行攻击、碎片攻击和噪声填充攻击。

2.3 寻址攻击

最先进的ICSIndustrial Control System) 的IDS本质上是周期性地监控ICS网络消息的内容,并验证它们是否发生了重大变化。由于它们在ICS网络中是恒定的或可预测的,因此这些IDS对非法地址访问攻击和恶意数据注入攻击具有一定的检测效果。然而,ICS网络流量缺乏对程序配置、控制逻辑运行状态等的实时监控,因此IDSs对控制逻辑感染攻击和控制程序替换攻击的检测效果一般较差。


3 方法

3.1 利用PLC代码生成基于签名的检测规则

控制逻辑是在控制实际工业过程的PLC中重复执行的程序。PLC代码携带最全面和完整的控制过程信息,如触点、线圈、指令等,它们以常量值或寄存器地址的形式作为变量,仅通过镜像ICS网络流量是无法获取这些信息的。而通过分析PLC代码,可以识别出IDS签名集主要有三种白名单规则:有效地址规则、有效值范围规则和控制逻辑规则。
1) 有效地址规则。PLC内部的有效地址空间是固定的,它与控制程序有关。在正常情况下,控制中心只访问一些有效地址,并且读取大多数操作,因为有效地址存储当前设备状态信息。由于缺乏对ICS的了解,许多攻击者使用暴力方法感染易受攻击的寄存器。如果存在超出有效地址范围的访问,则可以快速识别这种异常行为。
2) 有效的值范围规则。PLC代码包含重要的配置信息,一旦它们被篡改,被PLC控制的设备稳定状态就会被破坏。举个例子,设置点信息,如计时器和计数器,篡改它们可能会导致提前或延迟攻击;一些关键变量的数值范围,如离心式变频器驱动器的频率转换范围在807Hz和1210Hz之间;又如一些特殊指令也会影响数值范围,如“div”指令不能除以0,否则会导致设备故障。我们分析PLC代码并生成有效的值范围规则来监控PLC中的关键配置信息。
3) 控制逻辑规则。ICS通过PLC程序的控制逻辑指导工业生产过程。常用的控制方法有开关逻辑控制、模拟控制、运动控制、过程控制等。PLC中的各种寄存器变量(如输入寄存器、输出寄存器、中间寄存器、定时器、计数器等)相互配合以完成自动化控制目标。因此,我们解析PLC代码,提取寄存器变量之间的逻辑关系,然后生成控制逻辑规则。使用这些规则作为基线,检测恶意攻击,如PLC控制逻辑感染或程序替换。

在这里插入图片描述
如图4所示,我们以单向交通灯控制为例,演示如何使用PLC代码生成基于签名的检测规则。单向交通灯控制程序包含两个文件。一个文件是程序源代码,它是信号灯的自动控制程序。另一个文件是PLC变量表,它记录变量名称、实际PLC地址和数据类型。我们首先查询变量表并替换源代码中的变量名。
如图4的前两个块,即PLC Control Code的所示,例如“Run”<-> I0.0,“Stop”<-> I0.1和“Tag_1”<-> M0.0
在这里插入图片描述
即PLC控制代码的右侧双引号包括一栏为“name”一栏,对应着地址。然后对代码指令进行词汇、语法和语义分析,生成有效地址规则,如有效地址I0.0、I0.1、M0.0、T2、T0;有效的值范围规则,如T2∈ [0,60s];和控制逻辑规则,如I0.0&¬I0.1→ M0.0,M0.0&¬T2→ T0。
因此,由PLC Control Code、PLC Variable Table组合,可以生成控制逻辑规则、有效值范围规则以及有效地址规则,一一对应图四中的三个板块。

注:这个PLC控制代码是西门子S7-400PLC代码的指令集,可关注公众号信安科研人,发送“西门子指令集”获取pdf版文件。
在这里插入图片描述

3.2 基于主动和被动的攻击检测模型

该论文提出了一种主动和被动相结合的入侵检测方案。如图5所示,该IDS包括两部分:被动检测引擎主动检测引擎。被动检测引擎通过被动监控网络流量来检测异常行为,如非法地址操作和非法值冲突。主动检测引擎主动与PLC进行通信,以低中断和轮询映射PLC的存储空间,并实时监控工业控制过程中的异常情况。
攻击者很难绕过主动和被动相结合的入侵检测方案,并且很难隐藏自己。因为他们需要不断模拟工业生产现场的正常状态,符合控制逻辑,甚至需要篡改设备的固件或网络通信模块,而不是通过简单的ARP欺骗和重放数据包等传统手段欺骗IDS和控制中心。
在这里插入图片描述

3.2.1 被动检测

被动检测引擎首先镜像(复制数据流)流经工业交换机的网络流量,通过深入解析工业控制协议,提取五元组信息(源IP、目的IP、源端口、目的端口、传输层协议)、操作地址操作指令具体值。然后检查上述信息是否符合有效地址白名单和有效值范围白名单,并检测非法连接、非法地址操作、非法值等异常行为。
在这里插入图片描述
如图6所示,网络信息列表的红色部分表示异常。计数器C1.0的有效范围在0到20之间,但网络中C1.0的值为23,因此报警为C1.0非法越界。在第2行数据里面,M30.0不在有效地址规则的白名单中,因此M30.0是非法地址。第3行数据里面, IP 192.168.20.4和端口35555是新连接,不在白名单中,因此将被认作是非法连接。
在这里插入图片描述
算法1显示了被动检测的过程:
第1行表示深度解析协议,并提取五个元组、地址、操作和值。
第2行是非法连接检测。当网络流量中出现未知IP、未知端口和未知通信时,会报警以非法链接。
第4行检测非法地址。当网络流量中存在PLC实际未使用的地址时,会报警以非法地址;
第6行表示检测到非法值范围。当值超出范围等时,会报警以非法值范围。

3.2.2 主动检测

主动检测引擎主要检测程序控制逻辑的异常,防止重要的内存地址被注入恶意数据、密钥配置以及控制程序的被篡改或替换。控制逻辑规则通常由多个寄存器变量组成。这些变量一度可以被用来检测PLC的当前程序运行状态,由于PLC与控制中心之间的通信网络是静态的,工业现场状态监测采用请求-响应方式,无法满足同时监测相关的多寄存器变量的要求。
我们主动地与PLC建立连接,根据通信协议格式构建网络数据包,一次读取多个相关寄存器变量,并在不影响PLC正常运行的情况下映射PLC的存储空间。具体的说,主动检测模块首先主动连接到PLC并映射相应的内存空间,然后验证它们是否满足有效值范围白名单和控制逻辑白名单。
在这里插入图片描述
图7展示了控制逻辑攻击检测的例子DataItemMap<address,value> 表示被主动检测模块映射的内存空间。寄存器地址和参数值则是<>中的键值对(图7中的蓝色字体),即左边是寄存器地址,右边是寄存器的值。控制逻辑规则是检测基准,如第一行的DB20.DBX0.06&DB20.DBX0.0 | (DB20.DBX0.1&¬DB20.DBX0.0)|M32.0 →Q0.0
如果任意一个结果,即DB20.DBX0.6 & DB20.DBX0.0DB20.DBX0.1&¬DB20.DBX0.0M32.0中任意一个结果为1,则Q0.0输出1,否则输出0。因此,1&1|(0&¬0)|0→ 1与控制逻辑规则1匹配,这意味着行为正常。同样,红色表示1&0 |(0&0)→ 0, 0 & (10 = 0) & ¬0 → 11&0 | (0&¬1) 0→ 1与控制逻辑规则不匹配规则2及规则3,它将警告PLC可能的控制逻辑攻击,并可定位可疑寄存器和代码段。
主动检测引擎以主动、低干扰和轮询的方式检测PLC是否被攻击,其核心部分如算法2所示。
在这里插入图片描述

首先,与PLC(1号线)建立通信连接;然后攻击检测(第2行至第16行);
最后,当有任务更改需求时,连接断开,任务被销毁(第17行,第18行)。
在攻击检测阶段,第一步是加载控制逻辑规则、有效值范围规则和有效地址规则(第4行),以获取寄存器地址和数据类型。其次,根据协议格式构建请求包并发送到PLC(第5行、第6行)。第7行和第8行表示接收响应数据并解析协议以提取寄存器变量值;最后,检查有效值范围和控制逻辑是否存在异常(第9行至第15行)。第16行表示请求频率的设置,以实现对PLC的低干扰。


4 实验设计与评估结果

4.1 实验设计

阶段一: 基于PLC代码生成攻击检测规则
1、 在进行攻击检测前,需要提取检测规则,这就需要对PLC代码进行分析。一般来说,有两种方法获取PLC代码,一种是直接从官网等获取源代码,另一种是通过反编译机器代码。本工作使用第二种方法。
在这里插入图片描述

反编译的流程见图9这里需要知道STL是 statement list的缩写。如图9,按照MC7代码的特征值对原数据字节进行分块,并按照特征(见TABLE 1)对分的块进行语义分析,也就是按照MC7的结构进行数据分块。
在这里插入图片描述

反编译完成后,就到了检测规则的生成阶段。
1、首先对西门子S7-300/400的STL程序文本文件进行预处理,预处理主要包括代码段剪切和程序压缩。通过代码段切割,可以划分STL的主程序段;程序压缩可以消除不影响控制逻辑的不必要指令,减少程序自动分析和白名单规则提取的负担。
2、经过预处理后,我们对STL程序进行了自动分析。通过词法分析和语法分析,解决了操作类型、地址类型、比较条件等问题,推测了过程变量最可能的数据类型和取值范围,提取了有效地址白名单和有效取值范围白名单。通过语义分析,可以准确提取过程变量之间的相关性,提取控制逻辑白名单。阶段1的具体流程见下图
在这里插入图片描述
阶段二
在此阶段,我们将介绍进程控制攻击检测的实现细节。在这项工作中,我们采用低干扰、主被动相结合的入侵检测方法,并且不影响PLC的正常运行。据我们所知,这是首次将主动和被动相结合应用于ICS攻击检测的工作。如图8所示,我们的过程控制攻击检测由两部分组成:被动检测引擎和主动检测引擎。在攻击检测之前,将有效值范围白名单、有效地址白名单和控制逻辑白名单植入检测引擎。两个检测引擎同时运行并协同工作,从不同角度检测ICS的攻击行为。
ICS协议的深度解析是ICS网络入侵检测的基础。S7通信(S7comm)是西门子S7-300/400系列PLC采用的专用通信协议。控制中心上传/下载PLC程序、控制命令的读/写请求以及PLC对应的响应均按照本协议执行。
在这里插入图片描述

在图8中,主动检测引擎和被动检测引擎相互协作,从不同角度检测异常行为。被动检测引擎首先镜像流经工业交换机的网络流量,然后深入解析S7comm协议,提取五个元组、操作、地址和值,最后匹配有效地址白名单和有效值范围白名单,检测非法链接、非法操作地址和非法值。
特别地,主动检测引擎通过低干扰、切片、轮询和主动分组发送来读取有效地址空间的当前值。主动检测引擎首先加载控制逻辑规则,并根据S7comm协议格式构造多地址读取数据包。然后,它与PLC通信以发送和接收数据。最后,验证控制逻辑是否异常。

4.2 实验结果

在这里插入图片描述
几个IDS 对五种不同攻击检测的准确率结果如上图,这里不再赘述。

posted @ 2021-08-18 16:19  WelkinChan  阅读(843)  评论(0编辑  收藏  举报